---
title: "O que é um nó Geth e como executar um"
description: "Requisitos, instalação e implantação"
---

## Introdução ao Geth e nós

[Nós Ethereum](http://www.alchemy.com/overviews/what-is-an-ethereum-node) são computadores que fazem parte da rede blockchain Ethereum. Esses nós são computadores reais que executam software que verifica, armazena e, às vezes, cria blocos.

"Client" é o nome do software em si. Ele nos permite interagir com a blockchain através de uma API JSON-RPC, ler e verificar a blockchain, e ler ou escrever em smart contracts.

Geth é um desses clients e um dos mais populares. É escrito na linguagem de programação Go e mantido atualizado por um grupo de pessoas que trabalham para a Ethereum Foundation e outras que colaboram.

**Algumas características do Geth:**

- Vem com um console JavaScript que pode ser executado com "geth console".
- O client funciona com outros clients JavaScript \(web3js\).
- A testnet Rinkeby já vem integrada \(ou você pode montar sua própria rede Ethereum privada\)
- Costuma ser considerado o padrão de referência para outros nós Ethereum.

Neste post do blog da Alchemy, vamos aprender a instalar e executar um nó Geth.

## Redes \(Mainnet vs testnet\) e Geth

Para entender os nós Geth, precisamos entender as diferentes redes do Ethereum.

O Ethereum possui uma única rede principal \(Mainnet\) onde todas as transações acontecem, mas também usa uma série de [outras redes de teste](https://www.alchemy.com/overviews/what-are-testnets) criadas para testar funcionalidades \(Testnet\). Considere usar essas blockchains de "teste" para experimentar recursos da blockchain fora do seu localhost.

### 1. Mainnet

A [mainnet do Ethereum](https://www.alchemy.com/rpc/ethereum) é a rede usada para gerar Ethereum. O ETH pode ser minerado ou negociado em exchanges, e está sempre disponível.

### 2. Ropsten

Ropsten é uma rede de teste que mais se aproxima da mainnet. É baseada no mesmo proof of work. Essa [rede de teste Ropsten](https://www.alchemy.com/overviews/ropsten-testnet) é vulnerável a ataques de spam, já que o ETH de teste é minerado da mesma forma que o ETH da Mainnet e é fácil de obter, sem valor real.

### 3. Rinkeby

A testnet Rinkeby usa proof of authority, o que significa que você não conseguirá obter ETH de teste a menos que consiga provar quem você é. Isso é feito vinculando um endereço Ethereum a uma conta de rede social, como o Facebook. Isso torna muito mais difícil atacar a rede, já que obter uma grande quantidade de ETH exige um esforço significativo. A Rinkeby só pode ser acessada por nós Geth.

Para começar a construir na testnet Rinkeby, [obtenha Rinkeby Ether em um faucet gratuito](https://rinkebyfaucet.com/).

### 4. Kovan

A principal diferença é que a Kovan está disponível apenas em nós parity, e você precisa usar o GitHub para verificar sua identidade.

### 5. Goerli

A Goerli foi implantada sob o framework Proof-of-Authority. Ela usa a técnica de consenso Clique, desenvolvida inicialmente por Chainsafe e Afri Schoedon. A rede Goerli é mantida pela comunidade e conta com o suporte de Geth, Parity, [Nethermind](https://www.alchemy.com/dapps/nethermind) e Hyperledger Besu. A Goerli tem um tamanho de rede, número de nós e variedade de clients maiores do que a Kovan e a Rinkeby.

Saiba [como obter Goerli Ether](https://goerlifaucet.com/) e use o [faucet GoETH](https://goerlifaucet.com/) da Alchemy para começar na rede de teste Goerli.

### 6. Kiln

No momento em que este texto foi escrito, muitas das testnets acima serão descontinuadas/atualizadas em razão do avanço do Ethereum rumo ao merge do proof of stake ainda este ano. Atualmente, a testnet Kiln é a última testnet pública antes da mudança para o proof of stake.

Essa mudança é uma conquista significativa para a rede Ethereum, que está prestes a passar por algumas das mudanças mais importantes desde sua criação. Assumindo que não haja problemas com a Kiln, as testnets atuais do Ethereum \(Goerli, Ropsten, e assim por diante\) poderão continuar funcionando sem interrupções.

Saiba mais sobre a [testnet Kiln](https://www.alchemy.com/overviews/kiln-testnet) e [obtenha Kiln Ether fictício](https://kilnfaucet.com/) para começar a construir na Kiln.

## O que é um nó Geth?

<ImageBlock
  src="https://media.alchemy.com/1704166765-geth-node.png"
  alt="Diagrama dos tipos de nós do Geth: nós light, full e archive na Ethereum"
  width={1224}
  height={602}
/>

Com o Geth, você pode montar sua própria rede Ethereum privada. A blockchain de uma rede Ethereum começa com um bloco raiz conhecido como bloco gênesis. Não há transações no bloco gênesis.

Existem diferentes tipos de nós Ethereum, mas os nós Geth se dividem em três categorias: light nodes, full nodes e archive nodes.

### _Light nodes_

Como não validam todos os blocos, os light nodes não mantêm uma cópia da blockchain Ethereum. Por isso, dependem de dados dos full nodes. Executar light nodes tem várias vantagens, incluindo inicialização mais rápida, menor uso de armazenamento e menos necessidade de processamento/memória. Os light nodes têm um nível de confiança menor e muitas vezes dependem dos full nodes, o que pode ser um problema.

Light nodes:

- Armazenam a cadeia de headers e solicitam o restante conforme necessário.
- Verificam a validade dos dados em relação às state roots nos headers dos blocos.
- Oferecem uma solução para dispositivos de baixa capacidade, como dispositivos embarcados ou celulares, que não conseguem armazenar gigabytes de dados da blockchain.

### _Full nodes_

Os full nodes verificam se as transações nos blocos seguem os padrões descritos no [Ethereum Yellow Paper](https://ethereum.github.io/yellowpaper/paper.pdf). Fazem isso para garantir que os blocos transmitidos pela rede sejam genuínos. É possível confiar no trabalho deles. Essa técnica de verificação é usada pelos full nodes para manter a rede em conformidade com os requisitos do Ethereum.

Full nodes:

- Armazenam todos os dados da blockchain.
- Participam da validação de blocos e verificam todos os blocos e estados.
- Derivam todos os estados.
- Atendem a rede e fornecem dados sob demanda.

### _Archive nodes_

Um archive node é um nó que salva todo o histórico de transações. A saúde e a estrutura da rede dependem desses nós.

Archive Nodes:

- Armazenam tudo o que é mantido pelo full node e constroem um arquivo de estados históricos. Isso é necessário se você quiser consultar saldos de contas ou qualquer dado on-chain, ou simplesmente testar seu próprio conjunto de transações de forma confiável sem minerá-las usando o [OpenEthereum](https://ethereum.org/en/developers/docs/nodes-and-clients/#:~:text=Stores%20everything%20kept,and%20chain%20analytics.).
- Fornecem dados que representam unidades de terabytes. Isso os torna menos atrativos para usuários comuns, mas úteis para serviços como block explorers, fornecedores de wallets e análise de dados on-chain.

<ImageBlock
  src="https://media.alchemy.com/1704166787-pow-consensus.png"
  alt="Diagrama de nós Ethereum alcançando consenso de proof-of-work na rede"
  width={1079}
  height={493}
  caption="source: https://ethereum.org/en/developers/docs/nodes-and-clients/"
/>

‍

## Requisitos para instalar o Geth

- CPU multi-core \(7GB\+ de RAM\)
- Drive SSD local com pelo menos ~600GB\+ de espaço livre
- OPCIONAL Use CPU com 16/32 GB\+ para desempenho otimizado por meio de cache. Ao usar os recursos de cache \(ou seja, usando a flag '--cache'\), o Geth conseguirá obter o estado a partir da memória em vez do disco rígido.
- [Homebrew](https://formulae.brew.sh/formula/ethereum) para usuários de Mac
- [PPA](https://launchpad.net/~ethereum/+archive/ubuntu/ethereum) para Linux/Ubuntu
- OPCIONAL Parity \(para mais informações, [saiba como migrar do parity para o Geth](https://hub.docker.com/r/ethereum/client-go/)\)‍

## Métodos de instalação do Geth

Você pode instalar o Geth via gerenciador de pacotes, via homebrew no MacOS ou PPA no Ubuntu, baixá-lo diretamente, executá-lo em um [docker](https://hub.docker.com/r/ethereum/client-go/), ou até [compilá-lo a partir do zero](https://github.com/ethereum/go-ethereum).

### Homebrew usando o terminal do MacOS:

<CodeSnippet
  code={`\$ brew tap ethereum/ethereum
\$ brew install ethereum`}
  language="text"
  theme="light"
/>

Confira uma lista de diferentes comandos úteis [aqui](https://hub.docker.com/r/ethereum/client-go/) \(abigen, bootnode, checkpoint-admin, clef, devp2p, ethkey, evm, faucet, geth, etc.\) ou você também pode executar:

<CodeSnippet code={`\$ geth --help`} language="text" theme="light" />

### PPA para linux/ubuntu:

<CodeSnippet
  code={`\$ sudo add-apt-repository -y ppa:ethereum/ethereum`}
  language="text"
  theme="light"
/>

### Instale a versão estável do go-Ethereum:

<CodeSnippet
  code={`\$ sudo apt-get update
\$ sudo apt-get install ethereum`}
  language="text"
  theme="light"
/>

### Docker:

Baixe o Docker [aqui](https://hub.docker.com/r/ethereum/client-go/). Depois execute o seguinte:

<CodeSnippet
  code={`\$ docker pull ethereum/client-go:latest`}
  language="text"
  theme="light"
/>

E então execute:

<CodeSnippet
  code={`\$ docker run ethereum/client-go:latest`}
  language="text"
  theme="light"
/>

## Execute o Geth

Execute este comando em um terminal no local onde descompactamos a pasta do Geth/pasta raiz para que possamos executá-lo:

<CodeSnippet
  code={`\$ ./Geth console --testnet --syncmode "light" --rpc --rpcaddr "localhost" --rpcport "8485" --rpccorsdomain "*" --rpcapi="db,eth,net,web3,personal"`}
  language="text"
  theme="light"
/>

Isso nos levará diretamente ao console do Geth.

Digitando `net`, podemos ver se temos algum peer. Digitando `eth.syncing`, podemos ver se o nó está sincronizando no momento. É possível que seu nó não comece a sincronizar até que você o reinicie.

Por exemplo, executar `eth.syncing` vai gerar a seguinte consulta de exemplo:

<ImageBlock
  src="https://media.alchemy.com/1704167169-eth-syncing-output.svg"
  alt="Saída do console do Geth de uma consulta eth.syncing mostrando o progresso da sincronização de blocos"
  width={1570}
  height={393}
/>

## Considerações finais

O Geth já costuma estar incluído na maioria das wallets web/extensão disponíveis para uso do consumidor \([MetaMask](https://www.alchemy.com/dapps/metamask), [Coinbase](https://www.alchemy.com/dapps/coinbase), Rainbow, etc\).

Mas instalar e executar o Geth vale bastante a pena se você quiser experimentar com mineração ou desenvolver seu próprio software Ethereum personalizado. Também é útil se você simplesmente quiser controlar seu próprio nó e a chave da sua wallet \(assinando suas próprias transações em vez de depender de software de terceiros\). Usando o Geth, você abre um mundo inteiro de desenvolvimento Ethereum!
