decen{BR}

Por que a sincronização Ethereum “rápida” é tão lenta?

Por que a sincronização geth é tão lenta?

Eu continuo ouvindo esta pergunta com frequência, de operadores de nó Ethereum. Por que ainda é tão difícil sincronizar totalmente um nó completo Ethereum?

Geth lento

Os usuários têm reclamado sobre a sincronia geth notoriamente lenta na carteira oficial Ethereum.

Alguns até questionam o nível de capacidades de dimensionamento de uma criptomoeda que requer várias centenas de gigabytes de espaço no disco rígido e que pode levar semanas para sincronizar totalmente com o resto da rede.

Enquanto geth sincroniza, administradores de nós Ethereum completos podem acabar vendo uma tela, como a abaixo, por um tempo muito longo:

Otimização de sincronização rápida

Existem inúmeros argumentos válidos no campo “Ethereum sync is too slow” — e os desenvolvedores do núcleo Ethereum tomaram nota do problema.

Desde então, eles criaram um modo de cliente leve e descontinuaram o switch “—fast” antigo, adotando um novo algoritmo usando o switch de linha de comando—syncmode “fast”.

Mas essas mudanças não resolveram o problema. Nós completos Ethereum ainda são notoriamente difíceis de sincronizar.

Por que isso acontece?

Como você pode mitigar os efeitos? Neste artigo, discutimos alguns problemas conhecidos, por que eles acontecem e como você pode tentar contorná-los.

Problemas conhecidos

Existem atualmente alguns problemas conhecidos que tornam a sincronização Ethereum muito lenta:

  • Os clientes têm dificuldade em encontrar pares. Ethereum é P2P, como bit torrent. Quando há poucos pares com conexões lentas, as taxas de transferência podem ser muito baixas e a transferência pode até parar.
  • Ethereum não mostra um medidor de progresso por bloco ou transferência de estrutura, ele só aumenta o contador quando uma transferência de estrutura/bloco é feita. Os usuários então relatam “ter o mesmo bloco na tela por dias”. Isso ocorre porque o download para o próximo bloco está demorando muito tempo e não há indicação de progresso para a transferência incompleta.
  • Spam na blockchain. Houve muitos ataques a Ethereum (como acontece com todos os outros criptomoeda popular)
  • Ao contrário do Bitcoin e seu tamanho de bloco de 1 MB, o tamanho do bloco Ethereum não é limitado. Alguns blocos são gigantescos. (Observe a dissonância com o movimento “bloco maior” na comunidade Bitcoin?)
  • Nós atrás do NAT. Os nós completos precisam servir o mesmo bandwitdh que solicitam da rede. Quando isso não acontece, temos o que a comunidade Torrent chama de “sanguessugas”.
  • O algoritmo “rápido” requer que toda a estrutura da cadeia seja baixada, por bloco, antes de processar o bloco.

Vamos dar uma olhada rápida em cada um desses fatores.

Encontrando Pares

Há muito pouco que podemos fazer sobre este problema. Descobrir pares iniciais é uma dificuldade inerente em todas as redes P2P. Houve outros sistemas P2P totalmente descentralizados e a maioria também foi notoriamente lenta quando incapaz de iniciar conexões iniciais para pares suficientes na rede.

Houve sistemas anônimos descentralizados como Freenet (que ainda existe BTW), mas que também são muito lentos porque dependem de nós conversando diretamente uns com os outros para trocar informações em grande escala. Não há um nó centralizado rápido ajudando a rede em um sistema verdadeiramente P2P.

Muitos nós também são executados em conexões de internet lentas e limitadas. Quando você se conecta a um nó lento, ele arrastará toda a operação de sincronização mais lenta até que seu nó detecte uma conexão de atraso e tente um par diferente.

Não há nada que você possa fazer para evitar conectar-se a nós lentos pela primeira vez. Quando você encontrar um nó muito lento ou incorretamente em execução, você pode colocá-lo na lista negra ou colocá-lo em quarentena em sua lista de pares local. Mas é impossível saber que é um nó lento antes de se conectar a ele pelo menos uma vez.

Spam

O spam é um problema em todas as tecnologias baseadas em multidões relacionadas à Internet. Seja um chat Telegram, IRC, fóruns ou até mesmo criptomoedas, spam está em toda parte. Mas cada operação de spam deve ser rentável, caso contrário, não haveria incentivo para isso.

Qual é o incentivo para o spam de blockchain de criptomoedas? A resposta é geralmente promover uma criptomoeda rival.

Vimos ataques de spam contra Bitcoin, Ethereum e contra todas as outras moedas mineráveis e top 100 ranqueadas. Os ataques de spam geralmente consistem em enviar milhões de pequenas transações que entopem a rede e preenchem o mempool de transações não confirmadas. Pode haver outros ataques mais sofisticados, mas o mais simples geralmente é o que retarda toda a rede.

Quando esse tipo de ataque é perpetrado por atores com alta largura de banda e muito dinheiro e recursos, eles são quase impossíveis de desviar. Mas mesmo assim, Bitcoin e Ethereum enfrentaram a maioria dos bombardeios recebidos, especialmente ao longo de 2017, quando muito dinheiro começou a temer a propagação de criptomoedas.

Tamanho do bloco

Se houver um bom argumento contra o aumento do tamanho do bloco no blockchain Bitcoin, então Ethereum deve ser ele.

Os blocos Ethereum podem ser de qualquer tamanho arbitrário, limitados apenas pelo próprio limite de GAS.

GAS é uma medida dos recursos computacionais gastos no processamento de transações Ethereum (incluindo interação inteligente contrato).

Um contrato maior e mais complexo requer mais GAS do que um pequeno e simples contrato.

GAS é a moeda de computação no “computador mundial” composto por todos os nós Ethereum.

Quando um contrato é muito grande e complexo, exigirá grandes quantidades de GÁS, que é em si negociado pela Ethereum.

A quantidade de GAS limita a quantidade de contratos e transações contidos em um bloco. Portanto GAS indiretamente limita o tamanho físico dos blocos Ethereum.

NAT

Como todos sabemos, o espaço de endereços IPv4 foi esgotado.

Consequentemente, uma parte imensa da Internet fica atrás dos roteadores NAT. NAT é uma maneira de multiplexar N IPs privados em um ou alguns IPs públicos enfrentando.

É assim que a maioria dos provedores de internet é capaz de oferecer acesso a computadores domésticos. O próprio provedor tem uma pequena gama de IPs que adquire de um operador de backbone, e esses IPs são distribuídos aos seus clientes. Um pequeno IP provedor de internet pode servir milhares de IPs privados não roteáveis.

O problema com o NAT é que deve limitar que tipo de tráfego pode alcançar os computadores dos clientes do ISP.

Imagine que se não houvesse filtragem, os arquivos de todos e configurações inseguras estariam abertos ao mundo. Isso, de fato, já foi explorado por hackers antes. Por exemplo, quando as impressoras mundiais começaram a cuspir desenhos engraçados, porque os hackers encontraram milhares de impressoras abertas e compartilhadas em redes não filtradas!

Então NAT está lá para nos ajudar. Mas há uma captura.

NAT é terrível para redes P2P.

As redes P2P devem ser tão simétricas quanto possível, o que significa que, quando um nó é baixado em 2 megabytes/s, ele também deve fazer upload a 2 MB/s. Quando isto não acontece, os carregadores executam rapidamente fora da largura de banda e a rede P2P retarda.

A maioria dos nós completos Ethereum possuem por trás firewalls NAT fortemente filtrados e há muito pouco os desenvolvedores principais podem fazer sobre isso.

O Algoritmo Rápido

Finalmente, há o novo algoritmo de sincronização rápida.

Não vamos entrar nos detalhes de como isso funciona, mas o que você deve saber é que esse algoritmo requer que a estrutura da cadeia completa seja baixada antes que cada bloco possa ser comprometido com o banco de dados blockchain local.

Como já mencionamos, alguns blocos são gigantescos e levam dias para baixar totalmente toda a estrutura da cadeia. Embora essa estrutura da cadeia não termine o download, a contagem de blocos fica congelada. Os usuários geralmente relatam isso como um bug ou como “carteiras congeladas”, mas o fato é que, se você olhar para os logs geth subjacentes, você verá que ele está baixando a estrutura da cadeia para o bloco em segundo plano.

Isto, combinado com a rede NAT-filtrada e a dificuldade de encontrar pares, pode tornar a sincronização muito lenta.

Soluções?

Então, o que você pode fazer sobre esses problemas conhecidos? Embora não haja receita definitiva, aqui estão algumas dicas para ajudá-lo a acelerar sua sincronização completa do nó Ethereum.

  • Perceba que a natureza do P2P não é determinista. Ou seja, se você reiniciar o cliente do geth, você pode obter um conjunto totalmente diferente de pares que pode ser muito mais rápido (ou mais lento) do que os pares que você tinha antes. Portanto, reiniciar o geth obtém as coisas resolvidas às vezes. Isso pode parecer pouco intuitivo, mas simplesmente reiniciar o geth funciona às vezes.
  • Você pode alugar temporariamente uma instância da Amazon AWS ou outro VPS e sincronizar o blockchain a partir de sua rede de velocidade gigabyte e, em seguida, baixar a cadeia para o seu PC. Isso requer algum conhecimento técnico, mas ele faz você sair do bloqueio NAT e baixar a cadeia de servidores da Amazon será mais rápido do que o sistema P2P. Se você fizer isso, certifique-se de criar uma carteira nova e vazia na instância da AWS, não envie sua carteira pessoal para lá. Mais tarde, você pode excluir essa carteira temporária, sem riscos envolvidos.
  • Aumente o parâmetro de linha de comando —cache para 1024 ou algum valor maior. O tamanho do cache padrão é minúsculo e alguns usuários relatam aumentos consideráveis de velocidade usando esse truque.
  • Use o interruptor de linha de comando —nat none geth. Isso permitirá que o geth saiba que não é suposto assumir conexões livremente recebidas.

Tenha em mente que você pode usar Ethereum sem ter que baixar todo o blockchain para o seu computador.

Carteiras on-line como MyEtherWallet oferecem funcionalidade completa sem exigir um nó completo.

A troca de usar uma carteira fina é alguma perda de confiança: você deve confiar que a cadeia contida no nó ao qual está conectado será o blockchain oficial da rede Ethereum.

Caso contrário, este nó confiável poderia rotear temporariamente suas transações em outro lugar ou até mesmo transmitir TX inválidos.

Nenhum caso foi relatado para MyEtherWallet que eu conheço.

Nunca sabemos quando uma rede pode ser comprometida, por isso tenha em mente que a única maneira segura e legitimamente descentralizada de usar qualquer criptomoeda, incluindo Ethereum, é executar um nó completo que é 100% em sincronia.

Esperamos que isso esclareça algumas perguntas sobre a sincronização lenta do Ethereum!

Referências

Obtendo fundo em Geth: Por que sincronizar o nó Ethereum é lento

Geth sincronização completa tão lento #19486

Geth 1.4.18 sincronização é muito lenta #3207

Ethereum Carteira/GETH incrivelmente lento para sincronizar, ajuda?

Geth é muito lento para sincronizar após o bloco ~2420000

Problemas de sincronização da Carteira Ethereum

Versão PT: Por que o sync do Ethereum é tão lento?

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}