Sumário
- Ativando uma instância de EC2
- Configuração do nó Geth
- Geração da Conta
- Configuração inicial do Geth
- Habilite o Acesso HTTPS para o Nó Geth usando NGINX
- Conclusão

O ecossistema de desenvolvimento Ethereum continua evoluindo e crescendo e sua recente migração de Prova de Trabalho (Proof-Of-Work) para o mecanismo de consenso de Prova de Participação (Proof-Of-Stake) tem sido um sucesso total.
Entretanto, o desenvolvimento de um Aplicativo Descentralizado (DApps) na Ethereum pode ser caro, dado que serviços de terceiros como Infura ou Alchemy, que oferecem acesso à blockchain, estão se tornando caros para fins de desenvolvimento e a maioria das plataformas faucet não aloca tokens da testnet suficientes, uma vez que eles têm que atender a todos os pedidos.
Devido às várias razões mencionadas acima, administrar seu nó privado da Ethereum para desenvolvimento pode ser prático e econômico.
Para aproveitar ao máximo este tutorial, inscreva-se em uma conta gratuita AWS (Amazon Web Services) usando este link.
Ativando uma instância de EC2
Faça o login na sua conta AWS, procure por AWS EC2 em seu console e clique na instância de lançamento. Selecione o servidor Ubuntu e clique em next.

Prossiga com o nível gratuito selecionado.

Mantenha a seguinte configuração como padrão e clique em next.

Atualize as regras de segurança, permitindo o tráfego de entrada para a porta 30303 do TCP e UDP e também abra as portas 80 e 443 do TCP para acesso externo ao nó JSON-RPC API.

Antes de lançar nossa instância, vamos criar e baixar nosso par de chaves de instância. Uma vez baixado, coloque-o sob as portas do diretório ~/.ssh.

Abra seu terminal e execute o seguinte comando:
chmod 400 <YOUR KEY PAIR PATH>
chmod 400 ~/.ssh/my-ec2-rsa.pem
Depois disso, execute o próximo comando para se conectar ao servidor localmente.
ssh -i "<YOUR KEY PAIR PATH>" <YOUR EC2 INSTANCE PUBLIC IPv4 DNS>
ssh -i "~/.ssh/my-ec2-rsa.pem" [email protected]
Configuração do nó Geth
Vamos instalar o Geth a partir do repositório oficial, executando os seguintes comandos:
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
Execute o seguinte comando mkdir -p dev-node/private sob o diretório raiz da instância EC2 para criar uma pasta que será usada como banco de dados para armazenar configurações de nós e contas geradas.
Crie um arquivo no diretório dev-node/private chamado genesis.json e adicione o seguinte conteúdo:
O arquivo genesis.json contém um conjunto de configurações em que o chainId é usado para prevenir ataques de repetição através de canais, nonce para inicializar a blockchain, timestampdetermina quando o bloco foi gerado , difficulty define quão difícil é extrair um novo bloco (sempre defini-lo baixo a fim de evitar longas esperas na mineração), gasLimit define o limite do custo do gas por bloco, coinbaseé usado como endereço para coletar recompensas de mineração e alocar contas Ether pré-alocadas. Você pode ler mais sobre outros parâmetros aqui.
Uma vez que a genesis.json é criada e configurada como acima, execute o comando abaixo a fim de inicializar a configuração. Certifique-se de que você está executando o comando no diretório dev-node/private.
geth --datadir . init genesis.json
Após uma execução bem sucedida, dois arquivos (get & keystore) serão gerados no diretório dev-node/private.
##Geração da Conta
Vamos gerar uma conta que irá recolher as recompensas da mineração. Execute o comando abaixo no diretório dev-node/private e defina a senha após ter sido solicitado a fazê-lo.
geth --datadir . account new
Você pode listar as contas geradas executando este comando:
geth --datadir . account list
Crie outro arquivo chamado password.txt em dev-node/private onde você pode adicionar a senha da conta.
Configuração inicial do Geth
Agora execute sudo vi /lib/systemd/system/geth.service e acrescente o seguinte conteúdo:
[Unit]
Description=Geth Full Node
After=network-online.target
Wants=network-online.target
[Service]
WorkingDirectory=/home/ubuntu
User=ubuntu
ExecStart=/usr/bin/geth --mine --miner.threads 2 --datadir ~/dev-node/private --http --http.api personal,eth,net,web3,txpool --networkid 1337 --port 30303 --http.corsdomain '*' --http.vhosts '*' --http.port 8545 --allow-insecure-unlock --unlock "add-your-generated-account-address" --ipcpath ~/.ethereum/geth.ipc --password /home/ubuntu/dev-node/private/password.txt
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
Em resumo, habilitamos o processo de mineração usando duas threads (linhas), especificando a localização dos arquivos de configuração, definindo 1337 como o id da rede, etc... Você pode seguir este link para ler mais sobre as diferentes bandeiras (flags) especificadas neste comando inicial.
Agora você pode habilitar e iniciar o serviço Geth, executando:
sudo systemctl enable geth
sudo systemctl start geth
E você pode ver o registro do processo de mineração executando isto:
sudo journalctl -f -u geth
Você obtém o número de bloco atual executando este comando a partir de seu terminal de instância EC2
curl -X POST http://127.0.0.1:8545 \
-H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0", "method":"eth_blockNumber", "id":1337}'
Habilite o Acesso HTTPS para o Nó Geth usando NGINX
No momento, o nó só é acessível de dentro da instância EC2. Com a ajuda do Nginx, seremos capazes de expor, com segurança, o API ao público.
Você vai precisar de um domínio para implementar esta solução. Pode ser um domínio raiz ou um subdomínio. Você tem que adicionar um registro A DNS apontando para o IP de sua instância EC2.
Vamos instalar os pacotes necessários dentro da instância
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python3-certbot-nginx
Agora você pode gerar um certificado SSL e a configuração inicial do Nginx, executando:
sudo certbot --nginx -d your-domain-name.com
O pacote certbot que instalamos também cuidará da renovação automática do certificado para nós, adicionando um timer de sistema que funcionará duas vezes por dia e renovará automaticamente qualquer certificado que esteja dentro do prazo de expiração de trinta dias.
Você pode consultar o status do timer com este comando:
sudo systemctl status certbot.timer
Agora você precisa editar o arquivo de configuração Nginx /etc/nginx/sites-enabled/default:
A diretriz proxy_pass é utilizada para representar o tráfego de uma porta HTTPS criptografada 443 para a porta 8545 do nó Geth em nossa instância EC2, sem expô-lo publicamente.
Para verificar se a configuração está correta:
sudo nginx -t
E reinicie o processo Nginx para efetuar as mudanças:
sudo service nginx restart
Podemos testar se tudo está funcionando como esperado, tentando obter o número do bloco
curl -X POST https://your-domain-name.com \
-H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0", "method":"eth_blockNumber", "id":1337}'
Você deve ser capaz de obter o número de bloco atual após executar o comando acima. Com o RPC https://your-domain-name.com e o identificador da cadeia 1337, podemos configurar nossa rede na MetaMask.
Conclusão
Devido às limitações ou às vezes ao custo associado ao uso de servi��os de terceiros como Infura ou Alchemy, administrar seu nó privado pode ser a única opção, apesar dos desafios de sua configuração.
Neste artigo, conseguimos cobrir a maioria das configurações importantes que se pode precisar para executar um nó privado em uma instância do EC2.
Esse artigo foi escrito por Verdotte Aututu e traduzido por Fátima Lima. Seu original pode ser lido aqui.
Abrace a oportunidade de elevar sua jornada de desenvolvimento para um nível superior. Executar um nó privado no Ethereum é apenas o começo; os builds incríveis da WEB3DEV representam a chave de entrada para o emocionante cenário web3. 🚀🧑💻
Não perca tempo, 👉inscreva-se👈 agora mesmo e comece a desbravar o universo Blockchain! Seja também WEB3DEV!