Creé una cadena de bloques privada en dos máquinas diferentes. Ahora quiero que estos nodos se conecten entre sí como "pares". Estoy usando geth
la consola.
He probado el siguiente comando:
> admin.addPeer("enode://3414c01c19aa75a34f2dbd2f8d0898dc79d6b219ad77f8155abf1a287ce2ba60f14998a3a98c0cf14915eabfdacf914a92b27a01769de18fa2d049dbf4c17694@10.10.23.196:30301");
Aquí 10.10.23.196
está la IP de la segunda máquina y 30301
es el puerto en el que se ejecuta.
Se true
muestra 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.
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.
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.listening
el 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!
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 nodekey
el 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 ...!
Sí.