Estoy tratando de configurar una red ethereum privada. Inicié dos nodos en la misma máquina (Windows 7) en dos puertos diferentes.
No puedo agregar un nodo como el par del otro nodo. Lo que he hecho hasta ahora es esto.
Encuentre la dirección de nodo de un nodo.
> admin.nodeInfo.enode
"enode://5d272e8bee6d29dfff6313999a4a2c3d8109ae6f3eb103480f4536c0542549b9fa12a8d8ae5ebee9c4db55cab553693b04eedbc9b29f35bbc0af1956231b42b4@0.0.0.0:30303"
Agregue el nodo al otro par.
> admin.addPeer("enode://5d272e8bee6d29dfff6313999a4a2c3d8109ae6f3eb103480f4536c0542549b9fa12a8d8ae5ebee9c4db55cab553693b04eedbc9b29f35bbc0af1956231b42b4@127.0.0.1:30303")
true
Pero, si verifico la información de pares del segundo par, muestra que no tiene ningún par.
> admin.peers
[]
¿Alguien tiene alguna idea de lo que está yendo mal?
Además, ¿por qué el primer nodo muestra su IP como 0.0.0.0?
De ¿Cuál es la diferencia entre 127.0.0.1 y 0.0.0.0? :
¿Cuál es la diferencia entre 127.0.0.1 y 0.0.0.0?
- 127.0.0.1 es la dirección de loopback (también conocida como localhost).
- 0.0.0.0 es una metadirección no enrutable que se utiliza para designar un objetivo no válido, desconocido o no aplicable (un marcador de posición 'sin dirección particular').
En el contexto de una entrada de ruta, generalmente significa la ruta predeterminada.
En el contexto de los servidores, 0.0.0.0 significa todas las direcciones IPv4 en la máquina local. Si un host tiene dos direcciones IP, 192.168.1.1 y 10.1.2.1, y un servidor que se ejecuta en el host escucha en 0.0.0.0, será accesible en ambas direcciones IP.
Lo que desea hacer es encontrar la dirección IP de las máquinas que no sea 127.0.0.1, que se verá como en OS/X (y Linux):
Iota:~ bok$ ifconfig -a
...
inet 127.0.0.1 netmask 0xff000000
...
inet 192.168.0.11 netmask 0xffffff00 broadcast 192.168.0.255
En Windows, el comando equivalente es ipconfig /all
.
La dirección 192.168.0.11 es la que desea usar en su cadena de enodo, ya que esta es la dirección IP de la máquina a la que pueden contactar las otras computadoras de su red.
Luego deberá agregar a su compañero usando un comando como:
> admin.addPeer("enode://5d272e8bee6d29dfff6313999a4a2c3d8109ae6f3eb103480f4536c0542549b9fa12a8d8ae5ebee9c4db55cab553693b04eedbc9b29f35bbc0af1956231b42b4@192.168.0.11:30303")
Aquí hay un ejemplo paso a paso de cómo ejecutar 2 mineros en la misma computadora bajo OS/X, con los mineros comunicándose entre sí. Debería poder replicar esto en Windows y Linux. También debería poder replicar esto en más de 2 nodos y en computadoras separadas.
Actualización 31 de octubre de 2016 00:00:56 UTC Puede encontrar un problema con la generación de DAG ya que ambos mineros intentarán crear el DAG al mismo tiempo en el mismo archivo. En OS/X (y Linux), el archivo DAG se almacena en formato $HOME/.ethash
. Este es el mismo problema que se describe en Cadena privada, dos mineros geth en la misma máquina, el segundo minero arroja "panic: ethash_full_new IO o error de memoria" . La solución consiste en iniciar el segundo minero después de que el primero haya terminado de crear el DAG, cuando es necesario crear el DAG inicial. Será necesario crear un nuevo DAG periódicamente y esto puede causar que uno de sus mineros se bloquee.
Los detalles:
geth version
informes1.4.18-stable-c72f5459
/tmp/Test2Miners
, siendo el directorio de datos del minero n.° 1 y el directorio de datos del /tmp/Test2Miners/miner1data
minero n.° 2 /tmp/Test2Miners/miner2data
.Creé el archivo /tmp/Test2Miners/genesis.json
con los siguientes contenidos:
{
"config": {
"homesteadBlock": 10
},
"nonce": "0",
"difficulty": "0x400",
"mixhash": "0x00000000000000000000000000000000000000647572616c65787365646c6578",
"coinbase": "0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x",
"gasLimit": "0x3B4A1B44",
"alloc": {}
}
Creé /tmp/Test2Miners/testpassword
con los siguientes contenidos:
aaaargh
Creé /tmp/Test2Miners/initMiner1
con los siguientes contenidos, luego configuré el bit ejecutable usando el comando chmod 700 /tmp/Test2Miners/initMiner1
:
#!/bin/sh
geth --datadir /tmp/Test2Miners/miner1data init /tmp/Test2Miners/genesis.json
geth --datadir /tmp/Test2Miners/miner1data --password /tmp/Test2Miners/testpassword account new
Creé /tmp/Test2Miners/initMiner2
con los siguientes contenidos, luego configuré el bit ejecutable usando el comando chmod 700 /tmp/Test2Miners/initMiner2
:
#!/bin/sh
geth --datadir /tmp/Test2Miners/miner2data init /tmp/Test2Miners/genesis.json
geth --datadir /tmp/Test2Miners/miner2data --password /tmp/Test2Miners/testpassword account new
Creé /tmp/Test2Miners/runMiner1
con los siguientes contenidos, luego configuré el bit ejecutable usando el comando chmod 700 /tmp/Test2Miners/runMiner1
:
#!/bin/sh
geth --datadir /tmp/Test2Miners/miner1data --unlock 0 --password /tmp/Test2Miners/testpassword --mine --minerthreads 1 --port 30301 console
Creé /tmp/Test2Miners/runMiner2
con los siguientes contenidos, luego configuré el bit ejecutable usando el comando chmod 700 /tmp/Test2Miners/runMiner2
:
#!/bin/sh
geth --datadir /tmp/Test2Miners/miner2data --unlock 0 --password /tmp/Test2Miners/testpassword --mine --minerthreads 1 --port 30302 console
Inicialicé los directorios de datos y creé la primera cuenta (coinbase) para ambos mineros usando el comando:
/tmp/Test2Miners/initMiner1
/tmp/Test2Miners/initMiner2
En la ventana de terminal #1, inicié el minero #1 usando el siguiente comando. He incluido la información del enodo impresa en la consola, que también se puede determinar usando el admin.nodeInfo
comando:
/tmp/Test2Miners/runMiner1
...
enode://dd57ddfb071ab01bcb1f310601e97b06a07dc97f949e14d73dbffaf8cf60e41455a31cf671d87dc7d256d24c20b8d061296041645ac36872239c48ee74fd587d@[::]:30301
En la ventana de terminal #2, inicié el minero #2 usando el comando:
/tmp/Test2Miners/runMiner2
...
enode://b47e69bed67be3f9974ce44d08b9232fd5a555a7c6d4adca5402f93406a806c7181a963c02cff991452bcaee1ab7affdbada4153d236a0017f3dd1931b9c4436@[::]:30302
Reemplacé las cadenas de enodo [::]
con la dirección IP local, por lo que mis admin.addPeer(...)
comandos se verían así:
admin.addPeer("enode://dd57ddfb071ab01bcb1f310601e97b06a07dc97f949e14d73dbffaf8cf60e41455a31cf671d87dc7d256d24c20b8d061296041645ac36872239c48ee74fd587d@192.168.1.11:30301")
y
admin.addPeer("enode://b47e69bed67be3f9974ce44d08b9232fd5a555a7c6d4adca5402f93406a806c7181a963c02cff991452bcaee1ab7affdbada4153d236a0017f3dd1931b9c4436@192.168.1.11:30302")
Pegué el admin.addPeer(...)
con la cadena de enodo del minero n.º 1 en la consola del minero n.º 2.
En la consola del minero #1:
> admin.peers
[{
caps: ["eth/62", "eth/63"],
id: "b47e69bed67be3f9974ce44d08b9232fd5a555a7c6d4adca5402f93406a806c7181a963c02cff991452bcaee1ab7affdbada4153d236a0017f3dd1931b9c4436",
name: "Geth/v1.4.18-stable-c72f5459/darwin/go1.7.1",
network: {
localAddress: "192.168.1.11:30301",
remoteAddress: "192.168.1.11:62922"
},
protocols: {
eth: {
difficulty: 152346260,
head: "0x8296dbd46fe12cef1415c27cb21f2ad6d70b6ee174977529eaf266c3488e6e2e",
version: 63
}
}
}]
¡Éxito!
Y en la consola del minero #2:
> admin.peers
[{
caps: ["eth/62", "eth/63"],
id: "dd57ddfb071ab01bcb1f310601e97b06a07dc97f949e14d73dbffaf8cf60e41455a31cf671d87dc7d256d24c20b8d061296041645ac36872239c48ee74fd587d",
name: "Geth/v1.4.18-stable-c72f5459/darwin/go1.7.1",
network: {
localAddress: "192.168.1.11:62922",
remoteAddress: "192.168.1.11:30301"
},
protocols: {
eth: {
difficulty: 157293798,
head: "0xd9b044d4e996407ff94b075c36b845db219078c64e7898e628983496d46067bf",
version: 63
}
}
}]
¡Confirma el éxito!
Aquí está el registro de la consola de uno de los mineros:
I1031 00:53:27.604563 miner/worker.go:435] 🔨 🔗 Mined 5 blocks back: block #1447
I1031 00:53:27.605050 miner/worker.go:539] commit new work on block 1453 with 0 txs & 0 uncles. Took 460.253µs
I1031 00:53:29.682117 core/blockchain.go:1001] imported 1 block(s) (0 queued 0 ignored) including 0 txs in 12.081834ms. #1453 [3a94659b / 3a94659b]
I1031 00:53:29.683526 miner/worker.go:539] commit new work on block 1454 with 0 txs & 0 uncles. Took 1.167337ms
I1031 00:53:29.683565 miner/worker.go:435] 🔨 🔗 Mined 5 blocks back: block #1448
La tercera línea muestra que el otro minero ha extraído un bloque y este minero está importando el bloque. Las otras líneas muestran que este minero está extrayendo los bloques.
Para automatizar el descubrimiento peer-to-peer, creo con la siguiente información ( nodos estáticos/tmp/Test2Miners/miner1data/static-nodes.json
de referencia ):
[
"enode://dd57ddfb071ab01bcb1f310601e97b06a07dc97f949e14d73dbffaf8cf60e41455a31cf671d87dc7d256d24c20b8d061296041645ac36872239c48ee74fd587d@192.168.1.11:30301",
"enode://b47e69bed67be3f9974ce44d08b9232fd5a555a7c6d4adca5402f93406a806c7181a963c02cff991452bcaee1ab7affdbada4153d236a0017f3dd1931b9c4436@192.168.1.11:30302"
]
y copio este archivo a /tmp/Test2Miners/miner2data/static-nodes.json
.
Reinicio ambos mineros usando los comandos /tmp/Test2Miners/runMiner1
y /tmp/Test2Miners/runMiner2
en ventanas de terminal separadas y verifico que estén conectados entre sí usando admin.peers
y lo están. Éxito++.
Lahiru Chandima
privacidadisahumanright.eth
Lahiru Chandima
privacidadisahumanright.eth