O que é um jogo validador ou “como lançar uma blockchain de prova de aposta”

Então, sua equipe concluiu a versão alfa do seu blockchain e é hora de lançar o testnet e depois o mainnet. Você tem um blockchain real, com participantes independentes, um bom modelo econômico, segurança, você projetou a governança e agora é hora de testar tudo isso em ação. Em um mundo cripto-anárquico ideal, você posta um bloco de gênese na rede, o código final do nó e os validadores lançam tudo sozinhos, levantam todos os serviços auxiliares e tudo acontece por si só. Mas isso é em um mundo fictício, mas no mundo real, a equipe deve preparar bastante software auxiliar e diversas manipulações para ajudar os validadores a lançar uma rede estável. É disso que trata este artigo.

O lançamento de redes baseadas em consensos do tipo “prova de participação”, onde os validadores são determinados pelos votos dos detentores de tokens de sistema, é um evento bastante específico, porque mesmo o lançamento de sistemas tradicionais gerenciados centralmente com dezenas e centenas de servidores não é uma tarefa fácil. tarefa em si, e o blockchain precisa ser iniciado com esforço de participantes leais, mas independentes. E, se em uma corporação, ao iniciar, os administradores tiverem acesso total a todas as máquinas, logs, monitoramento geral, então os validadores não permitirão que ninguém acesse seus servidores e, muito provavelmente, preferirão construir sua infraestrutura de forma independente, pois controla o acesso aos principais ativos do validador - apostas eleitores. É este comportamento que permite construir redes seguras distribuídas - a independência dos fornecedores de nuvem utilizados, servidores virtuais e “baremetal”, diferentes sistemas operativos, tudo isto permite tornar os ataques a tal rede extremamente ineficazes - muito diferentes software é usado. Por exemplo, Ethereum usa duas implementações de nós principais, em Go e em Rust, e um ataque que é eficaz para uma implementação não funciona para a outra.

Portanto, todos os processos de lançamento e operação de blockchains devem ser organizados de tal forma que qualquer validador, ou mesmo um pequeno grupo de validadores, possa a qualquer momento jogar seus computadores pela janela e ir embora, enquanto nada deve quebrar e os demais validadores devem continuar a apoiar eficazmente a rede de operação e conectar novos validadores. Ao lançar uma rede, quando um validador está na Europa, o segundo na América do Sul e o terceiro na Ásia, é muito difícil conseguir o trabalho coordenado de várias dezenas de grupos independentes e, como resultado, interessá-los.

Validadores

Vamos imaginar o lançamento de um hipotético blockchain moderno (a maior parte do que é descrito é adequado para blockchains baseados em qualquer família moderna de blockchains: Ethereum, EOS, Polkadot, Cosmos e outros, que fornecem consenso de prova de participação. Os personagens principais de tais blockchains são equipes validadoras, empenhadas em instalar seus próprios servidores independentes que validam e produzem novos blocos, e recebem recompensas fornecidas pela rede para aqueles que participam do consenso. Para lançar novas redes, são necessárias várias dezenas de validadores (tantos agora podem alcançar consenso mais ou menos efetivamente em segundos), então o projeto anuncia o registro, no qual os validadores compartilham informações públicas sobre si mesmos com os usuários, convencendo-os de que irão fornecer um serviço de alta qualidade à rede lançada.

A validação é um negócio que permite avaliar com extrema precisão a receita potencial do validador, transferir rapidamente poder entre projetos e, se a rede escolhida por ele for bem-sucedida, o validador pode, como participante de pleno direito do DAO e pessoa responsável, desenvolver o projeto ou simplesmente fornecer um excelente serviço técnico por um dinheiro totalmente transparente e ganho honestamente. Ao calcular a recompensa para os validadores, os projetos tentam levar em conta os custos dos validadores e fazer com que a recompensa pelos blocos seja lucrativa, mas ao mesmo tempo não permite que os validadores derrubem a economia inundando-os com dinheiro e privando outros usuários da rede disso.

O negócio dos validadores exige a garantia de alta tolerância a falhas dos serviços, o que significa um alto nível de treinamento para devops e desenvolvedores e recursos computacionais caros. Mesmo sem a necessidade de minerar hashes em redes de prova de trabalho, um nó blockchain é um grande serviço que ocupa muita memória, consome muitos cálculos, valida, grava em disco e envia grandes quantidades de dados para a rede . Para armazenar logs de transações e cadeias de blocos para um blockchain com vários milhares de pequenas transações em um bloco, agora é necessário armazenamento de 50 Gb ou mais e, para blocos, deve ser um SSD. Banco de dados estadual de blockchains com suporte a contratos inteligentes já pode ultrapassar 64 Gb de RAM. Servidores com as características exigidas são bastante caros; um nó Ethereum ou EOS pode custar de 100 a 200 $/mês. Some-se a isso o aumento dos salários pelo trabalho 10 horas por dia de desenvolvedores e devops, que durante o período de lançamento resolvem problemas até à noite, já que alguns validadores podem facilmente estar localizados em outro hemisfério. No entanto, nos momentos certos, possuir um nó validador pode trazer grandes receitas (no caso da EOS, até US$ 000 por dia).

A validação é apenas uma das novas funções potenciais de TI para empreendedores e empresas; à medida que os programadores criam algoritmos cada vez mais sofisticados que recompensam a honestidade e punem fraudes e roubos, surgem serviços que desempenham as funções de publicar dados importantes (oráculos), realizando supervisão (redução de depósitos e punição de trapaceiros através da publicação de provas de fraude), serviços de resolução de disputas, seguros e opções, até mesmo a coleta de lixo é um mercado potencialmente grande em sistemas de contratos inteligentes onde é necessário pagar pelo armazenamento de dados.

Problemas de lançamento de um blockchain

A abertura do blockchain, que possibilitou a participação livre de computadores de qualquer país na rede e a facilidade de conectar qualquer script kiddie à rede conforme instruções do GitHub, nem sempre é uma vantagem. A busca por um novo token muitas vezes força os validadores a “minerar uma nova moeda no início”, na esperança de que a taxa suba e a oportunidade de perder rapidamente seus ganhos. Além disso, isso significa que o seu validador pode ser qualquer pessoa, até mesmo uma pessoa anônima, você pode votar nele da mesma forma que em outros validadores (no entanto, será difícil para uma pessoa anônima coletar os votos das partes interessadas para si mesmo, por isso deixarei as histórias assustadoras sobre criptomoedas anônimas para os políticos). No entanto

A tarefa da equipe do projeto é inserir de alguma forma em sua rede aqueles que no futuro serão capazes de garantir o funcionamento estável dos nós, entender a segurança, saber resolver problemas rapidamente, cooperar com outros validadores e agir em conjunto - a qualidade disso Tudo depende totalmente dessas qualidades, um token no qual os participantes da rede investirão seu tempo e recursos. Fundadores adequados, ao avaliar os riscos, entendem bem que ao lançar um software desse porte, você definitivamente terá que encontrar erros no código e na configuração dos nós, e que a estabilidade da rede depende de quão bem os desenvolvedores e validadores resolverão em conjunto tais problemas.

A equipe está pronta para votar na mainnet em qualquer validador, só para saber quais são bons? O maior portfólio? Quase ninguém tem isso agora. Com base nos perfis do Linkedin da equipe? Devops experientes ou especialistas em segurança não fornecerão nenhum perfil do Linkedin. De acordo com declarações no chat, postagens e ajuda a outras pessoas durante a fase de preparação? Bom, mas subjetivo e impreciso.

Nessas condições, resta uma coisa - algo que resolve bem os problemas de todos - um jogo no qual será possível selecionar os melhores validadores, mas o principal é testar a resistência do blockchain e realizar um teste de combate em grande escala do blockchain em condições de uso ativo, mudanças no consenso, aparência e correção de erros. Este procedimento foi apresentado pela primeira vez como um jogo pelos caras do projeto Cosmos, e essa ideia é sem dúvida uma excelente forma de preparar a rede para o lançamento de uma rede principal confiável e tolerante a falhas.

Jogo dos Validadores

Descreverei o jogo de validadores conforme o projetamos para o blockchain DAO.Casino (DAOBet) baseado no fork EOS, que é chamado Haya e possui um mecanismo de governança semelhante - os validadores são escolhidos votando em qualquer conta, na qual parte de o saldo usado para votar no validador é congelado. Qualquer conta que tenha o token BET principal em seu saldo pode votar no validador selecionado com qualquer parte de seu saldo. Os votos são somados e os principais validadores são construídos com base nos resultados. Em diferentes blockchains este processo é organizado de forma diferente, e geralmente é nesta parte que o novo blockchain difere do pai, e devo dizer que no nosso caso, EOS justifica totalmente o “OS” em seu nome, nós realmente usamos EOS como sistema operacional base para implantação de uma versão modificada do blockchain para tarefas DAOBet.

Descreverei problemas individuais e como eles podem ser resolvidos dentro do jogo. Vamos imaginar uma rede na qual seu servidor possa ser atacado abertamente, onde para manter a posição do validador você precisa interagir continuamente com a rede, promovendo seu validador e garantindo que ele produza blocos e eles sejam entregues aos outros validadores no prazo, caso contrário, o validador será eliminado da lista.

Como escolher os principais vencedores?

O principal requisito técnico do jogo é que seus resultados sejam verificáveis ​​publicamente. Isto significa que os resultados do jogo: TOP vencedores, devem ser formados estritamente com base em dados que possam ser verificados por qualquer participante. Num sistema centralizado, poderíamos medir o “uptime” de cada validador e recompensar aqueles que estiveram mais online ou passaram pelo máximo tráfego de rede. Você pode coletar dados sobre a carga do processador e da memória e recompensar aqueles que trabalharam bem. Mas qualquer coleção de métricas significa a existência de um centro de coleta, e os nós são todos independentes e podem se comportar como quiserem e enviar quaisquer dados.

Portanto, a solução natural é que os vencedores sejam determinados com base nos dados do blockchain, pois podem ser usados ​​para ver qual validador produziu qual bloco e quais transações foram incluídas nele. Chamamos esse número de Pontos Validadores (VP), e ganhá-los é o principal objetivo dos validadores no jogo. No nosso caso, a métrica mais simples, facilmente verificável publicamente e eficaz da “utilidade” de um validador é VP = número de blocos produzidos pelo validador em um determinado período de tempo.

Esta escolha simples se deve ao fato de que a governança no EOS já prevê muitos problemas emergentes, uma vez que o EOS é o herdeiro de três gerações de blockchains realmente funcionais, com vasta experiência em gerenciamento de redes complexas e quase todos os problemas de validação com a rede, processador, disco leva a apenas um problema - ele assina menos blocos, recebe menos pagamento pelo trabalho, o que novamente nos leva simplesmente ao número de blocos assinados - para EOS esta é uma opção excelente e simples.

Para outras blockchains, a forma como os Pontos Validadores são calculados pode diferir, por exemplo, para consensos baseados em pBFT (Tendermint/Cosmos, consenso Aura do Parity Substrate), onde cada bloco deve ser assinado por vários validadores, faz sentido contar validadores individuais assinaturas em vez de blocos. Pode fazer sentido levar em conta rodadas de consenso incompletas, que desperdiçam os recursos de outros validadores, em geral isso depende muito do tipo de consenso.

Como simular condições operacionais reais

A tarefa dos fundadores é testar os validadores em condições próximas da realidade, sem ter nenhum controle centralizado. Esse problema pode ser resolvido por meio de um contrato faucet, que distribui quantidades iguais do token principal aos validadores e a todos os demais. Para receber tokens em seu saldo, você precisa criar uma transação e garantir que a rede a inclua no bloco. Assim, para vencer, um validador deve constantemente reabastecer seu saldo com novos tokens e votar em si mesmo, promovendo-se ao topo. Esta atividade cria uma carga constante na rede e os parâmetros podem ser selecionados para que o fluxo de solicitações seja severo o suficiente para um teste completo da rede. Portanto, planeje com antecedência o contrato da torneira como uma ferramenta importante para o lançamento da rede e comece a selecionar seus parâmetros com antecedência.

Solicitar tokens de uma torneira e validar votos ainda não emula totalmente a operação de uma ogiva, especialmente em modos extremamente carregados. Portanto, a equipe do blockchain ainda terá que escrever benchmarks adicionais de uma forma ou de outra para carregar a rede. Um papel especial nisso é desempenhado por contratos inteligentes especialmente criados que permitem testar um subsistema separado. Para testar o armazenamento, o contrato armazena dados aleatórios no blockchain e, para testar os recursos da rede, o contrato de teste requer uma grande quantidade de dados de entrada, aumentando assim o volume de transações - lançando um fluxo de tais transações em pontos arbitrários no tempo, a equipe testa simultaneamente a estabilidade do código e a força dos validadores.

Uma questão separada é atualizar o código dos nós e conduzir hard forks. É necessário que em caso de bug, vulnerabilidade ou conluio de validadores maliciosos, os validadores tenham um plano de ação que já tenha sido elaborado no jogo dos validadores. Aqui você pode criar esquemas para acumular VP para aplicar rapidamente um hard fork, por exemplo, multando todos os validadores que ainda não lançaram uma nova versão do código do nó, mas isso é difícil de implementar e complica o cálculo. Você pode simular a situação de uso emergencial de um hard fork “quebrando” artificialmente o blockchain em um determinado bloco. A produção dos blocos é interrompida e, no final, os vencedores serão aqueles que entrarem primeiro e começarem a assinar os blocos, portanto, o VP baseado no número de blocos assinados é uma boa opção aqui.

Como informar os participantes sobre o status da rede e corrigir erros

Apesar da desconfiança entre os validadores, o recebimento oportuno de informações atualizadas sobre o estado da rede é benéfico para todos, a fim de tomar decisões mais rapidamente, por isso a equipe do projeto está criando um serviço para coletar e visualizar muitas métricas dos servidores validadores, que permite ver a situação simultaneamente para toda a rede, permitindo determinar rapidamente o que está acontecendo. Além disso, é benéfico tanto para os validadores quanto para o projeto que a equipe do projeto corrija rapidamente os erros encontrados, portanto, além de coletar métricas, faz sentido começar imediatamente a coletar logs e dados de erros das máquinas dos validadores em uma máquina acessível ao blockchain desenvolvedores. Aqui, não é benéfico para ninguém distorcer informações, portanto esses serviços são desenvolvidos pela equipe do projeto e são confiáveis. Faz sentido coletar métricas do sistema dos validadores e, claro, as métricas mais importantes do próprio blockchain – para DAOBet – são o tempo de finalização e o atraso do último bloco finalizado. Graças a isso, a equipe observa um aumento no consumo de memória nos nós ao executar o benchmark, problemas com validadores individuais

Pontos importantes para conduzir um jogo validador

Acontece que se você deseja permitir oficialmente que os validadores ataquem as máquinas uns dos outros (não oficialmente eles podem fazer isso de qualquer maneira), você precisa formular isso separadamente legalmente como testes de segurança, uma vez que sob as leis de alguns países DDoS ou ataques de rede podem ser punido. Outra questão importante é como recompensar os validadores. Os prêmios naturais são tokens de projeto, que serão transferidos para a rede principal, mas uma distribuição massiva de tokens para quem conseguiu lançar um node também não é a melhor opção. Muito provavelmente você terá que equilibrar entre duas opções extremas:

Distribua todo o prêmio de acordo com o VP ganho
é muito democrático e permite que todos que investiram tempo e recursos no jogo validador ganhem dinheiro
mas atrai pessoas aleatórias para o jogo sem infraestrutura preparada

Distribua o prêmio dos N primeiros aos validadores com base nos resultados do jogo
Os vencedores provavelmente serão os validadores que resistiram de forma mais consistente durante o jogo e estão estritamente determinados a vencer
alguns validadores não vão querer participar, avaliando mal suas chances de ganhar, especialmente se os participantes incluírem validadores veneráveis

Qual opção escolher depende de você

Há mais um ponto - não é fato que dezenas de validadores correrão para participar do jogo conforme sua chamada, e daqueles que decidirem tentar, nem todos irão instalar e iniciar o nó - normalmente, nesta fase, os projetos têm documentação bastante esparsa, são encontrados erros e os desenvolvedores que trabalham sob pressão de tempo não respondem às perguntas muito rapidamente. Portanto, antes de lançar o jogo, também é necessário prever ações caso o número necessário de validadores não seja atingido. Neste caso, no início do jogo, os validadores faltantes são lançados pela equipe do projeto, participam do consenso, mas não podem ser vencedores.

Conclusão

Concluindo, tentei compilar a partir do exposto uma lista do que precisa ser pensado, feito e lançado para conduzir efetivamente um jogo validador

O que você precisa fazer para executar um jogo validador real:
desenvolva seu próprio blockchain :)

  • criar e criar uma interface web e fornecer uma CLI para votação em validadores
  • certifique-se de que as métricas de um nó validador em execução possam ser enviadas para um serviço centralizado (por exemplo, Prometheus)
  • criar um servidor de coleta de métricas (Prometheus + Grafana) para o jogo validador
  • descobrir como os Pontos Validadores (VP) serão calculados
  • desenvolver um script público que calcule o VP do validador com base nos dados do blockchain
  • desenvolver uma interface web para exibir os principais validadores e o status do jogo dos validadores (quanto tempo falta para o final, quem tem quanto VP, etc.)
  • desenvolver e automatizar o lançamento de um número arbitrário de seus próprios nós, projetar o processo de conexão de validadores ao jogo (quando e como desconectar seus nós, enviar e remover votos para eles)
  • calcular quantos tokens precisam ser emitidos e desenvolver um contrato de faucet
  • faça um script de benchmark (transferências de token, uso massivo de armazenamento, uso massivo de rede)
  • reúna todos os participantes em um bate-papo para comunicação rápida
  • lançar o blockchain um pouco antes do início do jogo
  • espere pelo bloco inicial, comece o jogo
  • testar a rede com diversos tipos de transações
  • estenda um garfo duro
  • alterar a lista de validadores
  • repita as etapas 13,14,15, XNUMX, XNUMX em ordens diferentes, mantendo a estabilidade da rede
  • espere pelo bloco final, termine o jogo, conte VP

É preciso dizer que o jogo dos validadores é uma história nova e foi realizado apenas algumas vezes, por isso não tome este texto como um guia pronto. Não existem análogos no negócio moderno de TI - imagine que os bancos, antes de lançar um sistema de pagamento, concorram entre si para ver quem será o melhor na condução das transações dos clientes. É pouco provável que as abordagens tradicionais o ajudem a criar grandes redes descentralizadas, por isso domine novos modelos de negócio, execute os seus jogos, identifique os que valem a pena, recompense-os e mantenha os seus sistemas distribuídos a funcionar de forma rápida e estável.

Fonte: habr.com

Adicionar um comentário