Mi aplicación se conecta y extrae la misma blokchain en cada instancia, usa el mismo genesis.json y las identificaciones de red.
Génesis: https://github.com/AugustoL/OpenContent/blob/master/genesis.json
Servicio Web3 que se conecta usando la misma identificación de red: https://github.com/AugustoL/OpenContent/blob/master/js/services/web3.js
Cuando lo ejecuto en dos computadoras diferentes, no se reconoce la cadena de bloques existente. Entonces comienza a extraer dos cadenas de bloques diferentes con la misma génesis e identificación de red: S
¿Cuál es el error? ¿Qué me estoy perdiendo? He estado leyendo mucho y se supone que funciona.
La razón por la que sus dos geth
instancias en las dos computadoras diferentes no pueden encontrarse es que no saben dónde comenzar a buscarse.
Nota: he acortado la clave pública del nodo para facilitar la lectura en esta respuesta. Por ejemplo,
"a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c"
se ha acortado a "a979....163c"
. Tendrá que usar las claves públicas completas al configurar su red.
En la cadena de bloques pública de la red principal, cada par al iniciar intentará conectarse a los "nodos de arranque" para obtener una lista inicial de pares a los que se puede conectar. La dirección de estos bootnodes está codificada en las líneas 71-78 de eth/backend.go, como se muestra a continuación:
defaultBootNodes = []*discover.Node{
// ETH/DEV Go Bootnodes
discover.MustParseNode("enode://a979....163c@52.16.188.185:30303"), // IE
discover.MustParseNode("enode://de47....c786@54.94.239.50:30303"), // BR
discover.MustParseNode("enode://1118....5082@52.74.57.123:30303"), // SG
// ETH/DEV cpp-ethereum (poc-9.ethdev.com)
discover.MustParseNode("enode://979b....37f9@5.1.83.226:30303"),
}
Una vez que un nodo se conecta al bootnode, obtendrá una lista de direcciones para que se conecten los pares potenciales e intentará conectarse con estos pares.
No existe tal punto de partida en su red privada.
En su red privada, sus geth
instancias no sabrán por dónde empezar a buscarse y tendrá que darle algunas pistas. Hay tres formas de hacer esto: usando el --bootnodes
parámetro de la línea de comando, agregando un static-nodes.json
a su directorio de datos o agregando un trusted-nodes.json
a su directorio de datos.
Ejecute geth
en cada una de sus computadoras y escriba admin.nodeInfo
en la línea de comando:
> admin.nodeInfo
{
enode: "enode://d9d9....30d9@[::]:30301?discport=0",
id: "d9d9....30d9",
ip: "::",
listenAddr: "[::]:30301",
name: "Geth/v1.3.6/linux/go1.5.1",
ports: {
discovery: 0,
listener: 30301
},
...
}
Lo que tendrá que hacer es obtener la información del enodo para ambas computadoras. Reemplace la [::]
información del enodo con la dirección IP de sus dos computadoras y elimine el ?discport=0
si está presente. Su información de enodo para cada computadora debería verse así:
enode://d9d9....30d9@192.168.1.152:30303
enode://1212....3434@192.168.1.253:30303
--bootnodes
soluciónEsta primera --bootnodes
solución requerirá que especifique el nodo de arranque de la instancia de una computadora para la geth
instancia de la otra computadora geth
. Entonces, en la Computadora 1, comienza geth
agregando el siguiente parámetro:
--bootnodes "enode://1212....3434@192.168.1.253:30303"
static-nodes.json
soluciónEsta segunda solución es crear el archivo static-nodes.json
en su --datadir
, por lo que en su caso, el nombre del archivo y la ruta deben ser ./blockchain/static-nodes.json
. En la computadora #1, este archivo debe contener la información de enodo de la computadora #2 y viceversa. Alternativamente, simplemente cree uno static-nodes.json
con la información de enodo de ambas computadoras #1 y #2, y cópielo static-nodes.json
en --datadir
ambas computadoras. El contenido de este archivo debería verse así:
[
"enode://d9d9....30d9@192.168.1.152:30303",
"enode://1212....3434@192.168.1.253:30303"
]
trusted-nodes.json
soluciónIgual que la solución n.° 2, pero use el nombre del archivo trusted-nodes.json
en lugar de static-nodes.json
. La diferencia aquí es que los nodos de confianza no se suman al recuento de nodos del mismo nivel cuando --maxpeers
se alcanza el límite.
--maxpeers
y no usar--nodiscover
Es posible que deba especificar un valor distinto de cero --maxpeers
para que esto funcione, por ejemplo, use el parámetro:
geth ... --maxpeers 2 ...
Y no lo use --nodiscover
en su geth
línea de comando, ya que esto desactivará el descubrimiento de pares.
Aquí hay algunas preguntas relacionadas que pueden ayudarlo a resolver sus problemas de conexión:
duplicate
que cuando encuentra similitud, no tiene sentido responder una pregunta que ya está respondida. Y la otra pregunta también la responde usted +1 por eso.
alwe
AugustoL
alwe
--nodiscover
no está configurado. Hmm, sospecho que también leíste el capítulo sobre "configurar múltiples nodos" github.com/ethereum/go-ethereum/wiki/… y la parte sobre "problemas comunes con la conectividad" github.com/ethereum/go-ethereum/wiki /Conectando-a-la-red ?AugustoL
Péter Szilágyi
30303
.AugustoL