Testando multiplicadores regionais para MainNet

Um mapa do mundo

A equipe está realizando testes finais nos Multiplicadores Regionais antes da MainNet para garantir que eles ajam conforme o esperado

Há duas semanas, anunciamos atualizações para os compartimentos geográficos e que isso alimentaria um teste para os multiplicadores regionais – esse momento chegou. Usando os dados da semana passada, calculamos novos multiplicadores para cada região:

Com esses multiplicadores, devemos compensar os fatores de latência para executar nós em várias regiões.  

Este é um sistema imperfeito. Regiões, como o Oriente Médio, que têm apenas um nó, estão lendo resultados que não são propriamente descritivos de seu desempenho geral. Outras regiões, como o norte da África, não têm nós e, como resultado, terão que ter seus valores adivinhados.

Mas, um desafio ainda maior é que o multiplicador correto é uma função de quantos nós uma região possui. Ao projetar a rede, fizemos com que cada nó em uma região experimentasse o maior multiplicador de qualquer nó da equipe. Isso é para garantir que nunca haja um caso em que os operadores de nó sejam incentivados a não participar de uma rodada. Como resultado, o multiplicador correto para uma determinada região é uma função do número de nós nessa região.

Isso significa que os multiplicadores precisarão ser atualizados regularmente à medida que a rede cresce e diminui. Como pode ser visto abaixo, a matemática para multiplicadores é relativamente regular, então pode ser possível integrá-la na cadeia em algum momento e calculá-la automaticamente a cada era. 

Essa solução também requer o ajuste de como os multiplicadores são tratados. Originalmente, todos os nós de uma equipe herdavam os mesmos multiplicadores. Isso resultou em alguns multiplicadores muito estranhos, então estamos ajustando o algoritmo para fornecer a todos os nós a média de seu próprio multiplicador e o maior da equipe.

Calculando os multiplicadores

Ao calcular os multiplicadores, começamos com os números brutos, quantos pontos cada nó obteve em cada era, excluindo o multiplicador. Queremos que tudo seja justo e queremos que cada corredor de nó seja incentivado a se unir a todos os outros nós. Portanto, nosso objetivo é garantir que a participação total lhe dê “pontos” completos na rede.

Antes de continuarmos, algumas definições:

  1. Mᵢ – O multiplicador para todos os nós em Bin eu.
  2. Aᵢ – O valor do ponto ajustado para Bin eu.
  3. Pᵢ – A probabilidade de que pelo menos um nó de bin eu está incluído em uma equipe e um nó de qualquer bin <eu não está incluído.


O cálculo é semeado por dados de rede reais. Na última semana, obtivemos a média de pontos ganhos por operações cMix em uma era por nó. Isso foi então “normalizado” para produzir o valor do ponto ajustado para o bin, conhecido como Aᵢ.

O objetivo deste sistema é criar Multiplicadores de tal forma que o futuro A será 1.

As caixas são ordenadas do mínimo ao máximo por A. Ao calcular os pontos, o multiplicador de cada nó é a média de seu multiplicador e o maior da equipe (também o menor i). 

Como a região com a média mais baixa, Bin 0, substitui todas as outras, o multiplicador do Bin 0 pode ser calculado como:

Nosso objetivo é garantir que os multiplicadores e ajustes para todos os nós em todas as equipes também sejam no máximo 1 em média. Uma vez que Mₙ é o multiplicador para o enésimo bin ordenado e Aₙ é a média normalizada para o enésimo bin ordenado. Isso pode ser facilmente resolvido:

O próximo multiplicador para a Caixa 1 pode ser calculado como a probabilidade de um nó da Caixa 1 ser selecionado com um nó da Caixa 0 (que usa o multiplicador da caixa M0) e a probabilidade de que um nó da Caixa 1 não seja agrupado com um nó da Caixa 0 (que usa o multiplicador de equipe M1):

Podemos fazer o mesmo cálculo para o Bin 2:

Essas equações, para qualquer Bin, são solucionáveis e podem ser definidas em termos do multiplicador. Para Bin 2, as transformações para calcular o multiplicador são:

Podemos generalizar isso usando somatórios para qualquer multiplicador de equipe Bin n:

Além da definição recursiva, as probabilidades são difíceis de acertar. Cada seleção de uma equipe de 5 nós consiste em um sorteio aleatório, sem reposição, do total de nós da rede. Esse tipo de seleção é descrito por uma distribuição hipergeométrica. Mais frequentemente, essa distribuição é aplicada a um caso simples de contagem de objetos (nós em nosso caso) com um recurso binário (por exemplo, no domínio de consenso BFT: nós bizantinos/honestos). No entanto, no cMix dividimos os nós em 12 bins, o que torna o problema multidimensional, o que significa que precisamos calcular uma distribuição hipergeométrica multivariada. Felizmente, devido à natureza de como os multiplicadores funcionam, quando selecionamos um nó de, digamos, bin 2, não nos importamos se algum outro nó da equipe for de um bin que tenha um multiplicador mais alto. Isso significa que todas as probabilidades que precisamos calcular são semelhantes: queremos ter uma equipe com pelo menos um nó do bin i, sem nenhum nó de todos os bins <i. We include a spreadsheet in our resources below which show how to do this in detail.

Erro

Esta solução tem alguns erros devido ao fato de que as discrepâncias nos valores de A são em grande parte causadas por variações na duração das rodadas, o que afeta as probabilidades de seleção. Esta solução, conforme descrita por nossa simulação, está correta dentro de 3%. Trabalhos futuros podem desconstruir as causas das variações pontuais para melhor modelá-las e reduzir esse erro.

Recursos:

Lista de caixas:

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

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

Cálculo do multiplicador:

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

Script Python para simulações para confirmar cálculos:

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

Popular