Pular para o conteúdo principal

Ajude a atualizar esta página

🌏

Há uma nova versão desta página mas, no momento, ela está apenas em inglês. Ajude-nos a traduzir a última versão.

Traduzir página
Visualizar em inglês

Não há bugs aqui!🐛

Esta página não está sendo traduzida. Ela foi intencionalmente deixada em inglês, por enquanto.

Contrato inteligente "Hello World" para iniciantes

solidity
hardhat
alchemy
contratos inteligentes
primeiros passos
implementação
page-tutorial-undefined
✍elanh
📆31 de março de 2021
⏱️12 minutos de leitura

Se você é novo no desenvolvimento de blockchain e não sabe por onde começar, ou se apenas deseja entender como implementar ou interagir com contratos inteligentes, este guia é para você. Mostraremos a você como criar e implementar um simples contrato inteligente na rede de testes Ropsten usando uma carteira virtual (MetaMask), Solidity, Hardhat e Alchemy. Não se preocupe caso não entenda ainda o que tudo isso significa. Vamos explicar).

Na segunda parte deste tutorial, analisaremos como podemos interagir com nosso contrato inteligente uma vez que ele esteja implementado e, já na terceira parte, abordaremos como publicá-lo no Etherscan.

Caso surjam perguntas em qualquer momento, sinta-se à vontade para falar no Discord da Alchemy!

Passo 1: Conecte-se à rede de Ethereum

Existem muitas maneiras de fazer solicitações à cadeia de Ethereum. Por simplicidade, usaremos uma conta gratuita na Alchemy, uma API e plataforma de desenvolvedores de blockchain, a qual permite nos comunicar com a cadeia de Ethereum sem ter que executar nossos próprios nós. A plataforma também possui ferramentas de desenvolvedor para monitorar e analisar; ferramentas das quais vamos tirar proveito neste tutorial, para entender o que está acontecendo nos bastidores da implantação de nosso contrato inteligente. Se ainda não tiver uma conta na Alchemy, você pode se cadastrar gratuitamente neste link.

Passo 2: Crie seu aplicativo (e chave de API)

Assim que você criar uma conta na Alchemy, você pode gerar uma chave de API criando um app. Isso nos permitirá fazer solicitações à rede de testes Ropsten. Se não estiver familiarizado com as redes de teste, confira esta página.

  1. Vá até a página "Create App" no painel da Alchemy, passe o mouse sobre a palavra "Apps" na barra de navegação e clique em "Create App"

Criar um aplicativo Hello World

  1. Nomeie seu aplicativo "Hello World", ofereça uma breve descrição, selecione "Staging" para o ambiente (usado para a contabilidade de seu app) e escolha "Ropsten" para sua rede.

criar uma visualização do app hello world

  1. Clique em "Create App", e é isso e tudo! Seu app deveria aparecer na tabela abaixo.

Passo 3: Crie uma conta (endereço) de Ethereum

Precisamos de uma conta de Ethereum para enviar e receber transações. Para este tutorial, usaremos uma carteira virtual no navegador, a MetaMask, para gerenciar o endereço da sua conta Ethereum. Mais sobre transações.

Você pode baixar e criar uma conta MetaMask gratuitamente neste link. Quando estiver criando uma conta, ou se já tiver uma, certifique-se de mudar para a "Ropsten Test Network", no canto superior direito (para não precisar lidar com dinheiro de verdade).

exemplo metamask ropsten

Passo 4: Adicione ether de um faucet

Para implementar nosso contrato inteligente na rede de teste, precisaremos de alguns ETHs de imitação. Para obter ETH você pode ir para o faucet da Ropsten, inserir seu endereço de conta Ropsten e clicar em "Send Ropsten ETH". Devido ao tráfego de rede, pode levar algum tempo até receber o seu ETH de imitação. Você deveria ver o ETH na sua conta MetaMask logo depois!

Passo 5: Verifique seu saldo

Para verificar novamente que temos saldo, vamos fazer uma solicitação através da ferramenta eth_getBalance fornecida pelo compositor da Alchemy. Ele mostrará a quantidade de ETH em nossa carteira. Depois de inserir o endereço da sua conta da MetaMask e clicar em "Send Request", você verá uma resposta como esta:

1{ "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" }
2
📋 Copiar

OBSERVAÇÃO: este resultado é em wei não em ETH. Lembre-se de que o wei é a menor unidade do ether. A conversão de wei para ETH é 1 ETH = 1018 wei. Desta maneira, se convertermos 0x2B5E3AF16B1880000 em decimal obteremos 5*10¹⁸, o que equivale a 5 ETH.

Ufa! Nosso dinheiro de imitação está todo aí 🤑.

Passo 6: Inicialize nosso projeto

Primeiramente, precisaremos criar uma pasta para o nosso projeto. Navegue até sua linha de comando e digite:

1mkdir hello-world
2cd hello-world
3

Agora que estamos dentro da pasta do nosso projeto, vamos usar o comando npm init para inicializar o projeto. Se você ainda não tiver o npm instalado, siga estas instruções. Também vamos precisar do node.js, então baixe-o também!

1npm init
2

Não importa muito como você responde às questões sobre a instalação. A modo de referência, aqui está o que nós fizemos:

1package name: (hello-world)
2version: (1.0.0)
3description: hello world smart contract
4entry point: (index.js)
5test command:
6git repository:
7keywords:
8author:
9license: (ISC)
10About to write to /Users/.../.../.../hello-world/package.json:
11
12{
13 "name": "hello-world",
14 "version": "1.0.0",
15 "description": "hello world smart contract",
16 "main": "index.js",
17 "scripts": {
18 "test": "echo \\"Error: no test specified\\" && exit 1"
19 },
20 "author": "",
21 "license": "ISC"
22}
23
Exibir tudo

Aprove o package.json e estaremos prontos para começar!

Passo 7: Baixe o Hardhat

Hardhat é um ambiente de desenvolvimento para compilar, implementar, testar e depurar seu software de Ethereum. Ele ajuda os desenvolvedores na criação de contratos inteligentes e dApps localmente antes de serem implementados na cadeia online.

Dentro de nosso projeto hello-world execute:

1npm install --save-dev hardhat
2

Para mais detalhes, confira esta página sobre as instruções de instalação.

Passo 8: Crie um projeto Hardhat

Dentro da nossa pasta do projeto, execute:

1npx hardhat
2

Você deve então ver uma mensagem de boas-vindas e a opção de selecionar o que quer fazer. Selecione "criar uma hardhat.config.js vazia":

1888 888 888 888 888
2888 888 888 888 888
3888 888 888 888 888
48888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888
5888 888 "88b 888P" d88" 888 888 "88b "88b 888
6888 888 .d888888 888 888 888 888 888 .d888888 888
7888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.
8888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888
9
10👷 Welcome to Hardhat v2.0.11 👷‍?
11
12O que você deseja fazer? …
13Create a sample project
14❯ Create an empty hardhat.config.js
15Quit
16
Exibir tudo

Isso vai gerar um arquivo hardhat.config.js onde especificaremos todas as configurações para o nosso projeto (no passo 13).

Passo 9: Adicione pastas do projeto

Para manter nosso projeto organizado vamos criar duas pastas novas. Navegue até o diretório raiz do seu projeto na sua linha de comando e digite:

1mkdir contracts
2mkdir scripts
3
  • contracts/ é onde nós vamos manter o arquivo de código do contrato inteligente "hello world"
  • scripts/ é onde nós vamos manter scripts para implantar e interagir com nosso contrato

Passo 10: Escreva nosso contrato

Você pode estar se perguntando, quando é que nós vamos escrever códigos? Bem, aqui estamos, no passo 10.

Abra o projeto hello-world em seu editor favorito (nós preferimos o VSCode). Os contratos inteligentes são escritos em uma linguagem chamada Solidity, que usaremos para escrever nosso contrato inteligente HelloWorld.sol

  1. Navegue até a pasta "contracts" e crie um novo arquivo chamado HelloWorld.sol
  2. Veja abaixo uma amostra de contrato inteligente "Hello World" da Ethereum Foundation, que usaremos neste tutorial. Copie e cole os itens abaixo em seu arquivo HelloWorld.sol e não se esqueça de ler os comentários para entender o que este contrato faz:
1// Especifica a versão do Solidity usando a versão semântica.
2// Learn more: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma
3pragma solidity ^0.7.0;
4
5// Defines a contract named `HelloWorld`.
6// Um contrato é uma coleção de funções e dados (seu estado). Uma vez implantado, um contrato reside em um endereço específico na blockchain Ethereum. Learn more: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html
7contract HelloWorld {
8
9 // Declares a state variable `message` of type `string`.
10 // Variáveis de estado são variáveis cujos valores são permanentemente armazenados no armazenamento do contrato. The keyword `public` makes variables accessible from outside a contract and creates a function that other contracts or clients can call to access the value.
11 string public message;
12
13 // Similar to many class-based object-oriented languages, a constructor is a special function that is only executed upon contract creation.
14 // Os construtores são usados para inicializar os dados do contrato. Learn more:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors
15 constructor(string memory initMessage) {
16
17 // Accepts a string argument `initMessage` and sets the value into the contract's `message` storage variable).
18 message = initMessage;
19 }
20
21 // A public function that accepts a string argument and updates the `message` storage variable.
22 function update(string memory newMessage) public {
23 message = newMessage;
24 }
25}
26
Exibir tudo
📋 Copiar

Este é um contrato inteligente muito simples, que armazena uma mensagem ao ser criado e pode ser atualizado através da função update.

Passo 11: Vincule MetaMask e Alchemy a seu projeto

Nós já criamos uma carteira MetaMask, uma conta Alchemy e já escrevemos nosso contrato inteligente. Agora é hora de vincularmos os três.

Toda transação enviada da sua carteira virtual requer uma assinatura, usando sua chave privada única. Para fornecer essa permissão ao nosso programa, nós podemos armazenar com segurança nossa chave privada (e a chave Alchemy API) em um arquivo de ambiente.

Para saber mais sobre o envio de transações, confira este tutorial sobre o envio de transações usando web3.

Primeiro, instale o pacote dotenv na pasta do seu projeto:

1npm install dotenv --save
2

Depois, crie um arquivo .env no diretório raiz do seu projeto e adicione sua chave MetaMask privada e o URL da API HTTP Alchemy nele.

  • Siga estas instruções para exportar sua chave privada
  • Veja abaixo como obter o URL da API HTTP Alchemy

obter chave da alchemy api

Copiar o URL da Alchemy API

Seu arquivo .env ficará assim:

1API_URL = "https://eth-ropsten.alchemyapi.io/v2/your-api-key"
2PRIVATE_KEY = "your-metamask-private-key"
3

Para realmente vinculá-los a nosso código, vamos fazer referência a essas variáveis em nosso arquivo hardhat.config.js no passo 13.

Don't commit .env! Please make sure never to share or expose your .env file with anyone, as you are compromising your secrets in doing so. If you are using version control, add your .env to a gitignore file.

Passo 12: Instale o Ethers.js

Ethers.js é uma biblioteca que facilita a interação e o envio de solicitações ao Ethereum ao incorporar métodos padrões JSON-RPC a outros métodos mais amigáveis ao usuário.

Hardhat torna muito fácil a integração de plugins, para ferramentas adicionais e funcionalidades extendidas. Aproveitaremos o plugin Ethers para implantação de contratos. (Ethers.js tem alguns métodos de implantação de contratos bastante claros).

No diretório do projeto, digite:

1npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0"
2

Também vamos precisar de ethers em nosso hardhat.config.js no próximo passo.

Passo 13: Atualize o hardhat.config.js

Até aqui, já adicionamos diversas dependências e plugins. Agora precisamos atualizar o hardhat.config.js para que nosso projeto reconheça todos eles.

Atualize seu hardhat.config.js para ficar assim:

1require('dotenv').config();
2
3require("@nomiclabs/hardhat-ethers");
4const { API_URL, PRIVATE_KEY } = process.env;
5
6/**
7* @type import('hardhat/config').HardhatUserConfig
8*/
9module.exports = {
10 solidity: "0.7.3",
11 defaultNetwork: "ropsten",
12 networks: {
13 hardhat: {},
14 ropsten: {
15 url: API_URL,
16 accounts: [`0x${PRIVATE_KEY}`]
17 }
18 },
19}
20
Exibir tudo

Passo 14: Compile nosso contrato

Para ter certeza de que tudo está funcionando, vamos compilar nosso contrato. A tarefa compile é uma das tarefas integradas do Hardhat.

Na linha de comando, execute:

1npx hardhat compile
2

Você pode receber o aviso SPDX license identifier not provided in source file, mas não há necessidade de se preocupar com isso. Esperemos que tudo mais esteja bem! Se não, você sempre pode enviar uma mensagem no discord Alchemy.

Passo 15: Escreva nosso script de implantação

Agora que nosso contrato está escrito e nosso arquivo de configuração está pronto, é hora de escrever o script de implantação do contrato.

Navegue até a pasta scripts/ e crie um novo arquivo chamado deploy.js, adicionando o seguinte conteúdo:

1async function main() {
2 const HelloWorld = await ethers.getContractFactory("HelloWorld");
3
4 // Start deployment, returning a promise that resolves to a contract object
5 const hello_world = await HelloWorld.deploy("Hello World!");
6 console.log("Contract deployed to address:", hello_world.address);}
7
8main()
9 .then(() => process.exit(0))
10 .catch(error => {
11 console.error(error);
12 process.exit(1);
13 });
14
Exibir tudo

A Hardhat fez um trabalho incrível ao explicar o que cada uma dessas linhas de código faz em seu Tutorial sobre contratos. Adotamos aqui as explicações deles.

1const HelloWorld = await ethers.getContractFactory("HelloWorld");
2

Uma ContractFactory em ethers.js é uma abstração usada para implantar novos contratos inteligentes, então, aqui, HelloWorld representa uma fábrica para instâncias do nosso contrato Hello World. Ao usar o plug-in hardhat-ethers, as instâncias ContractFactory e Contract são conectadas ao primeiro signatário por padrão.

1const hello_world = await HelloWorld.deploy();
2

Ao chamar deploy() em uma ContractFactory, a implantação se iniciará e retornará uma Promise que se resolve em um Contract. Este é o objeto que tem um método para cada uma de nossas funções de contrato inteligente.

Passo 16: Implante nosso contrato

Finalmente estamos prontos para implantar o nosso contrato inteligente! Navegue até a linha de comando e digite:

1npx hardhat run scripts/deploy.js --network ropsten
2

Você deverá ver algo assim:

1Contract deployed to address: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570
2

Se formos para a etherscan Ropsten e procurarmos o endereço de nosso contrato, poderemos ver se ele foi implantado com sucesso. A transação ficará parecida com isto:

contrato etherscan

O endereço From deve corresponder ao endereço da sua conta MetaMask, e o endereço "Para" vai dizer "Criação de contrato", mas se clicarmos na transação veremos o endereço do nosso contrato no campo To:

transação etherscan

Parabéns! Você acaba de implantar um contrato inteligente para a cadeia Ethereum 🎉

Para entender o que está acontecendo nos bastidores, vamos navegar até a guia Explorer no painel do Alchemy. Se você tem vários aplicativos Alchemy, certifique-se de filtrar por app e selecionar “Hello World”. explorador hello world

Aqui você verá um punhado de chamadas JSON-RPC que Hardhat/Ethers fizeram em segundo plano para nós quando chamamos a função .deploy() . Duas importantes chamadas aqui são a eth_sendRawTransaction, que é o pedido para realmente escrever nosso contrato inteligente na cadeia de Ropsten, e a eth_getTransactionByHash, que é um pedido para ler informações sobre nossa transação, dado o hash (um padrão típico ao enviar transações). Para saber mais sobre o envio de transações, confira este tutorial em sobre como enviar transações usando a Web3

Isso é tudo para a parte 1 deste tutorial. Na parte 2, interagiremos com nosso contrato inteligente atualizando nossa mensagem inicial e, na parte 3, publicaremos nosso contrato inteligente no Etherscan para que todos aprendam como interagir com ele.

Quer aprender mais sobre Alchemy? Confira nosso site. Não quer perder nenhuma atualização? Assine o nosso boletim informativo aqui! Não se esqueça também de nos seguir no Twitter e participar do nosso Discord.

Última edição: , Invalid DateTime
Editar Página

Esta página foi útil?