Consenso em criptomoedas com mineração híbrida e Multi-PoW

Por acaso, participei do desenvolvimento de um mecanismo de mineração para criptomoeda, permitindo que você use diferentes algoritmos de hash para construir uma blockchain. O objetivo é permitir que os mineradores com qualquer equipamento (ASIC, GPU, CPU) suportem a rede, cobrindo todo o público possível dos participantes da rede. No artigo, mostrarei a quais resultados chegamos, sobre a mineração em bitcoin e algumas outras criptomoedas usando a mineração híbrida.



Além do fato de que a mineração é recompensada e a recompensa é a principal fonte de emissão de moedas na maioria das criptomoedas, a função mais significativa desse mecanismo é obter consenso entre os participantes da rede. O consenso é garantido por uma lei simples - ao ramificar uma blockchain (fork), a cadeia é considerada verdadeira, durante a construção da qual o maior número de hashes (trabalho) foi realizado.

Para construir a mineração multi-híbrida, duas tarefas precisam ser resolvidas - cálculo do alvo para cada um dos algoritmos e encontrar um mecanismo de comparação que permita fazer a coisa mais difícil - comparar cadeias constituídas por blocos com algoritmos diferentes e, como resultado, muito diferentes em magnitude de trabalho.


Mineração multi-híbrida é um termo indefinido, no artigo é usado para denotar prova de mineração (POW) em vários algoritmos. Nas comunidades criptográficas de língua inglesa e russa, o nome geralmente aceito é Multi-PoW. Será considerado no exemplo da criptomoeda Verge com cinco algoritmos . Mineração híbrida é um termo geralmente aceito aplicado a criptomoedas usando POW e armazenamento de comprovante de depósito / patrimônio (POS). Vamos considerá-lo no exemplo de um dos pioneiros dessa solução - o Novacoin.

Para entender o mecanismo de mineração, você precisa entender os seguintes conceitos fundamentais em criptomoedas - trabalho e objetivo (destino). O objetivo é um valor numérico que define o limite superior de hashes adequado para criar um bloco em uma cadeia. Trabalho - estatisticamente o número médio de pesquisas necessárias para encontrar um hash de um destino menor ou igual.

Trabalhe e mire nos dedos
Considere o exemplo de um rolo de um cubo de D&D com 20 lados. Distribuiremos os dados para cada jogador de D&D no planeta e pediremos que eles joguem. Metade dos dados terá valores de 1 a 10, o segundo de 11 a 20. Suponha que, para o evento desejado no jogo, o valor seja de 1 a 10. Deixe os jogadores continuarem a rolar até que todos atinjam o valor desejado. A cada lançamento, o número de jogadores restantes é reduzido pela metade e acontece que o número médio de jogadas de dados por jogador será calculado de acordo com a seguinte fórmula:

 n o m e d o o p e r a d o r n ú m e r olances= frac nomedooperadornúmeropossívelvalores nomedooperadornúmeroadequadovalores

úúíú

Supondo que 500 milhões estão jogando no planeta, os jogadores mais "sortudos" terão que jogar os dados cerca de 29 vezes, mas o número médio de jogadas por jogador será 2. O número de jogadas na fórmula é idêntico ao número de atos de geração de hash e corresponde ao trabalho. Assim, o número de valores de hash adequados é igual ao valor de destino + 1. A fórmula completa para trabalhar com hashes de 256 bits é:

w o r k = f r um c 2 256 t uma r g e t + 1 

O Bitcoin o usa exatamente e o código usando esta fórmula está aqui . E aqui, o trabalho é usado para chegar a um consenso - comparando os garfos blockchain e escolhendo a melhor cadeia.

O principal objetivo do alvo é ser configurado para um valor tal que o tempo de liberação do bloco ocorra em um determinado intervalo de tempo. Para bitcoin, o intervalo é de 10 minutos. A recontagem de destino no bitcoin ocorre a cada 2016 blocos. Para definir uma nova meta, o Bitcoin determina a taxa média de hash - a quantidade de trabalho em rede por unidade de tempo dos blocos anteriores de 2016. Calcula o trabalho esperado em 10 minutos e, tendo uma meta para ele, define seu valor para os próximos blocos de 2016. Para bitcoin, o cálculo da meta, tendo em vista a igualdade da meta (e, portanto, o trabalho) dos blocos anteriores de 2016, após reduções e aproximações, é fornecido em uma fórmula bastante simples.

targetnew= frac2256worknext1= frac225610min cdothashrateaver1= frac2256 frumc 10 m i n c d o t w o r k 2016 t i m e 2016 -1=  

= frac2256 cdottime201610min cdot2016 cdot frac2256targetprev+11= fractime2016 cdot left(targetprev+1 right)10min cdot20161 approx fractime2016 cdottargetprev10min cdot2016



Além das criptomoedas, a tarefa de alvo, trabalho e taxa de hash (velocidade de geração de hash) é resolvida por pools . O pool não conhece o valor de hash direto de um mineiro individual. A obtenção de todos os hashes é impossível devido a limitações de largura de banda e sem sentido - verificar se há custos é igual à mineração. O pool recebe respostas de mineradores com um objetivo insuficiente para formar um bloco, determina a participação do mineiro no pool, hashrate e define esse objetivo para cada mineiro, para que as respostas deles não ocupem todo o tráfego.


Arremessar gráfico de 12 dados facetados por um jogador com um hashrate de 1 lançamento / s em 100 segundos. Cada ponto é o valor da face desenhada, o eixo Y direito é o número de valores que caíram no alvo. Pode-se observar que 20 tiros caem no alvo 2 - lances com um valor de 1 e 2. A avaliação do trabalho será 20 * 12/2 = 120 tiros, com o objetivo 6 o trabalho é 53 * 12/2 = 106. A principal propriedade usada é para qualquer O alvo na condição de estatísticas suficientes recebe perto do valor exato do trabalho e do hashrate do participante.

Uma criptomoeda com vários algoritmos, como um pool, deve avaliar o hash do algoritmo participante e selecionar um destino que forneça o intervalo de tempo desejado entre os blocos. O mecanismo de cálculo de destino correto, além do intervalo, deve fornecer os compartilhamentos adequados de diferentes blocos na blockchain.

Vale a pena fazer uma digressão na história para entender os recursos de cálculo do alvo em criptomoedas lançadas após o bitcoin. Nos velhos tempos, os bravos pioneiros da construção de altcoin usavam o código Bitcoin, faziam alterações mínimas e lançavam o “Bitcoin killer”. Havia até geradores on-line de novos repositórios de códigos altcoin. Essa abordagem levou a vários problemas, um dos quais dizia respeito ao cálculo da meta e surgiu no cenário a seguir. Um mineiro cuja taxa de hash era significativamente maior que os outros participantes estava conectado à mineração de criptomoedas. Como o alvo raramente era recontado, esse mineiro criou blocos com um intervalo muito curto e conseguiu criar um número semanal de blocos em poucas horas e, assim, receber uma recompensa semanal. Ao atingir o bloco em que o alvo foi recalculado, o mineiro foi para outro altcoin com uma taxa de hash adequada. Com o objetivo aumentado, os mineradores restantes não puderam gerar um bloco em um tempo razoável, sem mencionar a geração de todos os blocos antes do novo recálculo do alvo e deixaram o altcoin. As moedas do blockchain finalmente pararam. A principal solução para esse problema foi recalcular o alvo de cada bloco.

À primeira vista, o cálculo da meta no Novacoin não é muito diferente do cálculo no bitcoin. O Novacoin separou corretamente o cálculo de POS e POW. A fórmula final para calcular o destino dos blocos de POS no Novacoin é a seguinte

targetnew=targetlast cdot frac7dias10min+2 cdothorapos intrerval7dias+10min

o que não faz sentido em comparação com o cálculo do hash médio no bitcoin e a previsão nele. Qualquer estatística nesta fórmula está envolvida indiretamente - mesmo assim, o valor-alvo anterior é calculado como resultado de resultados anteriores na blockchain. O mecanismo como um todo é semelhante a manter a distância de um carro, o intervalo é inferior a 10 minutos - soltamos o pedal do acelerador mais - pressionamos.

O cálculo do POW é quase o mesmo, exceto que o Novacoin reivindica uma frequência diferente para os blocos POW e POS e é calculado em intervalos de 10 minutos a 30, dependendo da posição na blockchain. Você pode ver que, se a rede perder seu hash POW ou POS, o destino permanecerá válido até que um novo bloco apareça no mecanismo de mineração que perdeu energia.

O cálculo do alvo no Verge usa o mecanismo Dark Gravity Wave, que é um desenvolvimento das idéias apresentadas por Kimoto Gravity Well. Sem entrar na matemática de todos esses métodos, o objetivo desses mecanismos, sem dúvida nomeados poeticamente, é um deles - garantir a conversão do alvo com rapidez suficiente para responder às mudanças na taxa de hash da rede. Apesar de alguma ingenuidade do código , sua matemática se resume a fórmulas bastante simples. Verge calcula o objetivo médio de 12 blocos do algoritmo selecionado, no qual o último bloco é contado duas vezes:

targetaver= frac2 cdottargetlast+targetlast1+...+targetlast1113

A questão que surge imediatamente sobre a legitimidade da adição do alvo, no entanto, tem uma justificativa matemática. O objetivo resultante é um objetivo para o trabalho médio harmônico.

 frac13 cdot(targetaver+1)2256= frac2 cdot(targetlast+1)2256+ fractargetlast1+12256+...+ fractargetlast11+12256

O restante dos cálculos coincide exatamente com o cálculo da taxa média de hash do bitcoin.

targetnew approx fractime12 cdottargetaver0,5min cdot5 cdot12

Vale a pena notar que o hashrate em Verge é calculado a partir do trabalho harmônico médio e do tempo médio aritmético e, como resultado, a desigualdade das médias teria um valor menor se o tempo e o trabalho fossem realizados da mesma maneira.

A matemática do cálculo do alvo em projetos com provas / algoritmos mistos difere acentuadamente do original no bitcoin. O segundo lado da moeda do mecanismo de destino e o trabalho é a solução do problema de consenso - a definição do ramo de blockchain que é considerado o verdadeiro em caso de disputa. O problema fundamental das cadeias de blocos mistas é a impossibilidade de escolha ao usar a comparação das somas do trabalho de blocos para todos os algoritmos / provas. Obviamente, algoritmos / evidências que possuem inerentemente um hashrate mais alto com essa lógica primitiva dominarão a blockchain.

No Novacoin, apesar do uso de uma certa pontuação de confiança nos comentários e na nomeação de variáveis, uma análise detalhada da lógica acaba sendo apenas um trabalho. O cálculo para o POS coincide exatamente com a fórmula do trabalho, e o cálculo para POW pode ser considerado como trabalhando com algum tipo de coeficiente constante decrescente. O restante dos cálculos adicionais parece uma ordem de equilíbrio adicional de blocos para o mecanismo de destino. Note-se que esta não é a melhor solução. Como será mostrado mais adiante, apenas um alvo é suficiente para equilibrar os blocos. Além disso, os blocos POS e POW com um pai comum podem ser desiguais, embora o fato da aparência de blocos válidos com um pai comum deva ser definido como sua igualdade.

Antes de considerar o estado atual do mecanismo de consenso, a Verge será informativa para analisar seu passado. Na primavera de 2018, Verge sobreviveu a vários ataques. Sem entrar em detalhes da mecânica de ataque, o código da época , responsável pela escolha de um fork, contém lógica dúbia. Supondo que a função IsProofOfStake () na criptomoeda POW possa retornar o valor verdadeiro, a adição de diferentes algoritmos, como mostrado acima, levará à dominância de um algoritmo com um hashrate mais alto. Caso contrário, a escolha é feita simplesmente pelo comprimento da cadeia, que com um objetivo calculado corretamente (cujo objetivo é a aparência uniforme de blocos) pode levar à igualdade de galhos com trabalhos realmente diferentes feitos de maneira diferente.

No código atual, Verge usa coeficientes constantes para comparação. Supondo que esses coeficientes levem em consideração alguma relevância das capacidades dos equipamentos de mineração, a fraqueza óbvia dessa escolha é a perda de relevância quando novos equipamentos aparecerem.

As propriedades nativas da matemática e do trabalho alvo nos permitem criar modelos de cálculo mais simples e compreensíveis no blockchain. Considere um modelo e código emulando um cálculo de destino para uma blockchain com quatro algoritmos. Deixe dois deles ocuparem um terço dos blocos. Para simplificar a modelagem, podemos assumir que o bloco com o menor intervalo do anterior é o melhor para a construção de um circuito. Em criptomoedas reais, essa escolha corresponde ao cenário mais comum. O modelo também testa o aumento e a diminuição da taxa de hash de um dos algoritmos.

O cálculo da meta será calculado a partir da média aritmética do trabalho e do tempo nas estatísticas dos últimos 300 blocos. A fórmula final de cálculo:

target= frac2256k cdot60 cdothashrateaver1

onde k é o número de intervalos para os quais um bloco do algoritmo deve ser para o qual o destino é calculado.

Vamos resumir na tabela os valores iniciais e calculados para 10.000 blocos.
algo1234
hashrate40.80índice <4000: 20
4000> índice <6000: 150
índice> 6000: 20
100
intervalo60
blocos3333333316661666
trabalhar24000000480000002760000060.000.000
Quero observar que o valor calculado do circuito é calculado pela fórmula:

workalgo=hashratealgo cdottimetodososblocos

O cálculo dos hashes na rede ocorre ao longo do tempo dos blocos de todos os algoritmos, e não apenas em intervalos de algoritmos individuais. Como no exemplo com um cubo de vinte lados - independentemente do destino selecionado, a classificação de desempenho será igual. Para os cálculos, é necessário levar isso em consideração, por um coeficiente k, para calcular a meta de um novo bloco por meio de uma taxa de hash, e dedicar todo o tempo para calcular o trabalho.
algo1234
intervalo59.59.5759.
blocos3306332016911683
trabalhar23847014470854872702827260499076
Como você pode ver, os resultados da emulação coincidem muito bem com o cálculo de acordo com os dados de origem.

Gráfico de blocos 3850-4650

Gráfico de blocos 5599-6399

Nos gráficos da mudança no trabalho ao longo do tempo, é visto como a densidade dos blocos aumenta e diminui quando a taxa de hash muda. Em princípio, esse é um comportamento lógico e lógico, mas também é bastante apropriado regulá-lo usando técnicas como a Dark Gravity Wave - aumentando a influência dos últimos blocos e outros.

Passando à questão de determinar o consenso de forquilhas de blocos com algoritmos diferentes, vale a pena observar a seguinte propriedade básica - blocos com um bloco anterior comum são equivalentes entre si. Seus objetivos e avaliação de desempenho dão direitos iguais para ocupar um lugar na cadeia. Essa observação imediatamente leva à ideia de usar equivalência - usando a quantidade de trabalho, coeficientes que variam da proporção de metas etc. Omitindo a consideração das deficiências de todas essas idéias, passaremos para o método que atende mais plenamente aos requisitos da blockchain.

Se considerarmos as previsões médias geométricas do trabalho de todos os algoritmos de bloco, a soma desses trabalhos equivalentes é a melhor característica para comparar garfos.

workequal= sqrt[k1]workalgo1 cdot sqrt[k2]workalgo2 cdot... cdot sqrt[kn]workalgon

Onde k é o número de intervalos nos quais um bloco do algoritmo deve cair, para o qual o destino é calculado.

Esse trabalho equivalente possui as seguintes propriedades:

  • quando a taxa de hash de todos os algoritmos for alterada n vezes, a estimativa de consenso em cadeia também mudará n vezes
  • aumentando o hashrate de um dos algoritmos e diminuindo os outros n vezes com partes iguais na mineração, a estimativa de consenso da cadeia será igual
  • com proporções iguais de algoritmos e taxas de hash iguais desses algoritmos, a operação e operação equivalentes de qualquer algoritmo serão iguais

O mecanismo de operação equivalente complica significativamente o ataque 51 na blockchain. A fórmula para o trabalho equivalente, expressa através de uma taxa de hash, permite estimar a energia necessária para um ataque.

workequal= sqrt[k1]k1 cdott cdothashratealgo1 cdot sqrt[k2]k2 cdott cdothashratealgo2 cdot... cdot sqrt[kn]kn cdott cdothashratealgon

Se o invasor decidir realizar o ataque de acordo com um dos algoritmos e não conseguir calcular o restante, o hashrate necessário terá que exceder significativamente o hashrate da rede.
Por exemplo, uma tabela de ataque, o tempo entre os blocos é 60. Suponha que um invasor possa fornecer apenas 50% do hashrate em três algoritmos.
algo1234igual
separar3366
hashrate líquido40.802010011862
hashrate atacante16040.1050.11862

Para alcançar a igualdade com a rede, ele precisará ter um hashrate 4 vezes maior que o hashrate da rede, de acordo com o primeiro algoritmo.

O gráfico a seguir mostra o resultado da emulação de um ataque a uma blockchain.



O ataque começa no bloco 1000. A soma dos trabalhos equivalentes na emulação para os dois ramos difere um pouco e mostra a igualdade dos ramos.

Em resumo, pode-se notar que mecanismos de consenso em criptomoedas com algoritmos / provas mistos podem ser matematicamente justificados e essas criptomoedas são mais difíceis de atacar 51.

Blockchain feliz para todos e obrigado por sua atenção ao tópico.

Source: https://habr.com/ru/post/pt455736/


All Articles