Skip to main content

Ubicando Nodos

Todos los nodos de Celo \ (incluidos nuestros validadores ) están utilizando una variante del protocolo de descubrimiento V4 de Ethereum para encontrar otros nodos dentro de la red. Los detalles del protocolo de Ethereum se pueden encontrar aquí: https://github.com/ethereum/devp2p/blob/master/discv4.md.

Cuando un nodo intente unirse a la red, ejecutará nuestro protocolo de descubrimiento. Primero enviará una solicitud a los nodos de arranque para recuperar una lista de otros nodos de la red. Los nodos de arranque responderán con esa lista, y entonces el nodo de unión enviará peticiones adicionales a los nodos de esa lista para encontrar nodos adicionales en la red. La principal diferencia en el protocolo de descubrimiento de Celo en comparación con el de Ethereum es que requerirá que el ID de red del nodo de unión sea el mismo que el de los nodos de arranque (y el mismo que el de todos los demás nodos de red ). Además, todos los mensajes en el protocolo de descubrimiento de Celo deben tener hash con un salt especial para ser aceptados por otros nodos. La razón por la que se realizaron estos cambios es que cada nodo dentro de una red solo almacenará información de otros nodos que tienen el mismo ID de red (para distinguir los nodos de otras redes) y la misma salt especial (para distinguir los nodos de otras cadenas de bloques, como como Ethereum ).

Una vez que un nodo de unión encuentre otros nodos, establecerá conexiones TCP directas a un subconjunto de ellos. Esto permitirá que ese nodo sincronice sus transacciones y su cadena de bloques. Los validadores intentarán además establecer conexiones TCP al resto de validadores, para que pueda enviar mensajes de consenso directamente a ellos, en lugar de a través de chismes. La razón por la que los validadores hacen esto es minimizar la latencia de los mensajes que se envían y reciben entre los validadores, y, en última instancia, ayudar a minimizar el tiempo de bloque.

La manera en que los validadores comunican su dirección IP a otros validadores es mediante el chispeo periódicamente de un mensaje de subprotocolo que llamamos un mensaje de IstanbulAnnounce. Ese mensaje contendrá n copias (donde n es el número total de validadores para el epoch) de la dirección IP del validador que envía, donde cada copia es cifrada con la clave pública del resto de validadores. Una vez que un validador recibe un mensaje de IstanbulAnnounce, descifrará la dirección IP cifrada que fue cifrada con su clave pública, y luego establecerá una conexión TCP a ella. Todos los mensajes relacionados con el consenso se enviarán a través de las conexiones TCP directas. Cuando un epoch termina, un validador establecerá nuevas conexiones con cualquier validador recién elegido y desconectará de cualquier validador eliminado. Si el validador mismo es eliminado del nuevo conjunto de validadores de epoch, entonces se desconectará con todos los validadores.