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, timestamp
determina 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!
Latest comments (0)