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
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 --rpcport
y --port
debe 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 --maxpeers
y --nodiscover
si 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.peerCount
debería devolver 1 y admin.peers
debería devolver los detalles del nodo que se agrega/conecta. Antes de conectarse, verifique si net.listening
devuelve verdadero en ambos nodos.
Fuentes:
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"
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
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.
--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.
Stepan Yakovenko
Pratik Gaikwad