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 enode
dirección de cada uno de los otros 3 nodos a cada nodo --bootnodes
en 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
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.
3mrsh
geth --datadir ./NodeN init BCNetworkName.json
en cada nodo antes de ejecutar el script StartNodeM. Riggi
3mrsh
bootnode -genkey bootnode.key
como 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
3mrsh
M. Riggi
--nodekey /opt/bootnode/boot.key
3mrsh