¿Cómo configurar una red privada y conectar pares en geth?

Estoy tratando de configurar una red privada y tratando de conectar a los compañeros. Actualmente lo estoy probando en mi computadora portátil y de escritorio (ambos están conectados a Internet diferente).

Ejecuto el siguiente comando en la primera terminal (en ambos sistemas ( data dires diferente en ambos sistemas)):

geth --rpc --rpcaddr "0.0.0.0" --rpcport "8545" --rpccorsdomain "http://localhost:5000, http://localhost:6000" --port "2403" --ipcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" --rpcapi "db,eth,net,web3" --networkid 1001201 --datadir "E:\User\priv\data" init "E:\User\priv\genesis.json"

entonces corro:

geth --datadir "E:\User\priv\data"

Ahora, en la segunda terminal:

geth attach ipc:\\.\pipe\geth.ipc

luego en la 1ra PC,

admin.addPeer("enode://e0c4960659b6ce4eda71c67b337055636f67660a711d157a81572b5eff1ed1b77931bef4bd079e2660baa661ac16d696b831e9394cb619378071a2593ecdf17a@[192.168.1.2]:30301");

en la 2.ª PC,

admin.addPeer("enode://5512657323add8ceafddb4fc64426b99b58473bfdfab795fe3847fdd6a09c25667d57c5c187d2d48de4ae63d02ce1e221a068dfe5e0476fe21d8aaa8a57d3356@[13.75.117.156]:30302");

ambos regresan true.
Pero admin.peerCountregresa 0.

¿Puede alguien ayudarme a configurar una red geth privada?

1. Veo esto 192.168.1.2]:30301Tal vez eliminemos ese paréntesis final. 2. Me ha pasado muchas veces que el nodo tiene el puerto firewalleado, revisa eso. y 3. asegúrese de indicar gethmediante la --portopción su puerto de escucha.
admin.addPeer("enode://e0c4960659b6ce4eda71c67b337055636f67660a711d157a81572b5eff1ed1b77931bef4bd079e2660baa661ac16d696b831e9394cb619378071a2593ecdf17a@[192.168.1.2]:30301"); debe eliminar las llaves cuadradas después del símbolo @. Después de eso, obtiene el conteo de pares.

Respuestas (3)

Configuración del bloque de génesis: el primer bloque (bloque cero) de la cadena de bloques se denomina bloque de génesis. Este es el único bloque en la red que no apunta al bloque predecesor. De forma predeterminada, el bloque de génesis está codificado de forma rígida en los clientes de Ethereum. Sin embargo, como estamos configurando nuestra propia red de prueba, este paso es esencial. Todos los bloques posteriores harán referencia a este bloque de génesis. En el cliente Geth, esto se logra configurando un archivo json (por ejemplo, mygenesis.json) con los siguientes valores. Asegúrese de que este archivo se agregue a las dos instancias que ejecutarán Geth (ya que el algoritmo de consenso de Ethereum garantiza que ningún otro nodo estará de acuerdo con su versión de blockchain a menos que tengan el mismo bloque de génesis). Para comprender qué significa cada uno de estos parámetros, consulte esta respuesta en el intercambio de pila.

{
  "alloc": {},
  "coinbase"   : "0x0000000000000000000000000000000000000000",
  "difficulty" : "0x20000",
  "extraData"  : "",
  "gasLimit"   : "0x2fefd8",
  "nonce"      : "0x0000000000000042",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00"
}

Ejecutando geth init: Inicialice el terminal geth con nuestro archivo de cadena de bloques de génesis. mygenesis.json: el archivo json que se usará para configurar el nodo Ethereum.

$ geth --datadir="ethdata" init mygenesis.json

Inicie una consola geth: ejecute geth en modo consola y cree una nueva cuenta para llenarla con algo de éter. Asegúrese de ejecutar la consola geth bajo un nuevo --networkid, asegúrese de que el networkid sea un número aleatorio lo suficientemente grande (para evitar conflictos con otros). También ejecute el nuevo nodo con la opción --nodiscover que evitará cualquier apretón de manos desfavorable de otros nodos de ethereum. ethdata es un directorio en la carpeta actual desde donde estoy ejecutando el comando geth. Esta es la ubicación donde se almacenarán los datos de la cadena de bloques.
Crear una nueva cuenta: Se puede crear una nueva cuenta desde la consola usando el comandopersonal.newAccount("password")

$ geth --datadir="ethdata" --networkid 65535 --nodiscover console
I0326 11:36:47.028672 node/config.go:445] Failed to start Ledger hub, disabling: libusb: unknown error [code -99]
I0326 11:36:47.028882 cmd/utils/flags.go:613] WARNING: No etherbase set and no accounts found as default
I0326 11:36:47.028970 ethdb/database.go:83] Allotted 128MB cache and 1024 file handles to /home/ubuntu/ethdata/geth/chaindata
I0326 11:36:47.047079 ethdb/database.go:176] closed db:/home/ubuntu/ethdata/geth/chaindata
I0326 11:36:47.047475 node/node.go:176] instance: Geth/v1.5.9-stable/linux/go1.8
I0326 11:36:47.047573 ethdb/database.go:83] Allotted 128MB cache and 1024 file handles to /home/ubuntu/ethdata/geth/chaindata
I0326 11:36:47.078045 eth/backend.go:187] Protocol Versions: [63 62], Network Id: 65535
I0326 11:36:47.078398 eth/backend.go:215] Chain config: {ChainID: 0 Homestead: <nil> DAO: <nil> DAOSupport: false EIP150: <nil> EIP155: <nil> EIP158: <nil>}
I0326 11:36:47.079106 core/blockchain.go:219] Last header: #0 [62e3c23e…] TD=131072
I0326 11:36:47.079187 core/blockchain.go:220] Last block: #0 [62e3c23e…] TD=131072
I0326 11:36:47.079279 core/blockchain.go:221] Fast block: #0 [62e3c23e…] TD=131072
I0326 11:36:47.081285 p2p/server.go:340] Starting Server
I0326 11:36:47.106873 p2p/server.go:608] Listening on [::]:30303
I0326 11:36:47.107290 node/node.go:341] IPC endpoint opened: /home/ubuntu/ethdata/geth.ipc
Welcome to the Geth JavaScript console!

instance: Geth/v1.5.9-stable/linux/go1.8
 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

> personal.newAccount("testing")
"0xe94c3a6c176af3f091d3cc40ba35efa96a8df444"
> I0326 11:37:21.218308 cmd/geth/main.go:286] New wallet appeared: keystore:///home/ubuntu/ethdata/keystore/UTC--2017-03-26T11-37-20.112555465Z--e94c3a6c176af3f091d3cc40ba35efa96a8df444, Locked

Comience a extraer ether a esa cuenta: cualquier operación en Ethereum solo es posible si tiene ether (la moneda utilizada en la cadena de bloques de Ethereum). Cuando configure una red de prueba, deberá extraer algo de dinero en las cuentas; de lo contrario, no podrá realizar ninguna operación. La minería se realiza mediante el comando miner.start(). Este comando tardará algún tiempo en ejecutarse y acumular éter en la cuenta creada anteriormente.

> miner.start(1)
true

Determine el valor del enodo del nodo ethereum actual: el enodo es una URL que utiliza cada nodo dentro de una red ethereum para realizar el protocolo de enlace entre pares. El enodo de un nodo ethereum se puede determinar mediante el comando admin.nodeInfo.enode. El [::] de la cadena devuelta debe ser reemplazado por su dirección IP externa (si está ejecutando dentro de LAN, sustitúyala por su IP interna).

> admin.nodeInfo.enode
"enode://dce52ff84d904d3a304c0977fbc01efd59c2f62ceb3ebcae16044768d15282a5b411f5774e7410da26648c55a1e9d5326ecc635fb2ad73ad5569cf9df41f1e1a@[::]:30303?discport=0"
> 

Inicie la segunda instancia de AWS y vuelva a configurar el bloque de génesis en la instancia mediante geth init. Inicie la consola geth en la segunda instancia de AWS. Asegúrese de proporcionar el mismo identificador de red que proporcionó en la primera terminal. Una vez que se haya iniciado la consola geth, deberá ejecutar el comando addPeer para establecer un protocolo de enlace entre los dos nodos.

>admin.addPeer("enode://90b7cbbaee94ab6e5bc7c5e8080bf8e2dfed5047b7c19ac61ee82511bef40faf9be2066258228ce7a71ab97b508dbef3c8f50fcf31dedfd43f2f0abd7f618db9@172.129.23.46:30303?discport=0")
true
> 

Ahora notará que se ha establecido un apretón de manos entre ambos nodos. Esto se puede verificar mediante el comando admin.peers, que enumeraría todos los nodos dentro de la red. Comandos como net.peerCount listarán el número total de pares dentro de la red ethereum.

Proceso completo documentado aquí: http://iotbl.blogspot.in/2017/03/setting-up-private-ethereum-testnet.html

He usado los parámetros mínimos de geth que necesita para configurar su cadena de bloques privada. Por supuesto, puede agregar el resto más adelante.
No, no funciona. cuando ejecuto admin.peers... muestra [].
Vuelva a verificar el identificador de red utilizado en ambos nodos. Asegúrate de que sean iguales. También verifique dos veces la dirección IP de cada nodo y vea si puede hacer ping entre ellos.
Si había habilitado --verbosity 6 al iniciar geth, notará un mensaje en ambos nodos tan pronto como se haya establecido un protocolo de enlace (mientras se ejecuta admin.addPeer).
Sí, la identificación de la red es la misma, estoy usando la IP pública de ambos nodos, pero aún así admin.peers devuelve 0
@DiwakerSingh, debe llamar a admin.addPeer() desde ambas consolas
Para que conste, ejecuté soloadmin.addPeer(<enode_from_node1>) desde mi segunda instancia (nodo2) y mis dos nodos ahora se están emparejando. "¡Funciona para mi!" ;)

Lo que indicó Zincoshine es absolutamente correcto. Tres cosas que agrego hacen que la conexión en un blockchain privado funcione:

  1. Lanzar el primer nodo geth con --bootnodesel que se encuentra

    geth --datadir ~/ethereum_pri/firstnode --verbosity 4 --nodiscover --bootnodes enode://fb7551da65969d9aea58f1e69f6b49919acdc270d5805455b1cdaf5463430adbb0aacc3a9c59e6733f86726c2b207d4841bfc22cd36a04d05e6f459fd7a96971@127.0.0.1:30303?discport=0 --cache 512 --ipcpath ~/Library/Ethereum/geth.ipc --networkid 1984 console

  2. Inicie la segunda instancia de AWS con el mismo--bootnodes

    geth --datadir ~/ethereum_pri/node2 --fast --cache 512 --port 0 --verbosity 4 --nodiscover --bootnodes enode://fb7551da65969d9aea58f1e69f6b49919acdc270d5805455b1cdaf5463430adbb0aacc3a9c59e6733f86726c2b207d4841bfc22cd36a04d05e6f459fd7a96971@127.0.0.1:30303?discport=0 --ipcpath ~/Library/Ethereum/geth.ipc --networkid 1984 --identity "node2" console

  3. Ejecute el nodo de arranque de admin.nodeInfo.enode, preste atención al código de cola que es diferente de los documentos

    "enode://746d6e7ac121e1448a6ce5151e80540c3395dfe3ac215a728e2191f1d4a6874d7bbf1c4120692634cdf95028688b670332e930d081848bf344ad7433c57984d5@[::]:52769?discport=0"

?discpot=0es nueva porción

Las respuestas ya dadas son bastante completas. En su caso, lo primero que debe hacer es eliminar los corchetes de la dirección IP en la cadena de enodo que está utilizando.

Si aún tiene problemas para conectar dos nodos, asegúrese de que estén usando el mismo bloque de génesis.