Prueba de multiplicadores regionales para MainNet

un mapa del mundo

El equipo está realizando pruebas finales en los multiplicadores regionales antes de MainNet para asegurarse de que actúen como se esperaba.

Hace dos semanas, anunciamos actualizaciones de los contenedores geográficos y que esto se incorporaría a una prueba para los multiplicadores regionales: ese momento ha llegado. Usando los datos de la semana pasada, calculamos nuevos multiplicadores para cada región:

Con estos multiplicadores, deberíamos compensar los factores de latencia para ejecutar nodos en varias regiones.  

Este es un sistema imperfecto. Las regiones, como Oriente Medio, que solo tienen un nodo, están leyendo resultados que propiamente no son realmente descriptivos de su rendimiento general. Otras regiones, como el norte de África, no tienen ningún nodo y, como resultado, habrá que adivinar sus valores.

Pero, un desafío aún mayor es que el multiplicador correcto es una función de cuántos nodos tiene una región. Cuando diseñamos la red, hicimos que cada nodo en una región experimentara el multiplicador más alto de cualquier nodo en el equipo. Esto es para garantizar que nunca haya un caso en el que los operadores de nodos tengan incentivos para no participar en una ronda. Como resultado, el multiplicador correcto para una región dada es función del número de nodos en esa región.

Esto significa que los multiplicadores deberán actualizarse periódicamente a medida que la red crece y se reduce. Como se puede ver a continuación, las matemáticas para los multiplicadores son relativamente regulares, por lo que es posible integrarlas en la cadena en algún momento y calcularlas automáticamente en cada era. 

Esta solución también requiere ajustar cómo se manejan los multiplicadores. Originalmente, todos los nodos de un equipo heredaban los mismos multiplicadores. Esto dio como resultado algunos multiplicadores muy extraños, por lo que estamos ajustando el algoritmo para dar a todos los nodos el promedio de su propio multiplicador y el más alto del equipo.

Cálculo de los multiplicadores

Al calcular los multiplicadores, comenzamos con los números sin procesar, cuántos puntos obtuvo cada nodo en cada era excluyendo el multiplicador. Queremos que todo sea justo y queremos que cada corredor de nodo tenga incentivos para formar equipo con todos los demás nodos. Por lo tanto, nuestro objetivo es asegurarnos de que la participación completa le proporcione "puntos" completos en la red.

Antes de continuar, algunas definiciones:

  1. Mᵢ: el multiplicador para todos los nodos en Bin I.
  2. Aᵢ – El valor de punto ajustado para Bin I.
  3. Pᵢ: la probabilidad de que al menos un nodo del contenedor I está incluido en un equipo, y un nodo de cualquier bin <I no esta incluido.


El cálculo se basa en datos de red reales. Durante la última semana, obtuvimos los puntos promedio ganados por las operaciones de cMix en una era por nodo. Luego, esto se "normalizó" para producir el valor de punto ajustado para el contenedor, conocido como Aᵢ.

El objetivo de este sistema es crear Multiplicadores tales que los As futuros sean todos 1.

Los contenedores se ordenan de mínimo a máximo por A. Al calcular los puntos, el multiplicador de cada nodo es el promedio de su multiplicador y el más alto del equipo (también el i más bajo). 

Debido a que la región con el promedio más bajo, Bin 0, sobrescribe a todas las demás, el multiplicador de Bin 0 se puede calcular como:

Nuestro objetivo es garantizar que los multiplicadores y los ajustes para todos los nodos en todos los equipos también sean el máximo de 1 en promedio. Dado que Mₙ es el multiplicador para el n-ésimo contenedor ordenado y Aₙ es el promedio normalizado para el n-ésimo contenedor ordenado. Esto se puede resolver fácilmente:

El siguiente multiplicador para Bin 1 se puede calcular como la probabilidad de que un nodo de Bin 1 se seleccione con un nodo de Bin 0 (que usa el multiplicador de bin M0) y la probabilidad de que un nodo de Bin 1 no se asocie con un nodo de Bin 0 (que usa el multiplicador de equipo M1):

Podemos hacer el mismo cálculo para Bin 2:

Estas ecuaciones, para cualquier bin, se pueden resolver y se pueden definir en términos del multiplicador. Para el Bin 2, las transformaciones para calcular el multiplicador son:

Podemos generalizar esto usando sumas para cualquier multiplicador de equipo Bin n:

Además de la definición recursiva, las probabilidades son difíciles de acertar. Cada selección de un equipo de 5 nodos consiste en un sorteo aleatorio, sin reposición, del total de nodos de la red. Este tipo de selección se describe mediante una distribución hipergeométrica. Con mayor frecuencia, esta distribución se aplica a un caso simple de contar objetos (nodos en nuestro caso) con una característica binaria (por ejemplo, en el ámbito de consenso BFT: nodos bizantinos/honestos). Sin embargo, en cMix hemos dividido los nodos en 12 contenedores, lo que convierte el problema en uno multidimensional, lo que significa que necesitamos calcular una distribución hipergeométrica multivariante. Afortunadamente, debido a la naturaleza de cómo funcionan los multiplicadores, cuando seleccionamos un nodo de, digamos, el contenedor 2, no nos importa si algún otro nodo en el equipo es de un contenedor que tiene un multiplicador más alto. Esto significa que todas las probabilidades que necesitamos calcular son similares: queremos tener un equipo con al menos un nodo del contenedor i, sin ningún nodo de todos los contenedores. <i. We include a spreadsheet in our resources below which show how to do this in detail.

Error

Esta solución tiene algunos errores debido al hecho de que las discrepancias en los valores A se deben en gran parte a variaciones en la duración de las rondas, lo que afecta las probabilidades de selección. Esta solución, tal como la describe nuestra simulación, es correcta dentro de 3%. El trabajo futuro puede deconstruir las causas de las variaciones de puntos para modelarlos mejor y reducir este error.

Recursos:

Lista de contenedores:

 https://docs.google.com/spreadsheets/d/1z9kvEW7XXcHYxUSPpXkoA1Cv9trIbY4VkPzaWzJEN_I/edit#gid=2056956216

Algoritmo de programación: https://git.xx.network/xx_network/primitives/-/blob/dev/region/ordering.go

Cálculo del multiplicador:

https://docs.google.com/spreadsheets/d/1d2HcuCVorKDkUppBam-dk-_PJ8ukPp8ja18DyE_VYJQ/edit?usp=sharing

Script de Python para simulaciones para confirmar cálculos:

https://git.xx.network/-/snippets/3

Popular