Cómo obtener nodos en la red privada Geth local para descubrir pares DE SUS PARES

Estoy trabajando en una cadena de bloques privada que consta de 4 nodos que se ejecutan en diferentes puertos.

Estoy tratando de hacer que cada nodo comunique sus conexiones a sus pares, de modo que la red esté completamente conectada (cada nodo tiene cada nodo como su par). Sin embargo, los nodos no están descubriendo los pares de sus pares.

El nodo 1 se designa como bootstrap node, y los nodos 2 y 3 se conectan a él al iniciarse. Sin embargo, el Nodo 1 tendrá los Nodos 2 y 3 como sus pares, mientras que cada uno solo tendrá el Nodo 1 como su propio par. Quiero que los nodos 2 y 3 se descubran entre sí.

Además, cuando ejecuto admin.addPeer(node4's enode), desde el Nodo 1, no se transmite a sus pares.

Mi pregunta: ¿Cómo puedo habilitar un protocolo de descubrimiento de pares en el que cada nodo comunica todos sus pares a cada uno de sus pares?

Entiendo que hay algunos trucos para evitar esto. Por ejemplo, puedo simplemente pasar la enodedirección de cada uno de los otros 3 nodos a cada nodo --bootnodesen Geth. O simplemente puedo usar admin.addPeer()en cada uno de sus pares admin.peers. Pero creo que Geth tiene esto automatizado de alguna manera y me gustaría usar su solución.

Guión de inicio de nodo:

geth --networkid 63261 --mine --minerthreads 1 --datadir . --rpc --rpcport "8547" --port "30305" --rpccorsdomain "*" --nat "any" --rpcapi eth,web3,personal,net --unlock 0 --password "./node3password.sec" --ipcdisable --bootnodes "node1enode" console 2>> geth.log

[Editar]:

Ya había inicializado cada uno de mis nodos para apuntar a Genesis JSON ( ./BCNetworkName.json) de mi red privada antes de ejecutar el script StartNode.geth --datadir ./NodeN init BCNetworkName.json

Respuestas (1)

Bootnodes es una solución económica y efectiva para ayudar al autodescubrimiento de la red, pero necesitan ponerse al día con un archivo de génesis adecuado para aislar su red.

Cuando ejecuta geth, el bloque de génesis se recrea desde cero y luego comienza a sincronizarse con sus pares en el bloque 1.

Para su cadena de bloques privada, debe proporcionar este archivo a todos sus nodos para que puedan comunicarse entre sí sin tener que ejecutar addpeers.

Puede encontrar más información sobre el bloque de génesis aquí

Si está familiarizado con la ventana acoplable, puede consultar este repositorio de Github que juega con la imagen geth para ejecutar una red privada. Puedes aprender mucho sobre el autodescubrimiento de tus compañeros.

¿Podría explicar qué quiere decir con los nodos "ponerse al día con un archivo de génesis adecuado"? ¿Ocurre automáticamente con el tiempo o necesito especificar algo en el script startnode de los nodos? ¿Cómo puedo "proporcionar el archivo"? Gracias por su ayuda Editar: ya he ejecutado geth --datadir ./NodeN init BCNetworkName.jsonen cada nodo antes de ejecutar el script StartNode
Normalmente debería funcionar. ¿Cuál es el comando que usaste para ejecutar tu bootnode?
Inicialicé mi bootnode ejecutándolo bootnode -genkey bootnode.keycomo se sugirió aquí Luego, mi secuencia de comandos para iniciar el bootnode fue:geth --networkid 63261 --mine --minerthreads 1 --datadir . --rpc --rpcport "8545" --port "30303" --rpccorsdomain "*" --nat "any" --rpcapi eth,web3,personal,net --unlock 0 --password "./node1password.sec" --ipcdisable console 2>> geth.log
No pude encontrar nada en las Opciones de CLI de Geth que necesitaría agregar al script de un nodo que será el Bootnode. ¿Yo me perdí algo?
intente iniciar el nodo de arranque con este comando--nodekey /opt/bootnode/boot.key
Tus sugerencias fueron correctas. No estoy seguro de por qué falló mi código, pero lo volví a intentar y todo funcionó correctamente.