Nesta postagem, você aprenderá a implantar um ambiente de desenvolvimento baseado em nuvem para criar, testar e implantar contratos inteligentes na rede de teste pública Ethereum Goerli por meio de um nó completo dedicado Ethereum gerenciado usando o Amazon Managed Blockchain. Você também pode usar as etapas descritas nesta postagem para criar um ambiente de desenvolvimento na rede principal da Ethereum e em outras redes de teste públicas compatíveis com o Managed Blockchain.
Todo desenvolvedor que deseja criar um aplicativo descentralizado (dApp) que utiliza a rede Ethereum, incluindo componentes on-chain, como contratos inteligentes, e componentes off-chain, como um aplicativo front-end em React, precisa utilizar ferramentas de desenvolvimento padrão do setor, como Ethers.js e Hardhat. No entanto, a configuração de um ambiente de desenvolvimento para começar a construir pode levar um tempo considerável, especialmente para aqueles que estão apenas começando a usar essas ferramentas.
Visão geral da solução
- Amazon EC2 - O Amazon Elastic Compute Cloud (Amazon EC2) oferece capacidade de computação segura e redimensionável para praticamente qualquer carga de trabalho. Ele oferece uma ampla variedade de famílias de instâncias de computação para atender ao seu caso de uso específico. Nesta postagem, uma instância do EC2 executando o Amazon Linux 2 serve como a computação principal para seu ambiente de desenvolvimento da Ethereum e se conecta ao nó completo da Ethereum no Managed Blockchain.
- Visual Studio Code - O Visual Studio Code é um ambiente de desenvolvimento integrado (IDE) popular para desktop, usado para desenvolver, testar e depurar códigos em praticamente qualquer linguagem de programação. Com um plug-in do VS Code, você pode conectar o IDE do VS Code diretamente a uma instância remota do EC2, o que permitirá que você escreva código no VS Code e teste-o diretamente na instância do EC2.
- Amazon Managed Blockchain - O Managed Blockchain é um serviço totalmente gerenciado que permite implantar rapidamente uma infraestrutura de blockchain de nível de produção com apenas alguns cliques, incluindo nós Ethereum de instância única para interagir com a rede principal e as redes de teste públicas da Ethereum. Com um nó completo dedicado para se conectar às redes públicas da Ethereum (Mainnet, Goerli e Rinkeby), você pode ler dados da blockchain, transmitir transações e assinar eventos na blockchain. O Managed Blockchain para Ethereum faz o trabalho pesado de criar e manter nós Go-ethereum (geth) para seus aplicativos, eliminando a necessidade de gerenciar a configuração da instância, a aplicação de patches de software e as verificações de integridade do nó.
- Ethers.js - O Ethers.js é uma biblioteca padrão do setor que fornece uma biblioteca completa e compacta para interagir com a blockchain Ethereum e seu ecossistema.
- Hardhat - O Hardhat fornece um conjunto de ferramentas de ambiente de desenvolvimento Ethereum para desenvolver e testar contratos inteligentes Solidity. Nesta postagem, usaremos o Hardhat para implantar nossos contratos inteligentes e escrever testes para eles.
As ferramentas de desenvolvedor da Ethereum interagem com a blockchain por meio do seu nó através da API JSON-RPC, que serve como uma interface para interações comuns do blockchain. Há duas metodologias de acesso à API JSON RPC do seu nó Ethereum ao usar o Managed Blockchain: Versão de assinatura 4 (SigV4) e Acesso baseado em token (TBA).
O SigV4 é um mecanismo de código de autenticação de mensagem baseado em hash (HMAC) usado para autenticar chamadas do SDK da AWS. Ele oferece várias garantias de segurança, incluindo registro de data e hora da expiração da solicitação no momento da assinatura, assinatura de carga útil por solicitação e muito mais.
Embora o SigV4 tenha sido a principal maneira de autorizar solicitações, ele apresenta desafios de interoperabilidade com ferramentas comunitárias estabelecidas (como Ethers.js, Hardhat, Foundry etc.) que dependem de uma conexão direta com um ponto de extremidade RPC da Ethereum e não foram projetadas para criar e anexar uma assinatura AWS SigV4 às solicitações. Como resultado, os clientes dependiam de middleware ou proxies personalizados capazes de assinar solicitações em andamento de aplicativos que usam ferramentas de desenvolvimento Ethereum para nós hospedados no Managed Blockchain.
O acesso baseado em token, um novo método de acesso para nós da Ethereum no Managed Blockchain, apresenta uma solução para esse problema de interoperabilidade, permitindo que você use opcionalmente um token (acessador) para acessar seu nó em vez de uma assinatura SigV4. Os acessadores agora podem ser fornecidos como parte do objeto de solicitação ao se comunicar com a API JSON RPC para seus nós Ethereum. Para obter um guia de início rápido sobre como criar e usar acessadores para acessar esses métodos da API JSON RPC da Ethereum, consulte Introdução ao acesso baseado em token às APIs de nós da Ethereum no Amazon Managed Blockchain.
A figura a seguir ilustra a arquitetura da solução.
As seções a seguir descrevem como configurar, implantar e testar seu ambiente de desenvolvimento Ethereum baseado em nuvem na rede de teste pública Ethereum Goerli. Este guia utiliza o AWS Cloud Development Kit (AWS CDK) para fornecer uma implantação de modelo que automatiza grande parte do processo de implantação do ambiente de maneira replicável.
Pré-requisitos
Para seguir as etapas desta postagem, você precisa instalar algumas dependências e preparar seu ambiente local para usar o CDK da AWS e implantar recursos em sua conta da AWS. Conclua as etapas a seguir:
Instale a interface de linha de comando da AWS (AWS CLI).
A CLI da AWS permite que você interaja com os serviços da AWS em uma sessão de terminal. Certifique-se de ter a versão mais recente da CLI da AWS instalada em seu sistema, que pode ser instalada usando os seguintes métodos:
Windows - instalador MSI (64 bits)
Linux, macOS ou Unix - Instalador em pacote
Para usar a CLI da AWS e interagir com os serviços da AWS, você deve configurá-la com suas credenciais da AWS e a região padrão.
Em uma sessão de terminal, execute o comando aws configure e siga os prompts para adicionar o ID da chave de acesso da AWS, a chave de acesso secreta e a região padrão. Deixe em branco o prompt do formato de saída padrão.
Para executar o aplicativo CDK, você precisa instalar o Node.js com uma versão >=8.12.0. É recomendável usar o Node Version Manager (NVM) porque ele facilita a alteração da versão do Node.js em tempo real para fins de teste. Para obter instruções, consulte Instalação e atualização.
Para acessar a instância do EC2 que você criou como seu ambiente de desenvolvimento, é necessário criar um par de chaves do EC2 que possa ser usado para acesso SSH à instância:
No console do Amazon EC2, no painel de navegação, em Rede e segurança, escolha Pares de chaves.
Selecione Criar par de chaves.
Em Name (Nome), digite um nome descritivo para o par de chaves.
O Amazon EC2 associa a chave pública ao nome que você especificar como nome da chave. Um nome de chave pode incluir até 255 caracteres ASCII. Ele não pode incluir espaços no início ou no final.
Para o tipo de par de chaves, escolha RSA ou ED25519.
Para formato de arquivo de chave privada, escolha o formato em que deseja salvar a chave privada. Para salvar a chave privada em um formato que possa ser usado com o OpenSSH, selecione pem. Para salvar a chave privada em um formato que possa ser usado com o PuTTY, selecione ppk.
Para adicionar uma tag à chave pública, selecione Add tag (Adicionar tag) e digite a chave e o valor da tag. Repita o procedimento para cada tag.
Escolha Criar par de chaves.
O arquivo de chave privada é baixado automaticamente pelo navegador. O nome do arquivo base é o nome que você especificou como o nome do par de chaves e a extensão do nome do arquivo é determinada pelo formato de arquivo que você escolheu.
Salve o arquivo da chave privada em um local seguro.
Se for usar um cliente SSH em um computador macOS ou Linux para se conectar à sua instância do Linux, use o seguinte comando para definir as permissões do arquivo de chave privada para que somente você possa lê-lo:
chmod 400 <nome do par de chaves>.pem
Instale o SDK da AWS
Para implantar os serviços da AWS que serão usados em seu ambiente de desenvolvimento da Ethereum, como um nó no Managed Blockchain e uma instância do EC2, você usará o CDK da AWS. O CDK da AWS acelera o desenvolvimento na nuvem usando linguagens de programação comuns para modelar seus aplicativos, traduzindo o código em modelos do AWS CloudFormation para implantar repetidamente seus aplicativos e arquiteturas na AWS. Neste exemplo, você escreve um aplicativo do CDK da AWS em Typescript, uma extensão do JavaScript que usa um tempo de execução do Node.js. Portanto, você precisa instalar o kit de ferramentas do CDK da AWS (AWS CDK Toolkit) para Node.js usando o Node Package Manager (NPM).
Para instalar o kit de ferramentas do CDK da AWS, um utilitário de linha de comando que permite que você trabalhe com aplicativos do CDK da AWS, abra uma sessão de terminal e execute o seguinte comando:
npm install -g aws-cdk
Observe que, no Windows, você precisará executar esse procedimento como administrador. Em sistemas POSIX/UNIX, talvez seja necessário executá-lo com sudo.
Você pode verificar a versão do kit de ferramentas executando o comando:
cdk — version
Faça o download e execute o aplicativo AWS CDK
Em seguida, faça o download do repositório que contém o aplicativo AWS CDK para a implantação do ambiente de desenvolvimento Ethereum.
Primeiro, execute o comando git para obter o repositório em seu computador local:
git clone https://github.com/aws-samples/automated-goerli-development-environment
Altere os diretórios para automated-goerli-development-environment/ para configurar seu aplicativo AWS CDK:
cd automated-goerli-development-environment
Configure o aplicativo para implantação em seu IDE preferido (por exemplo, VSCode) ou usando um editor de linha de comando como o Vim. Por exemplo, para usar o Vim para editar o arquivo de configuração, execute os seguintes comandos no diretório principal do projeto:
cp ./configs/config_template.json config.json
vim ./configs/config.json
No editor Vim, selecione i para entrar no modo Inserir, que pode ser usado para modificar algumas propriedades de teclas:
{
“stackName”: “BlogGoerliStack”,
“ec2Name”: “AMB_Dev”,
“nickName”: “AMB_Dev”,
“ec2Class”: “t3”,
“ec2Size”: “xlarge”,
“keyName”: “<YOUR KEY NAME HERE>”,
“keyFile”: “<./Key/YOURKEY.pem>”,
“userDataFile”: “./Scripts/startup_user.sh”,
“cdkOut”: “cdk-outputs.json”,
“timeBomb”: “30”,
“awsConfig”: “~/.aws”,
“clientIpAddr”: “<Adicione o endereço IP CIDR do cliente que está se conectando ao EC2>”,
“Mnemonic”: “<sua frase-semente de 12 palavras do teste>“ **VEJA O AVISO IMPORTANTE ABAIXO
}
Substitua as propriedades keyName e keyFile pelo nome e caminho do seu arquivo de chave EC2 salvo, respectivamente. Substitua o espaço reservado para clientIpAddr pelo seu endereço IP, o que restringirá o acesso à instância do ambiente de desenvolvimento apenas ao seu endereço IP. Você também deve criar uma carteira Ethereum temporária que será usada para testes e importá-la para esse ambiente de desenvolvimento usando uma frase-semente mnemônica (12 palavras) para uma carteira de teste que não tenha fundos da rede principal.
***Observe que você não deve importar uma frase-semente mnemônica de uma carteira Ethereum com fundos ou qualquer carteira que você use na rede principal, pois corre o risco de perder seus ativos.
Depois de fazer as atualizações no arquivo de configuração, salve as alterações no Vim digitando :wq e apertando Enter ou Return no teclado.
Isso fará com que você saia do Vim, salvando as alterações feitas. Agora você está pronto para implantar seu aplicativo AWS CDK e criar seu ambiente.
Para implantar o aplicativo, execute os seguintes comandos no diretório do projeto:
npm install cdk bootstrap
cdk deploy
A implantação inicial levará cerca de 3 minutos para ser concluída, mas devido aos tempos de sincronização da rede de teste pública da Ethereum, o nó da Ethereum no Managed Blockchain não poderá ser usado por aproximadamente 35 minutos enquanto os dados da blockchain são sincronizados. Quando a implantação estiver concluída, uma instância do EC2 com as ferramentas necessárias para desenvolver, testar, compilar e implantar contratos inteligentes na Ethereum estará disponível para você. Isso inclui a criação dos recursos necessários para acessar o nó da Ethereum, incluindo o VPC, o token de acesso e as políticas de segurança necessárias.
Use seu ambiente de desenvolvimento Ethereum usando SSH
Depois que seu aplicativo AWS CDK for implantado e seu nó Ethereum no Managed Blockchain for sincronizado, em uma nova guia do terminal, execute o seguinte comando para se conectar à sua instância do EC2 via SSH:
ssh -i ./Key/YOURKEYNAME.pem ec2-
user@INSTANCE_IP_ADDRESS
Você pode encontrar o valor da variável INSTANCE_IP_ADDRESS na saída do comando cdk deploy executado nas etapas anteriores.
Quando estiver conectado à instância do EC2, você poderá encontrar o código Solidity padrão para um contrato inteligente simples, juntamente com o código node.js para se conectar à blockchain, compilar o contrato inteligente, implantar o contrato inteligente e executar métodos no contrato inteligente por meio de transações de blockchain. Além disso, a ferramenta de desenvolvedor padrão do setor para Ethereum, Hardhat, é pré-instalada com um script de amostra para testar o contrato inteligente.
A seguinte estrutura de diretório é criada:
decentralized-app-for-goerli-nodejs/
├─ artifacts/
├─ cache/
├─ contracts/
│ ├─ CountPerAccount.sol
├─ DemoApps/
├─ test/
Os diretórios são descritos a seguir:
decentralized-app-for-goerli-nodejs - Diretório pai
artifacts - Diretório usado pelo compilador
cache - Diretório usado pelo compilador
contracts - Código Solidity para o contrato inteligente
CountPerAccount.sol - um exemplo de contrato inteligente
DemoApps - código node.js para acesso à blockchain e contrato inteligente
test - Diretório contendo scripts para executar alguns testes de amostra no contrato inteligente usando o Hardhat
Execute o seguinte comando para executar os testes estáticos no contrato inteligente usando o Hardhat antes da implantação:
cd decentralized-app-for-goerli-nodejs
npx hardhat test
Se desejar, você poderá usar outras ferramentas e comandos do Hardhat nesse diretório.
Para se conectar à blockchain e implantar o contrato inteligente, você executará o código do aplicativo node.js em DemoApps. Primeiro, você se conectará à rede de teste Ethereum Goerli por meio do nó Ethereum no Managed Blockchain, e o aplicativo obterá os saldos de várias contas derivadas da frase-semente mnemônica que foi importada nas etapas anteriores. Em seguida, ele executará uma transação para transferir a criptomoeda nativa com a qual pagará as taxas, gEth (Goerli Ether), de uma conta para outra.
cd DemoApps
node demoBlockChainAccess
Em seguida, você chama o método de aplicativo node.js para compilar e implantar o contrato inteligente:
node demoContract
Depois de implantado na blockchain, o endereço do contrato inteligente implantado é salvo automaticamente no ambiente para acesso ao contrato inteligente. O método demoContractAccess usa esse endereço de contrato inteligente para executar uma transação para chamar um método no contrato inteligente e retornar os resultados:
node demoContractAccess
O método acima é para acessar o contrato inteligente. Nesse método, as transações são assinadas e enviadas para a blockchain por meio de seu nó da rede de teste Ethereum no Amazon Managed Blockchain, e o resultado é impresso no terminal.
Agora você configurou seu ambiente de desenvolvimento da Ethereum na AWS e compilou, implantou e testou um contrato inteligente. Você está pronto para criar seu próprio aplicativo Ethereum com base nesse exemplo padrão. Como alternativa, você também pode usar um IDE como o Visual Studio Code para se conectar à sua instância do EC2.
OPCIONAL: Conecte-se ao seu ambiente de desenvolvimento por meio do VS Code
Opcionalmente, você pode se conectar via VS Code:
Acesse o site de downloads do Visual Studio e faça o download do VS Code para seu ambiente apropriado. Para obter instruções detalhadas, consulte o seguinte, de acordo com seu sistema operacional:
macOS - Visual Studio Code no macOS
Windows - Visual Studio Code no Windows
Instale a extensão de desenvolvimento remoto para o Visual Studio Code.
Para configurar o arquivo de configuração SSH, acesse a paleta de comandos do VS Code escolhendo Shift+Command+P (macOS) ou Ctrl+Shift+P (Windows).
Digite remote e escolha Remote-SSH: Open SSH Configuration File 4.
O VS Code apresentará alguns locais para o arquivo de configuração.
Escolha o arquivo na pasta /Users (macOS) ou C:\Users (Windows).
Digite o seguinte no arquivo de configuração SSH:
Host AMB_DEV_ENV
HostName _INSTANCE_IP_ADDRESS
User ec2-user
IdentityFile [local onde se encontra o arquivo pem que você baixou] (caminho completo como: “/users/…/Key/YOURKEY.pem”
Depois que a configuração do SSH for salva, conecte-se à instância do EC2 escolhendo o ícone verde na parte inferior da página do VS Code.
Selecione Conectar ao host e escolha AMB_DEV_ENV no menu suspenso.
Uma vez conectado à instância do EC2, você pode usar as mesmas etapas que seguiu em "Use seu ambiente de desenvolvimento Ethereum via SSH" no terminal do VS Code.
Limpeza
Para remover os recursos da AWS que você criou durante as etapas anteriores, execute o seguinte comando do CDK da AWS:
cdk destroy
Esse comando pode levar alguns minutos para ser concluído. Lembre-se de fazer backup de todas as atualizações de código ou arquivos que possa ter criado em seu ambiente antes de executar esse comando, se desejar.
Conclusão
Nesta postagem, mostramos como implantar um IDE baseado em nuvem para criar, testar e implantar contratos inteligentes na rede de teste pública Ethereum Goerli por meio de um nó completo dedicado da Ethereum gerenciado com o Managed Blockchain. Com esse ambiente de desenvolvimento baseado em nuvem, os desenvolvedores podem criar e testar facilmente os contratos inteligentes da Ethereum sem precisar gerenciar um nó da Ethereum ou configurar manualmente um ambiente em sua máquina local.
Para saber mais sobre o Token-Based Access, um novo recurso de interoperabilidade para nós Ethereum no Amazon Managed Blockchain
Artigo escrito por Kumaraswamy Pallukuri . A versão original pode ser encontrada aqui. Traduzido e adaptado por Dimitris Calixto.
Oldest comments (0)