---
title: "Proteja seus nodes: migrando do Parity para o Geth"
description: "Um dos dois principais provedores de software de node Ethereum descontinuou o suporte ao seu cliente. Este guia de 8 passos compartilha as melhores práticas para migrar seus nodes para o Geth.n"
---

# Proteja seus nodes: migrando do Parity para o Geth

<ImageBlock
  src="https://media.alchemy.com/1703673175-post-parity-geth.jpg"
  alt="Migração do software de node Ethereum de Parity para Geth"
  width={2000}
  height={1005}
  caption="A Alchemy vai atualizar seu software de node Ethereum de Parity para Geth."
  priority
/>

O [ecossistema Ethereum](https://www.alchemy.com/dapps/ecosystem/ethereum) depende principalmente de dois provedores para a unidade fundamental de infraestrutura: os nodes. Uma dessas organizações, a Parity Technologies, anunciou que está focando em outras iniciativas e [descontinuando o desenvolvimento](https://www.parity.io/parity-ethereum-openethereum-dao/) do seu software de node para Ethereum. Nós, da Alchemy, decidimos recentemente migrar do Parity para a outra opção principal, o [Geth](https://geth.ethereum.org/), e sugerimos que você faça o mesmo, já que ele é ativamente desenvolvido por uma equipe dedicada. Migrar a infraestrutura core é uma tarefa crítica e cheia de nuances. A partir dos nossos anos de experiência em infraestrutura, dando suporte a grandes empresas ao redor do mundo na [Alchemy](https://dashboard.alchemy.com/signup?referral=affiliate:548fed5d-60b9-4530-89ef-28fa57ea280f), criamos este guia de migração do Parity para o [Geth](https://www.alchemy.com/overviews/what-is-a-geth-node-and-how-to-run-one) para compartilhar boas práticas e ajudar você a ter uma transição bem-sucedida. Compartilhar este guia com sua equipe de engenharia pode ajudá-los a navegar pelas particularidades dos nodes de blockchain e garantir que sua infraestrutura core continue funcionando sem problemas.

‍

# Contexto

Um resumo rápido do básico. Aplicações de blockchain precisam rodar servidores chamados "nodes", que permitem ler e escrever na blockchain. Você pode pensar neles como um banco de dados que armazena a blockchain.

Atualmente existem duas opções principais de software de node: [Parity](https://www.parity.io/) e [Geth](https://geth.ethereum.org/). Ambas as equipes que constroem e mantêm esse software de node open source prestaram um enorme serviço a todo o ecossistema blockchain, e a Ethereum não existiria sem elas. Ambas têm a profunda gratidão da equipe da Alchemy.

Recentemente, a equipe do Parity, que contribuiu massivamente para o crescimento do desenvolvimento da blockchain Ethereum desde o início, está agora [voltando o foco para sua própria chain](https://decrypt.co/14857/parity-steps-back-from-ethereum-moving-client-codebase-to-dao).

[Peter](https://twitter.com/peter_szilagyi) e toda a [equipe do Geth](https://github.com/ethereum/go-ethereum/graphs/contributors) fizeram um trabalho incrível construindo um cliente Ethereum de excelente qualidade e continuam ativamente desenvolvendo-o.

<ImageBlock
  src="https://media.alchemy.com/1704548121-chart-describing-the-distribution-between-the-ethereum-node-client-softwares.png"
  alt="Gráfico descrevendo a distribuição entre os softwares de cliente Ethereum."
  width={1159}
  height={688}
  caption="Distribuição de clientes de node Eth (ethernodes.org/)"
/>

Distribuição de clientes de node Eth \([ethernodes.org/](https://ethernodes.org/)\)

‍

# Por que você deveria migrar?

Nodes são a infraestrutura core de toda empresa de blockchain. Toda vez que seu sistema precisa ler ou escrever informações na blockchain, você usa seu node.

Comparados à infraestrutura web tradicional, os nodes de blockchain são significativamente mais complexos e demandam mais tempo para gerenciar. Além disso, configurar um novo node pode levar dias ou semanas devido ao tempo de sincronização. Isso significa que ter problemas com sua infraestrutura de node pode deixar seu produto fora do ar por semanas.

Para garantir que você tenha uma infraestrutura estável, robusta e escalável, rodar um cliente de node ativamente mantido é essencial.

A Parity Technologies gentilmente entregou o codebase do Parity Ethereum para a [OpenEthereum DAO](https://www.parity.io/parity-ethereum-openethereum-dao/), recém-criada, e estamos animados para ver os avanços feitos no software de node nesse meio verdadeiramente descentralizado. Em contrapartida, a Ethereum Foundation tem uma equipe dedicada em tempo integral para construir e melhorar continuamente o software no futuro previsível.

Usar um projeto ativamente desenvolvido significa que bugs, problemas de estabilidade, forks e outros desafios desconhecidos serão corrigidos prontamente e o software continuará melhorando. Nossa recomendação é considerar seriamente migrar sua infraestrutura de node para o Geth.

Esse é um processo bastante envolvido, então considere reservar de 2 a 4 semanas de tempo de engenharia para uma transição completa.

Por fim, se você preferir focar apenas na construção do seu produto core e não lidar com infraestrutura de node de baixo nível, [fale com a gente](http://alchemy.com). A Alchemy Blockchain Developer Platform foi arquitetada do zero para tornar extremamente fácil para todos construírem ótimos produtos de blockchain.

Certo, agora que você está por dentro, vamos começar a migração!
‍

# Como migrar do Parity para o Geth

## Os 8 passos

1. Remover a dependência de métodos de namespace específicos do Parity
1. Remover a dependência de campos de resposta **específicos** do Parity
1. Remover a dependência de respostas específicas da API para requisições inválidas
1. Remover a dependência de códigos de erro específicos do Parity
1. Configurar o hardware do Geth
1. Configurar o software do Geth
1. Executar simulações de tráfego específicas da aplicação nos nodes
1. Migrar o tráfego e monitorar o serviço

‍

### 1. Remover a dependência de métodos de namespace específicos do Parity

Parity e Geth implementam o conjunto genérico do protocolo JSON-RPC Ethereum estabelecido pela Ethereum Foundation, e então seus próprios métodos de API suplementares. Existem alguns métodos de namespace do parity, como _parity_allTransactions_, que retornam todas as transações pendentes do ponto de vista de um node Parity. Em termos de funcionalidade, deve haver equivalentes no Geth entre os diferentes pacotes. Em termos de tráfego para a Alchemy, a maior omissão no Geth é o módulo trace, cujos métodos foram movidos para o pacote[ debug](https://geth.ethereum.org/docs/rpc/ns-debug), onde você pode replicar métodos trace populares como _trace_replayTransaction_ com o análogo _debug_traceTransaction_.

‍

### 2. Remover a dependência de campos de resposta específicos do Parity

Apesar dos melhores esforços para uma implementação consistente, existem algumas pequenas diferenças. Verifique se você não depende de um campo que é omitido nas[ respostas do Geth](https://gist.github.com/kunal365roy/b43ace0b0644bfd8df64ea9f6995bb00). Já vimos casos reais em que as pessoas dependiam de certos campos, como o campo transactionLogIndex encontrado nos objetos logs de _eth_getLogs_.

De forma geral, notamos que o Geth tende a interromper e falhar em chamadas de execução mais longa para preservar a saúde de seus nodes.

‍

### 3. Diferenças nas respostas para requisições inválidas

Requisições formatadas corretamente que podem falhar na EVM \([Ethereum Virtual Machine](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm)\) por algum motivo podem se comportar de forma diferente. Verifique se você não depende de erros de execução da VM no Parity para requisições inválidas, já que geralmente retornarão um resultado 0x no Geth. Alguns exemplos de requisições inválidas abaixo:

- O parâmetro de número de bloco fornecido em _eth_call_ está pendente.
- Um intervalo de blocos em _eth_getLogs_ não pode ser encontrado no node
- Uma _eth_call_ que ultrapassa 5 segundos será automaticamente interrompida pela EVM.

‍

### 4. Códigos de erro específicos do Parity

Alguns mecanismos de retry de clientes dependem de códigos de erro específicos do Parity para informá-los sobre lógicas específicas. Verifique se você não depende de códigos de erro que possam[ mudar no Geth](https://gist.github.com/kunal365roy/3c37ac9d1c3aaf31140f7c5faa083932). Uma lista mais completa de códigos de erro JSON-RPC do Parity pode ser encontrada[ aqui](https://github.com/openethereum/openethereum/blob/master/rpc/src/v1/helpers/errors.rs#L39). Em geral, há uma perda de especificidade em alguns desses erros, então você precisará de alguma lógica do lado do cliente para tratar esses casos.

‍

### 5. Configurar o hardware do Geth

Os nodes do Geth devem conseguir rodar no mesmo hardware que você vinha usando para o Parity. Notamos alguns atributos importantes, discutidos com a equipe do Geth, que ajudarão a manter seu novo node Geth performático. Existem duas métricas de sistema a serem monitoradas de perto: **_porcentagem de CPU_** e **_iowaits_**, a taxa na qual o sistema está escrevendo em disco. Observamos fortes correlações entre essas métricas para nodes na prática quando eles começam a falhar em chamadas, ficar sem resposta, ou de forma geral entrar em um estado degradado. A porcentagem de CPU e o uso de iowait dependem do hardware que você está usando. Para uma instância[ EC2 m5.2x l](https://aws.amazon.com/ec2/instance-types/)arge, normalmente vemos desempenho degradado em torno de 65% de uso de CPU e 1 iowait/segundo para nodes archive.

‍

<ImageBlock
  src="https://media.alchemy.com/1704548307-graph-depicting-alchemy-internal-node-iowaits.png"
  alt="Gráfico mostrando os iowaits dos nodes geth internos da Alchemy."
  width={1243}
  height={259}
  caption="Iowaits dos Nodes Geth Internos da Alchemy."
/>

Iowaits do Node Geth Interno da Alchemy
‍

### 6. Configurar o software do Geth

Embora raro, já vimos casos em que nodes Geth ficam travados sincronizando em intervalos aleatórios \(número de bloco desconhecido\). Nesses casos, paciência é a virtude principal, e o node eventualmente começará a sincronizar em algumas horas.

Iniciar o processo do Geth tem algumas particularidades que discutiremos a seguir. Existem muitas opções de flags que o Geth especifica. A flag **--pprof** tem muitas métricas úteis que dão insight sobre a saúde do node, como sua contagem de peers, o _tx_pool_, e muitas outras informações úteis expostas na porta 9090 por padrão. Outro ponto importante a notar é especificar o sinal de encerramento como KillSignal=SIGINT. Percebemos que o Geth tinha problemas ao reiniciar, onde ele voltava para o último bloco, já que não estava descarregando corretamente os blocos em memória ou o estado para o disco persistente no shutdown.

‍

### 7. Executar simulações de tráfego específicas da aplicação nos nodes

Vimos alguns métodos no Geth que têm os mesmos formatos de requisição/resposta, mas se comportam de forma ligeiramente diferente da versão do parity. Um caso real que observamos é o seguinte: _eth_gasPrice_ e outros métodos que dependem de estimativas de gasPrice, como _eth_estimateGas_, no Geth utilizam um modelo de estimativa que tende a resultar em previsões de gasPrice mais baixas do que no Parity. Isso resulta em falhas inesperadas de transação, como: Transaction gas price supplied is too low. There is another transaction with the same nonce in the queue. Try increasing the gas price or incrementing the nonce. Você pode mitigar isso aumentando a margem do gas price, ou usando outras fontes de terceiros, como o[ ](https://ethgasstation.info/)[Eth Gas Station](https://ethgasstation.info/) para obter suas estimativas de preço.

‍

### 8. Migrar o tráfego e monitorar o serviço

Finalmente chegou a hora de fazer a migração! Direcione seu tráfego para o Geth e monitore-o cuidadosamente por alguns dias. Se você encontrar qualquer outro problema inesperado, sinta-se à vontade para entrar em contato com a equipe do Geth ou falar com a gente.

‍

## Quer uma forma mais fácil de migrar?

Esperamos que este guia tenha sido útil para ajudar a navegar pelo processo de migração do Parity para o Geth! Se você tiver dúvidas ou desafios, sinta-se à vontade para entrar em contato conosco - estamos aqui para ajudar.

Além disso, se você quiser turbinar seu desenvolvimento com uma plataforma que torna significativamente mais fácil construir e lançar aplicações de blockchain sem precisar lidar com tarefas de baixo nível como gerenciar nodes, fale com a gente!

Na Alchemy, criamos a [Blockchain Development Platform](http://alchemy.com) do zero para facilitar a vida dos desenvolvedores. Agora, através de um poderoso conjunto de ferramentas de desenvolvimento, suporte 24/7 e uma nova plataforma de infraestrutura de blockchain escalável globalmente, você pode [economizar milhares de horas](https://www.alchemy.com/case-studies) de desenvolvimento, tornar sua aplicação [107x mais confiável](https://www.alchemy.com/case-studies/kyber-network), e criar [produtos muito melhores](https://alchemy.com/case-studies/augur) [para seus usuários](https://alchemy.com/case-studies/zeroex). Sinta-se à vontade [para entrar em contato](https://www.alchemy.com/contact-sales) e saber mais!

Boa sorte com sua migração para o Geth.

É 2020. Mantenha-se saudável e mantenha seus nodes saudáveis!

‍

---

*Cadastre-se para uma conta gratuita da Alchemy [aqui](https://dashboard.alchemy.com/signup?referral=affiliate:548fed5d-60b9-4530-89ef-28fa57ea280f).*

‍

#### Sobre a Alchemy

A [Alchemy](https://dashboard.alchemy.com/signup?referral=affiliate:548fed5d-60b9-4530-89ef-28fa57ea280f) fornece a principal Blockchain Development Platform, dando suporte a produtos usados por milhões de usuários em 197 países. O motor de infraestrutura inovador da Alchemy Platform e seu conjunto incomparável de ferramentas de desenvolvimento permitem que criadores construam facilmente ótimos produtos baseados em blockchain em uma fração do tempo. Apoiada pela Stanford University, [Coinbase](https://www.alchemy.com/dapps/coinbase), o presidente do Google, Charles Schwab, e importantes executivos de tecnologia e finanças, a equipe traz profundo conhecimento em desenvolvimento de blockchain e infraestrutura massivamente escalável, por meio de décadas de experiência em gigantes da tecnologia como Google, Microsoft e Facebook.
