decen{BR}

Por que o sync do Ethereum é tão lento?

Alguns anos atrás um conhecido descobriu Ethereum e me pediu dicas. Disse a ele que se tratava da grande novidade no mundo das criptos naquela época e que tinha bastante potencial, apesar que todos só pareciam querer Litecoin e Bitcoin. Ele gostou tanto que se tornou minerador de Ethereum e até faturou um belo dinheiro vendendo os lucros com o boom de 2017.

No entanto, em 2017 surgiu uma pergunta recorrente: por que é tão difícil sincronizar um nó Ethereum?

Por que até mesmo o “fast sync” é tão lento?

Geth Lento

Usuários têm reclamado constantemente sobre isso – a sincronização do geth é absurdamente lenta no wallet oficial do Ethereum.

Alguns chegam a questionar a viabilidade de um sistema decentralizado que consome centenas de gigabytes do disco rígido e requer até semanas para sincronizar com o resto da rede.

Enquanto o geth faz o seu árduo trabalho, administradores de full nodes Ethereum veem, durante um bom tempo, uma tela conforme a seguinte :

Por que isso acontece? Neste artigo vamos abordar essa questão em detalhes, iniciando por uma mudança que buscava otimizar o problema: o Ethereum fast sync.

Otimização Fast Sync

Usuários que reclamam da lenta sincronização do Ethereum têm razão, e os devs mostraram que estavam ouvindo a opinião da comunidade.

Criaram, então, uma nova opção para inicialização do geth. Tornaram obsoleto o comando “–fast” e introduziram a opção “–syncmode fast”, que introduziu todo um novo sistema de sincronização. (Falaremos mais sobre isso em seguida.)

Porém, essas alterações não solucionaram o problema e a sincronização de full nodes do Ethereum continua sendo muito lenta.

Por que isso acontece?

Como podemos mitigar esse problema?

Neste artigo discutimos algumas questões já conhecidas sobre essa questão e como você pode tentar solucioná-las.

Problemas Conhecidos

Atualmente, há alguns problemas conhecidos e que tornam a sincronização Ethereum extremamente lenta. São eles:

  1. Clientes Ethereum têm dificuldade para encontrar pares. Como você deve saber, Ethereum é um sistema P2P, semelhante ao BitTorrent. Quando há poucos pares conectados, e esses possuem conexões lentas ou instáveis, a taxa de transmissão de blocos torna-se lenta e pode até parar.
  2. Não há indicador de progresso do download parcial de dados. O marcador somente mostra progresso quando um bloco é transferido por completo. Usuários então reportam ver o mesmo bloco na tela, sem qualquer movimento durante dias.
  3. Há muito spam na blockchain. Foram realizados vários ataques contra a blockchain Ethereum no passado.
  4. Ao contrário do Bitcoin que possui limite de 1 MB de dados por bloco, Ethereum não tem limite de tamanho.Alguns blocos Ethereum são gigantescos. (Mesmo assim, alguns insistem que o tamanho dos blocos Bitcoin deveria ser expandido.)
  5. Nós atrás do NAT causam problemas, pois o funcionamento normal de um full node é praticamente simétrico – deve receber quase o mesmo volume que envia. Novamente vale a comparação com BitTorrent – nós que somente sugam dados são chamados de sangue-sugas. Boa parte da rede Ethereum se econtra “oculta” atrás de modems que não permitem tráfego de entrada.
  6. O algoritmo “fast sync” requer que a estrutura inteira da blockchain seja baixada, antes de processar blocos.

Vamos dar uma olhada mais de perto em cada um desses fatores?

Encontrando Pares

Muito pouco pode ser feito para mitigar o problema de encontrar pares em redes P2P. Trata-se de um processo quase aleatório, onde pares podem, ou não, encontrar-se online em determinado momento e, caso estejam, serem encontrados ao acaso por outros pares.

Sistemas deentralizados com participantes anônimos, como Freenet (que ainda existe, por sinal) também são notoriamente lentos devido ao mesmo motivo. Nesse tipo de rede não há um nó central que sirva para auxiliar os demais pares a se encontrarem.

Outro fator que limita redes P2P é a baixa qualidade das conexões em muitas regiões. O usuário deseja participar da rede, porém tem acesso muito limitado à Internet. Outros nós se conectam a esse participante e passam a, também, limitar seu desempenho em função do nó mais lento. Há técnicas para minimizar este problema, porém identificar e isolar o nó lento gera, necessariamente, degradação no desempenho da rede.

Não há muito que pode ser feito para evitar conectar-se a nós lentos. O que pode ser feito é, uma vez identificado um nó bastante lento, inserí-lo em uma lista de restrições para evitar futura conexões.

Spam

Spam é um problema em todas as tecnologias relacionadas à Internet. Seja Telegram, IRC, foruns na WWW ou até mesmo a blockchain das criptomoedas mais populares, o spam parece estar por toda parte.

A vasta maioria do spam possui fins lucrativos. Salvo raras exceções de ativismo e protestos diversos, pode-se dizer que 99,9% do spam que circula na internet visa lucrar de alguma forma.

Mas, qual seria a finalidade do spam na blockchain? Que tipo de lucro isso poderia render? Normalmente, a finalidade é promover alguma nova criptomoeda de forma viral.

DDoS Usando Spam de Transações

Praticamente todas as criptomoedas mineráveis entre as 100 maiores, como Bitcoin e Ethereum, já foram atacadas com ondas de spam no passado. O spam normalmente consistem em enviar grande número de pequenas transações para gerar congestionamento na mempool (memória coletiva de transações ainda não mineradas).

Esse tipo de ataque usando spam de transações ocorreu em 2017, quando o mempool do Bitcoin tornou-se tão congestionado que muitos pensaram que a rede Bitcoin finalmente tinha sido derrotada. Há outros ataques de spam possíveis,

Quando esse tipo de ataque é cometido por atores que possuem vastos recursos técnico-financeiros, é quase impossível de se defender. Mesmo assim, Bitcoin e Ethereum, entre outras, têm suportado bravamente todo tipo de bombardeio lançado contra elas. Vimos alguns ataques especialmente cruéis em 2017, quando certas criptomoedas alternativas queriam tomar o posto número 1 do Bitcoin.

Tamanho dos Blocos

Se tivessemos que escolher apenas um bom argumento contra a idéia de aumentar o tamanho dos blocos do Bitcoin, então Ethereum seria um ótimo exemplo.

Os blocos Ethereum são tecnicamente ilimitados, e podem crescer indefinidamente, sendo limitados apenas pela quantidade de GAS disponível para a taxa de transmissão.

GAS é a unidade financeira utilizada para saldar custos de processamento na blockchain Ethereum. Por exemplo, um smart contract mais sofisticado exige mais GAS para executar que uma simples transferência de ETH.

GAS é, portanto, o combustível do supercomputador Ethereum – daí a origem do nome dessa moeda, fazendo alusão à gasolina.

Quando um smart contract é grande e complexo, ele exige um alto valor de GAS para executar. Esse valor limita o tamanho dos blocos Ethereum, evitando um DDoS por meio de uma transação de alguns terabytes, por exemplo.

NAT

Como bem se sabe, há alguns anos exaurimos todo o espaço de endereços IP versão 4.

Portanto, grande parte da Internet funciona atrás de IP’s consolidadores. Por exemplo, milhares de nós de uma empresa acessam a Internet por meio de apenas um IP do firewall corporativo. No caso de redes domésticas, o modem ADSL ou de fibra ótica faz o papel do firewall utilizando NAT.

NAT permite aos provedores de acesso à Internet oferecer acesso a seus usuários. O provedor possui uma estreita faixa de IP’s, que utiliza para vender acesso ao backbone da Internet. Os clientes assinam o serviço mensal, e o provedor distribui IP’s para cada cliente que então utiliza NAT para distribuir acesso aos demais dispositivos domésticos (tablets, TVs, notebooks etc). Esses IP’s domésticos não circulam na Internet pública. São traduzidos em tempo real pelo sistema NAT no roteador.

O problema do NAT é que ele limita o tráfego de/para os computadores que o utilizam. Isso é uma vantagem quando se trata de segurança, mas para quem deseja oferecer serviços na Internet é uma grande limitação. Como sistemas P2P exigem conexão simétrica, o NAT torna-se um problema.

Porém, se não houvesse NAT, os incidentes hackers seriam muito mais frequentes. Realmente NAT protege boa parte da infraestrutura amadora da Internet, como impressoras, câmeras e assim por diante.

NAT é uma tecnologia que veio para ajudar, com a ressalva que já mencionamos:

NAT é péssimo para redes P2P

Redes P2P devem ser o mais simétricas possível. Usuários devem poder transmitir e receber livremente entre si. Quando um nó faz download a 2 mbps, para contribuir de volta à rede ele também deveria fornecer vazão de 2 mbps, o que raramente ocorre. Esse é um dos grandes problemas de redes P2P como BitTorrent e Ethereum.

A maioria dos full nodes Ethereum funcionam atrás de firewalls NAT e não há nada que os desenvolvedores possam fazer sobre isso.

O Algoritmo Fast Sync

Por fim temos o algoritmo fast sync.

Esse algoritmo exige que toda a estrutura da blockchain seja baixada antes de baixar os dados de cada bloco. Alguns blocos são gigantescos, conforme mencionamos anteriormente.

Devido ao tamanho dos blocos de dados contidos na blockchain Ethereum, o download de toda a estrutura leva dias, quem sabe até semanas. Enquanto o sistema não termina de baixar essa estrutura, o contador de blocos permanece congelado na tela. Usuários então falam de “wallets congelados” e reclamações do tipo, quando na verdade o geth está fazendo o melhor possível para baixar tudo no plano de fundo. Para ver o que está acontecendo, basta ativar o log geth para ver que muito está acontecendo enquanto a tela encontra-se congelada.

Todos esses fatores tornam a sincronização de um full node Ethereum muito lenta.

Então, o que podemos fazer para acelerar o processo?

Soluções?

Não há receita única para acelerar a sincronização Ethereum. No entanto, administradores experientes conseguem otimizar o funcionamento de seus full nodes. Aqui vão algumas dicas:

  • Ao compreender que a natureza de toda rede P2P é bastante aleatória, o simples ato de reiniciar o geth pode acelerar a sincronização. Isso ocorre porque ao reiniciar o cliente ele procurará novos nós iniciais para começar o processo. Quando obtem nós velozes ele normalmente realiza o trabalho de forma muito ágil. Parece trivial mas funciona – reinicie o geth várias vezes até conectar-se a nós velozes!
  • É possível alugar instâncias Amazon AWS para baixar a blockchain completa nessas instâncias e então transferir os dados para seu computador. Como a rede Amazon é extremamente rápida, isso pode ajudar no pontapé inicial. Caso opte por essa estratégia, crie um wallet vazio na instância AWS. Não envie seu wallet original para lá! Isso evita que suas chaves sejam desviadas por alguém que tenha acesso administrativo às instâncias.
  • Aumente o valor do parâmetro –cache para 1024 ou um valor maior. O cache padrão é muito pequeno. Alguns usuários reportam grande melhora no desempenho modificando esse parâmetro.
  • Utilize a opção –nat none do comando geth. Isso indicará ao geth que você se encontra atrás do NAT e que o sistema não deve contar com conexões de entrada.

Wallets Magros ao Resgate?

Lembre-se que, caso apenas deseje utilizar a rede Ethereum para tarefas triviais, como enviar e receber valores, você não precisa de um full node.

Wallets magros como MyEtherWallet oferecem funcionalidade completa seme precisar baixar toda a blockchain Ethereum!

Quando se usa um wallet magro, perde-se um pouco de “soberania”, pois é preciso confiar em um sistema remoto que irá retransmitir suas transações para a rede. Fora isso, é bem prático e seguro usar os wallets mais populares. Apenas certifique-se de baixar uma versão autêntica, pois wallets magros costumam ser alvos de hackers.

Executar um full node Ethereum te permite ser seu próprio banco. O envio e recebimento de transações ocorre usando a API do próprio nó cliente, que executa em sua infraestrutura pessoal. Isso lhe dá um poder enorme para construir aplicações de pagamentos instantâneos. Para esse caso, esperamos que as dicas deste artigo lhe ajudem a fazer uma sincronização mais ágil da blockchain Ethereum.

Referências

Rede do Ethereum fica congestionada e especialistas indicam que Tether pode ser responsável [2019]

Rede Ethereum congestiona e transações demoram até 44 minutos [2020]

Falha causa problemas no blockchain Ethereum

English version: Why the “fast” Ethereum sync is so slow

Sobre @ Autor(@)
Publicado por decen{BR} - decen{BR} é nosso avatar coletivo, @ qual usamos na editoria do site. Normalmente, os conteúdos publicados pel@ decen{BR} são traduções de nosso site parceiro crypto.bi - (ou contribuições indiretas de um de seus autores). Confira nossa página Sobre (menu lateral) para conhecer a nossa equipe! Saiba Mais o Decen{BR}
Autor(a)
Publicado
25 de novembro de 2020
Atualizado
26 de novembro de 2020
Não rastreamos nossos usuários. Este site não emprega Javascript ou anúncios.