Ilusão de nível de consenso

O Ethereum é uma plataforma descentralizada que serve como base para contratos inteligentes - aplicativos que funcionam exatamente de acordo com o código do programa, sem a menor probabilidade de tempo de inatividade, censura, interferência de fraudadores ou agentes de terceiros.
- Ethereum.org



Nós desenvolvedores adoramos acreditar em um nível de consenso comprometido com a solução de todos os problemas complexos de sistemas distribuídos, o que nos permite escrever aplicativos. Os mineiros vivem em um nível de consenso, realizando seus negócios. Os desenvolvedores sentam-se no nível do aplicativo e escrevem contratos inteligentes - programas que funcionam dentro da Ethereum Virtual Machine (EVM). Nossos aplicativos descentralizados interagem com o computador, confiando em sua integridade e segurança.

Sabemos que o EVM funciona por consenso e não precisamos pensar nesse mecanismo enquanto ele funcionar. Não pensamos em mineradores, porque, no final, não há necessidade de entender o princípio de operação de semicondutores ou os recursos de design de microchips de computadores modernos. Mas, infelizmente, essa separação conveniente e previsível entre níveis não passa de uma ilusão. A ilusão em nível de consenso que nos ajuda a esquecer que os mineiros não são nossos amigos.

Na prática, a transição de contratos para consenso é um fenômeno muito menos tranqüilo e não tão simples quanto se pensa. A criação de blocos afeta o estado do EVM, que por sua vez afeta os desafios dos contratos inteligentes e, como resultado, afeta a operação de aplicativos descentralizados e de seus usuários. Quanto mais lentos os blocos, mais lentos os aplicativos descentralizados. Quanto mais rápido os blocos, mais rápidas as aplicações. Blocos vazios fazem com que os aplicativos parem de funcionar.

De tempos em tempos, um nível de consenso interfere inadvertidamente em aplicativos descentralizados. Mas pode haver casos em que representantes desse nível possam intervir intencionalmente. Os mineiros controlam o nível de consenso. Eles trabalham por dinheiro e, portanto, manterão o nível do aplicativo apenas enquanto isso lhes trará lucro. Se eles puderem ganhar mais dinheiro interferindo no nível do aplicativo, acabarão por começar a fazê-lo.

Esteira para mineiros


Os mineiros não são seus amigos. No entanto, não inimigos. Eles não querem prejudicar você, eles simplesmente não podem evitá-lo. Esses são os requisitos da Prova de trabalho. Os mineiros precisam entrar em uma concorrência acirrada pelo direito de receber uma margem muito pequena. Eles estão presos na esteira dos mineiros, onde o mais rápido dos corredores define o ritmo.



Sempre que eles conseguem inventar outra maneira de acelerar ou reduzir o custo dos hashes de computação, a complexidade aumenta. Com seu crescimento, cada hash individual se torna cada vez mais significativo para mim. Sua taxa de hash pode permanecer inalterada, mas você gradualmente começa a receber cada vez menos. Nesse sentido, a Prova de Trabalho força os mineradores a reinvestir constantemente os lucros. Eles lucram apenas com gastos constantes, otimização e manutenção da competitividade. Aqueles que são incapazes de competir saem da corrida .



Se a sua margem é de 1%, uma redução de 1% na renda rouba você do lucro. Se o hashrate do mineiro se tornar pelo menos um pouco menor do que a norma atual, fica atrás do resto de seus colegas. Por outro lado, um aumento de 1% na renda leva a uma duplicação de lucros. Mesmo uma pequena margem de eficiência permite que o minerador obtenha muito mais dinheiro para reinvestir em equipamentos. E a separação desses participantes está aumentando cada vez mais, como resultado dos quais concorrentes menos bem-sucedidos não podem mais se opor a eles. A prova de trabalho faz com que os mineradores busquem pequenos benefícios, melhorem todos os aspectos do processo e os usem para expulsar os concorrentes da esteira.

Existem duas maneiras de melhorar a lucratividade da mineração - aumentar a lucratividade ou reduzir custos. O lucro é composto de recompensas por blocos aprovados e comissões pelas transações incluídas neles. Os custos decorrem da necessidade de pagar por eletricidade, equipamentos, salários dos funcionários, aluguel de escritórios e similares.



Atualmente, os mineradores estão competindo devido a grandes melhorias muito óbvias, como encontrar tarifas mais baixas de eletricidade ou melhorar o equipamento. Infelizmente, essa abordagem leva a um declínio cada vez maior nos lucros no futuro. Está ficando cada vez mais difícil para as empresas encontrar eletricidade mais barata. A mineração com a ajuda de placas gráficas se baseia na limitação da largura de banda da memória, e os ASICs, por sua vez, são limitados pelo tamanho físico mínimo dos transistores usados ​​em seus microcircuitos. Agora, todos esses caminhos de desenvolvimento ainda permanecem relevantes, mas em um momento seu potencial estará esgotado e os mineradores serão forçados a procurar opções de otimização menos óbvias e mais sofisticadas .

Existem algumas maneiras muito eficazes e não óbvias. Infelizmente, eles são prejudiciais para outros usuários do sistema. Gostaria de me concentrar nas maneiras pelas quais as mineradoras podem aumentar os lucros e reduzir os custos retirando dinheiro de pessoas e sistemas que dependem do trabalho de blockchains. Enquanto você estiver lendo este material, tente não esquecer que os mineiros não querem receber seu dinheiro, eles precisam fazê-lo. A prova de trabalho exige que eles aumentem a competitividade.

Como os mineiros podem intervir


Os mineradores têm muitas maneiras de interferir na operação do EVM e nos aplicativos em execução nele. Como cada minerador tem a capacidade de controlar os blocos que gera, também pode controlar as alterações de estado nesse bloco. Vamos examinar alguns dos métodos mais simples, sem nos aprofundar nos detalhes. Para cada um deles, tentaremos determinar uma estratégia de intervenção, quem sofrerá e como os mineradores podem ganhar dinheiro com isso.

Reordenar transações

As transações são processadas em blocos. Cada bloco possui uma ordem canônica de processamento das mudanças no status da transação. Os mineradores aplicam cada transação ao estado EVM em ordem e determinam o hash raiz do estado final localizado no cabeçalho do bloco. O mineiro que gera o bloco tem controle sobre a ordem das transações nos blocos. A capacidade de controlar a ordem das transações em um bloco permite realmente controlar a ordem das alterações de estado.



Suponha que eu queira enviar pagamentos a um amigo. Vou criar um contrato simples com três funções: deposit , unlock e retrieve . A chamada de deposit transfere fundos para armazenamento. Sempre que eu quero lhe enviar dinheiro, eu unlock 5 éteres. Meu amigo chama a função de retrieve , que envia a ele todos os fundos que não são bloqueados com deposit . Se o mineiro vê unlock e retrieve transações em um bloco, ele pode trocá-las e retrieve será chamado anteriormente. A retrieve chamadas permitirá que você receba todo o conteúdo gratuito, não em fundos de armazenamento. Depois disso, o unlock será chamado. Como resultado, meu amigo será forçado a enviar a transação de retrieve novamente, tendo pago a comissão novamente.



Ao alterar a ordem dos contratos de exportação, os mineradores podem influenciar os resultados da execução dos contratos. Isso significa que eles podem, dentro de certos limites, monitorar o status do EVM. A situação é particularmente exacerbada por grandes contratos públicos que governam as interações entre um grande número de usuários. Quanto maior o conjunto de transações disponíveis para o mineiro, mais controle ele tem sobre o estado final.

Os desenvolvedores de contratos devem prever tais tentativas de alterar arbitrariamente a ordem das transações em blocos. Caso contrário, os mineradores poderão provocar o pagamento de comissões adicionais ou causar outros danos não intencionais aos usuários do aplicativo.

Inserção de transação


Ao formar a ordem das transações em um bloco, os mineradores não se limitam apenas à capacidade de manipular as transações de outras pessoas. Eles podem criar suas próprias transações. Eles têm um ETH. E, como todos nós, eles podem jogar com ele no cassino blockchain e comprá-lo ou vendê-lo nos mercados de blockchain. No entanto, a capacidade de determinar a ordem de processamento das transações em alguns casos pode permitir que eles se tornem os primeiros na fila de processamento.

Vamos criar outro contrato inteligente simples. Desta vez, Alice quer jogar um jogo de adivinhação. Ela coloca 5 éteres em um contrato. Esse valor é enviado para a pessoa que nomeia o número mais próximo do número estimado. Alice chama commit com um hash do número, garantindo sua imutabilidade. Todos podem guess e participar da adivinhação. Após 2 quarteirões, as chamadas de Alice reveal para que todos saibam qual número foi formado.



Alice não pode trapacear, pois isso é previsto no contrato. Mas o mineiro tem essa oportunidade. Ele pode esperar e ligar para seu número depois de ver a ligação revelada. Ele saberá o resultado antes mesmo da formação do bloco! Mesmo que Davi também ligue para 4, o mineiro pode mudar a ordem, vencendo-o.

Quando um usuário comum cria uma transação, ele a envia aos mineradores para inclusão no bloco. O usuário deve dar consentimento irreversível à transação antes de ver o resultado de sua execução. Os mineiros, pelo contrário, podem esperar no processo de criação de um bloco e só então decidir se devem incluir uma transação específica. Isso significa que eles têm acesso a mais informações que os usuários comuns, além do poder de alterar a ordem das transações. Isso lhes dá uma grande vantagem em qualquer sistema baseado em blockchain.

Sempre que usuários e mineradores interagem no blockchain por meio de um contrato inteligente, há o risco de que os mineradores insiram transações e alterem seus pedidos para seu próprio benefício. Como regra, isso significa que eles receberão dinheiro, que, de outra forma, deveria estar no bolso de um usuário comum. Desenvolvedores de contratos inteligentes devem projetar seus sistemas para lidar com essa desigualdade.

Erros Forçados

Os mineradores podem tirar proveito da reordenação e inserções para intervir nos desafios dos contratos inteligentes. Às vezes, eles podem até atrapalhar completamente o desafio. Chamamos esses casos de erros forçados. Eles ocorrem quando os mineiros alteram o estado para algum tipo de chamada inesperada, como resultado da falha. Eles podem fazer isso inserindo uma transação que afetará o estado.

Vamos criar um contrato inteligente simples para o mercado. Exporto sell para colocar alguns tokens à venda a um determinado preço. Qualquer um pode ligar para comprar para comprar alguns dos meus tokens.



Nessa situação, o mineiro pode verificar a chamada de Bob para buy e considerar a opção de sua compra de token. Ele pode comprar exatamente o necessário para Bob concluir a transação com um erro. Se Bob quiser comprar 2,5 GNT, o mineiro poderá atingir essa escassez. A transação de Bob terminará com erro, mas o mineiro receberá uma comissão por isso. Assim, Bob, contrariamente à sua vontade, pagará pela compra de tokens GNT pelo mineiro, sem receber nada em troca.

Esse ataque é especialmente perigoso nas versões mais antigas do Solidity. As versões antigas das palavras-chave assert e throw transferem todo o gás conectado ao minerador, o que os leva a receber comissões muito altas pela falta de trabalho. As palavras-chave mais recentes require e revert restringem o uso de gás com base no trabalho real realizado.

Erros forçados permitem que os mineradores recebam comissões por se recusarem a executar o trabalho. Se a transação terminar com erros, o estado retornará ao seu estado original. Se o mineiro encontrar uma maneira confiável de provocar chamadas erradas, ele nem precisará processar alterações de estado. O bloco ideal de acordo com a versão do minerador é aquele bloqueado por uma falha com transações e pagamentos errados com uma transferência da comissão para seu processamento, sem outras alterações de estado.

Os desenvolvedores de contratos inteligentes podem impedir parcialmente esse comportamento examinando cuidadosamente sua revert e require expressões. Se os mineradores conseguirem encontrar o caminho certo para levar o contrato a erro, poderão coletar comissões adicionais de seus usuários. Regra número um nesses casos: se uma chamada depende de um estado que pode ser alterado por outro usuário, ela fica vulnerável a erros forçados.

Censura

Ao decidir a ordem das transações em um bloco, os mineradores também podem ignorar seletivamente certas transações. Eles podem fazer isso por razões políticas ou financeiras. Os usuários geralmente não têm garantias de que os mineradores jamais incluirão uma transação específica em um bloco.

Digamos que Alice queira fazer um cofrinho para si mesma. Ela pode lançar um contrato simples, permitindo que ela retire dinheiro antes de 10 mil blocos. Alice é uma boa pessoa e, portanto, ela quer ter certeza de que, no caso de sua morte repentina, o dinheiro será enviado para pelo menos outra pessoa. Portanto, ela garante que o contrato permita que os mineradores retirem dinheiro após 50 mil blocos.



Cada minerador individual tem uma forte motivação para não incluir sua transação de retirada em seus blocos. Eles não têm nada a perder: se ela nunca pode aceitar o dinheiro, eles podem tentar a sorte e conseguir no futuro. Além disso, ela só poderá sacar dinheiro se os mineiros permitirem que ela faça isso. Mesmo se eles não conspirarem e ignorarem suas transações, ou conduzirem qualquer ataque de 51%, ainda poderão se recusar a aceitar coletivamente sua transação para processamento.

Isso significa que simplesmente não há contratos para garantir a entrega 100% oportuna de uma transação! Você terá que criar aplicativos tendo em vista a possível censura imprevisível dos mineiros. E como o contrato não pode prever seu desejo de intervir, deve prever possíveis atrasos arbitrários no tempo.

Escalada de problemas


Quanto mais dinheiro entra no sistema, maior a probabilidade de os mineradores quererem interferir de uma maneira ou de outra no seu trabalho. À medida que as trocas crescem, os cassinos se tornam mais complexos e o valor da blockchain aumenta, assim como a motivação dos mineradores para intervir.

O consenso não é apenas o nível em que nossos aplicativos descentralizados são mantidos. De fato, eles estão intimamente entrelaçados com a camada de aplicação. Quando escrevemos programas, não pensamos nas propriedades físicas do silício, porque sabemos que ele não tentará pegar nosso dinheiro ativamente. Infelizmente, entre o EVM e o silício, há uma camada na forma de mineradores e, se não puderem ser confiáveis, o EVM não será confiável.

Os desenvolvedores de solidez devem programar um computador que funcione contra eles. EVM como tal é um "sistema bizantino". Qualquer parte dele propensa a um resultado malsucedido chegará a ele no pior momento. Hoje, ainda estamos em um estágio muito inicial no entendimento de criptomoedas, mineração e contratos inteligentes. Agora, as mineradoras não demonstram um desejo ativo de otimizar suas atividades às custas dos usuários, mas isso é apenas por enquanto. O Ethereum crescerá e, um dia, ainda nos lembraremos dessa época como a era de ouro das aplicações descentralizadas.

Mineiros não são amigos e nem inimigos. Eles são um tipo de desastre natural incontrolável que opera em nossos sistemas de consenso. Aqueles que não aprenderem a gerenciar esse elemento acabarão se tornando vítimas de mineradores avançados.

imagem

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


All Articles