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

Smart Contracts #2: Construindo contratos

Smart Contracts #3: Contratos mais avançados


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!