Smart contracts #4: Publicando e interagindo com contratos
Este é o quarto artigo de uma série titulada “Smart Contracts”, onde irei tratar de smart contracts com foco na plataforma Ethereum. Com esta série, meu objetivo é trazer conteúdo completo e de maneira compreensiva sobre o tema, que tratarei de forma teórica e prática. Um novo artigo será publicado toda terça-feira.
Caso você tenha interesse em aprender mais e tenha um conhecimento razoável da língua inglesa, toda quarta-feira publico também um artigo tratando de uma definição importante do mundo da tecnologia blockchain, em uma série titulada “Blockchain definition of the week”.
Artigos anteriores:
Smart Contracts #1: Introdução
No artigo de hoje vamos aprender como publicar e interagir com smart contracts do Ethereum. Para isso, vamos utilizar a rede de teste Ropsten. Antes de começar, seguem abaixo algumas definições importantes para hoje:
MetaMask
Plug-in para navegadores que permite a interação entre o navegador e a blockchain do Ethereum. Com isso, usuários podem acessar dApps, interagir com smart contracts e também enviar e receber Ether e tokens. O MetaMask também possui um carteira.
MyEtherWallet
Muitas vezes chamada apenas de MEW, a MyEtherWallet é uma ferramenta open-source que permite a criação de carteiras para Ether e tokens, além de outras formas de interação com a rede Ethereum, tanto na mainnet quanto nas redes de teste. A ferramenta é acessada online e permite também a interação e publicação de smart contracts, a compra de endereços ENS, e outras funcionalidades.
Primeiro passo: MetaMask
A primeira coisa que precisamos fazer é instalar o MetaMask, caso ele já não esteja instalado. Acesse o site abaixo e selecione seu navegador para continuar a instalação do plug-in.
Quando o download terminar, siga as instruções para criar sua carteira. Guarde suas palavras de recuperação bem guardadas.
Segundo passo: Ropsten ETH
Agora que temos o MetaMask instalado, é necessário que tenhamos Ether para poder realizar operações na rede, ou seja, publicar e interagir com o contrato. Mas não se preocupe, você não vai ter que comprar nada! Vamos utilizar Ether de teste.
Mude seu MetaMask para a rede Ropsten. Para fazer isso, clique no canto superior direito ou esquerdo (dependendo da versão do seu MetaMask) onde estiver escrito “Mainnet” ou “Rede Principal”, e mude para “Rede de Teste Ropsten”.
Depois, copie seu endereço do MetaMask e use-o para conseguir RETH (Ropsten Ether) em um dos sites abaixo:
Não peça muito, ou você vai ser impedido de pedir mais depois. 1ETH já é mais do que suficiente.
Terceiro passo: Publicando o contrato
Vamos utilizar o código do artigo da semana passada, que coloco abaixo para facilitar:
pragma solidity^0.4.24;contract owned {
address owner;constructor() public {
owner = msg.sender;
}modifier onlyowner() {
if (msg.sender == owner) {
_;
}
}
}contract HODL is owned {uint hoje;
string definirsenha;
string senha;constructor() public {
hoje = block.timestamp;
}function depositarInvestimento() public payable onlyowner {}function definirSenha(string _definirsenha) public onlyowner {
require(bytes(_definirsenha).length > 0);
definirsenha = _definirsenha;
}function retirarInvestimento(string _senha) public onlyowner {
require (verificarSenha(definirsenha, _senha) == true,
"Senha incorreta. Tente novamente."
);
require (
block.timestamp >= hoje + 900,
"Você não queria HODL?"
);
owner.transfer((address(this)).balance);
}function verificarSenha (string storage _a, string memory _b) internal pure returns(bool) {
bytes storage a = bytes(_a);
bytes memory b = bytes(_b);if (keccak256(a) != keccak256(b)) {
return false;
}
return true;
}
}
Fiz apenas uma mudança no código, coloquei 15 minutos como tempo de espera (block.timestamp >= hoje + 900), para podermos testar o contrato sem problemas.
Copie e cole o código no Remix.
Para publicar o contrato, certifique-se de que o MetaMask está aberto (ou seja, você já colocou a senha, ele não precisa estar aberto na tela). Verifique também que ele está na rede certa (Ropsten).
Agora, clique em ‘Run’ no canto superior direito e coloque o environment em “Injected Web3”, se já não estiver.
Clique em ‘Deploy’, e o MetaMask deve abrir uma aba de transação. Sugiro colocar o preço do gas (gas price) em um valor alto, por exemplo acima de 20 Gwei, para que a transação confirme mais rápido, já que é apenas a rede de teste. Clique em confirmar para assinar a transação e publicar o contrato.
Remix: Run → Deploy
MetaMask: Transação
O Remix deveria então exibir o seguinte:
Clique no link. Ao acessá-lo, no campo “To:” deveria estar escrito algo assim:
[Contract 0x7baba75ece96a21c8512bb5dba1430dd84f350d4 Created]
Copie este endereço (no caso do exemplo acima: 0x7baba75ece96a21c8512bb5dba1430dd84f350d4) . Esse é o endereço do smart contract.
Quarto passo: Interagindo com o contrato
Acesse o MyEtherWallet e mude a rede para Ropsten no canto superior direito.
Clique em “Contracts”.
Cole o endereço do contrato que você copiou no campo “Contract Address”.
Volte ao Remix, clique em “Compile”, depois “Details” e copie a ABI.
Para copiar, basta clicar no símbolo ao lado de “ABI”.
Volte para o MyEtherWallet e cole a ABI no campo designado.
Se sua tela estiver como a imagem acima, clique em “Access”. Você deveria ver isso logo abaixo:
Pronto! Vamos interagir com o contrato. Clique em “definirSenha” e escolha uma senha para usar.
Siga os passos na tela para gerar, assinar e confirmar a transação.
Vamos então depositar Ether no contrato. Clique em “depositarInvestimento”. Siga os mesmos passos, porém, quando encontrar esta tela:
Ao invés de 0, selecione um valor que você tenha disponível na sua carteira MetaMask, como 0.5. Esse será o valor do investimento que queremos HODL. Faça o mesmo que antes até confirmar a transação.
Quando a transação confirmar, você pode então tentar retirar o investimento. Experimente usar algumas senhas erradas antes da correta para ver o que acontece.
Caso o tempo estabelecido tenha passado, e você colocar a senha certa, após a confirmação da transação, você deveria ver os Ethers de volta na sua carteira.
Extra: utilizando endereços diferentes
Para testar o contrato de outros endereços, basta criar uma nova “conta” dentro do seu MetaMask.
Depois de criar uma nova conta, envie Ether para ela e siga o mesmo processo.
Importante: Você vai precisar recarregar a página do MyEtherWallet para usar outro endereço.
Utilizando dessa funcionalidade, você pode testar se o contrato realmente só deixa o dono retirar o investimento.
Considerações
Você provavelmente está pensando: “Poxa, que processo difícil!”
E é para isso que na continuação dessa série vamos aprender a fazer um dApp, para facilitar o processo para os usuários de um smart contract.
Vale lembrar que publicar e interagir com um contrato na rede principal do Ethereum funciona da mesma maneira. Você agora sabe construir, publicar, e interagir com contratos na rede!
Up next…
No próximo artigo vamos começar o desenvolvimento do nosso dApp para interagir com o contrato.
Deixe abaixo seus comentários e sugestões. Até a próxima!