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 dir
es 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.peerCount
regresa 0
.
¿Puede alguien ayudarme a configurar una red geth privada?
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
admin.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:
Lanzar el primer nodo geth con --bootnodes
el 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
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
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=0
es 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.
herman junge
192.168.1.2]:30301
Tal 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 indicargeth
mediante la--port
opción su puerto de escucha.Vijju