cómo conectarse a geth desde dos máquinas locales ethereum

Soy nuevo en Ethereum e intenté todo para conectar testnet desde dos nodos de máquinas locales. Intenté ejecutar dos consolas en una sola máquina por admin.addPeers (nodeUrl) y pude conectarme. cuando probé con lo mismo para diferentes máquinas que usan la misma identificación de red, muestra el recuento de pares como cero. por favor ayuda a resolver esto. gracias de antemano

Respuestas (5)

Dado que está ejecutando dos nodos en dos máquinas diferentes, debe mencionar la dirección IP del nodo mientras se conecta a través de addPeer(enodeURI).

Tutorial detallado:

  • Debe tener el mismo archivo de génesis en cada máquina en la que desee iniciar un nodo.

  • Todos los nodos deben tener el mismo--networkid

  • El --rpcporty --portdebe ser diferente para cada instancia de geth.

  • Si trabaja en la misma máquina, cada instancia de geth debe tener un archivo --datadir.

Iniciando instancias de geth:

Nodo 1:

geth --genesis path/to/genesis.json --datadir path/to/directory --networkid 1234 --port 30301 --rpcport 8101 console

Nodo 2:

geth --genesis path/to/genesis.json --datadir path/to/directory --networkid 1234 --port 30302 --rpcport 8102 console

Puede agregar comandos como --maxpeersy --nodiscoversi lo desea.

Después de iniciar estas instancias, busque un mensaje similar en la consola:

I0829 13:30:07.347738   3987 backend.go:303] Successfully wrote genesis block. New genesis hash = 82b6159155c00fb0b420046012a02257a176ad5dcfce4be4a15da39c166518e2

Si este es el caso, inició con éxito los nodos con una cadena de bloques privada. Si ve un mensaje similar a Warning: Wrote default ethereum genesis block, entonces algo anda mal.

Conexión de nodos:

Nodo 1: (en la consola de JavaScript)

admin.nodeInfo.enode

La salida será algo como:

"enode://da97197a3335806658f17fdc167e943bd040fdf59ed882389d5f87b29f31362b12f13bd58438b7b5619497b54bab252a696cafc7cdd9696c4db1cacdb7e6a962@[::]:30301"

Observe que el número de puerto al final del URI es 30301.

Nodo 2:

Ejecute el mismo comando en el Nodo 2 y obtendrá un resultado similar con 30302 al final:

"enode://47e61e304d802fb98403fbf877e1018d13044630a16eb9c15c1d0fb139d465e02d995acd239768f6ced04579d9639d8a75c73c30d7443a9d6d6146a44c8b5e7b@[::]:30302"

Para conectar estos nodos, averigüe la dirección IP del Nodo 2. Como se trata de una red local, cada máquina debe tener una dirección IP privada única. Mientras usa la addPeer(enodeURI)función, [::]en el enodeURI debe reemplazarse con la dirección IP de la máquina en la que se ejecuta el nodo. Ahora, en el Nodo 1:

admin.addPeer("enode://47e61e304d802fb98403fbf877e1018d13044630a16eb9c15c1d0fb139d465e02d995acd239768f6ced04579d9639d8a75c73c30d7443a9d6d6146a44c8b5e7b@10.0.0.123:30302") 

Después de que este comando devuelva true , net.peerCountdebería devolver 1 y admin.peersdebería devolver los detalles del nodo que se agrega/conecta. Antes de conectarse, verifique si net.listeningdevuelve verdadero en ambos nodos.

Fuentes:

Configurar una red privada o un clúster local

Conexión a la red

Cómo crear una cadena privada de Ethereum

--genesis ya no es válido
@galahad, gracias por la respuesta detallada. Sé que esta es la respuesta del año pasado y las cosas han cambiado. Todavía te estoy preguntando sobre el tercer paso, es decir, addPeer. ¿Tenemos que mencionar la ip de la máquina si estamos tratando de ejecutar en la misma máquina? ¿Y ambos nodos tienen que minar aunque sean de la misma red?

La respuesta de Roland es buena, pero debe tener en cuenta que geth (y todo ethereum hasta el momento) se unen a los mismos puertos predeterminados, lo que significa que debe cambiarlos de sus valores predeterminados cuando ejecuta varias instancias en el mismo host (es decir, 127.0.0.1) .

Es bastante fácil incrementar los puertos predeterminados para cada instancia y luego crear un script (bash) para ejecutarlos de forma independiente (como procesos en segundo plano).

Si desea más independencia entre las instancias de geth, considere crear un directorio de datos separado para cada una (modifique el argumento de línea de comando --datadir de la otra respuesta):

--datadir "~/privethnet/geth_client"
--datadir "~/privethnet/geth_bootstrap"
Bud, dijo dos máquinas...
Dos máquinas locales también pueden referirse a hosts virtuales. ¿Quizás pueda aclarar?
Gracias chicos... dos máquinas locales significan dos portátiles, digamos...

Una configuración de ejemplo para una red privada

Cree un archivo llamado genesis.json con el siguiente contenido:

{
    "nonce": "0xdeadbeefdeadbeef",
    "timestamp": "0x0",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "0x0",
    "gasLimit": "0x8000000",
    "difficulty": "0x400",
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "coinbase": "0x3333333333333333333333333333333333333333",
    "alloc": {
    }
}

Ejecute lo siguiente:geth --datadir ./ init genesis.json

geth --identity "nodeA" --rpc --rpcport "8000" --rpccorsdomain "*" --datadir "~/privethnet/" --port "30303" --ipcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" --rpcapi "db,eth,net,web3" --autodag --networkid 1900 --nat "any" console


geth --identity "nodeB" --rpc --rpcport "8000" --rpccorsdomain "*" --datadir "~/privethnet/" --port "30303" --ipcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" --rpcapi "db,eth,net,web3" --autodag --networkid 1900 --nat "any" console

Agregue el par usando la URL del par:
busque el nodo del par en el registro de inicio de geth0712 13:34:00.865021 p2p/discover/udp.go:217] Listening, enode:...

admin.addPeer(nodeURL)

Compruebe si se agregó un nodo par:admin.peers

Ejemplos de nodeURLS son: Nodo A nodeURL:

enode://da97197a3335806658f17fdc167e943bd040fdf59ed882389d5f87b29f31362b12f13bd58438b7b5619497b54bab252a696cafc7cdd9696c4db1cacdb7e6a962@151.62.56.89:30303

URL del nodo del nodo B:

enode://9d4687d7cfa8c2215d2f2b4278a3e0ab4bde22ab838dd203b234866d69405b4b704fce4a71638f8c66018ba187a3599c612267ac382589bb81131c7dc18ff251@151.62.56.89:30303
Gracias. Probé esto y también pude obtener el conteo de pares. Pero cuando realizo transacciones y minería, eso no se transferirá. Digamos que tengo dos cuentas en la primera máquina y transfirí dinero de acc1 a acc2. en la primera máquina y ejecutar la minería desde la segunda máquina no se transferirá... no entiendo cuál es el error...

Un usuario de Github llamado FleetingCloud ha creado una buena secuencia de comandos de interfaz de usuario de estilo comando para configurar Ethereum en una red privada. Lo recomiendo altamente.

https://libraries.io/github/FleetingClouds/InitializeEthereumPrivateNetwork

Editar:

Después de clonar el repositorio, simplemente ejecute el script initializeEthereumPrivateNetwork.sh. Luego le preguntará cómo le gustaría nombrar su red, los directorios de geth en los nodos raíz y cliente, etc.

Si bien esto puede responder teóricamente a la pregunta, sería preferible incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia.

--genesis ya no es válida. Necesita usar init en su lugar. Aquí está mi código que reemplacé con el paso 1:

geth --identity "MyTestNode" --nodiscover --networkid 1999 --port 30301 -- rpcport 8101 --datadir /home/appo/geth/  init /home/appo/.json console

Puede configurar las banderas y los puertos que desee, este es solo el código que ejecuté en mi máquina.