¿Cómo selecciona el cliente de Ethereum con qué pares sincronizar?

En el inicio, el protocolo de descubrimiento utiliza un enfoque de estilo Kademlia para encontrar pares. Por lo tanto, obtenemos una tabla de enrutamiento local que contiene (dirección IP, puerto UDP e ID de nodo) de algunos pares activos y en línea.

La siguiente etapa, según tengo entendido, es:

  • Ejecute un servidor que implemente el protocolo de cable Devp2p
  • Conéctese con algunos pares para sincronizar la cadena de bloques.
  • Conéctese con algunos pares para transmitir cualquier transacción.

¿Cuál es la estrategia utilizada para seleccionar a qué nodos conectarse?

p.ej

  • ¿A cuántos nodos nos conectamos?
  • ¿Cuál es el criterio para seleccionar a qué nodos conectarse?
  • ¿Cuál es el criterio para prohibir nodos?
  • ¿Cómo garantiza esta estrategia la conectividad total de la red sin particiones?

Respuestas (1)

Solo una respuesta parcial para el primer par de subpreguntas...


¿A cuántos nodos nos conectamos?

El número máximo se establece en 25 de forma predeterminada , pero se puede configurar mediante el --maxpeersindicador en la línea de comando. Este límite es flexible cuando se tienen en cuenta los nodos "de confianza". (Vea abajo.)

El detalle más fino es que también podemos establecer el total combinado de conexiones entrantes y salientes pendientes--maxpendpeers usando la bandera. Este es el número de nodos que realizan simultáneamente protocolos de enlace de conexión, que pueden tener éxito o no, y que depende de si podemos verificar su identidad. Está configurado en 66 de forma predeterminada ( 50 y 16 respectivamente).


¿Cuál es el criterio para seleccionar a qué nodos conectarse?

Hay tres categorías diferentes de nodos a los que nos conectamos, aunque no estoy seguro de los criterios que deben cumplir (aparte de que deben completar el proceso de reconocimiento):

  • Nodos de arranque

    // Bootstrap nodes are used to establish connectivity
    // with the rest of the network.
    BootstrapNodes []*discover.Node
    
  • Nodos estáticos:

    // Static nodes are used as pre-configured connections which are always
    // maintained and re-connected on disconnects.
    StaticNodes []*discover.Node
    
  • Nodos de confianza:

    // Trusted nodes are used as pre-configured connections which are always
    // allowed to connect, even above the peer limit.
    TrustedNodes []*discover.Node
    

admin.addPeer()le permite agregar una nueva entrada a la matriz de nodos estáticos.

Gracias, parece que nTaben server.go se completa el proceso de descubrimiento de DHT al dial.goque se intenta iniciar el protocolo de enlace. Si server.go verifica la identidad, entonces se agregan los pares que pasan, peers[]pero luego está en algún lugar del controlador del protocolo Eth donde peersetse construye.