Artigo anterior Tutorial sobre como publicar um contrato inteligente na Testnet do Ethereum Próximo artigo Home Tutorial sobre como publicar um contrato inteligente na Testnet do Ethereum Tutorial sobre como publicar um contrato inteligente na Testnet do Ethereum By Melissa Eggersman - min. de leitura Atualizado 04 junho 2020 Este é um tutorial passo a passo de como publicar um smart contract na rede de teste do Ethereum. Instale o geth Primeiramente instale a linha de comando da Ethereum geth:https://ethereum.org/cli. Neste tutorial foi utilizado o Ubuntu. Escreva o contrato Os smart contracts do Ethereum são escritos na linguagem Solidity. Para saber mais sobre a linguagem acesse a documentação oficial, e há também um ótimo tutorial oferecido pela LoomNetwork. Crie um diretório qualquer para começar o tutorial. Crie um arquivo chamado OlaMundo.sol e preencha com o seguinte código: pragma solidity ^0.4.23; contract Mortal { address proprietario; constructor() public { proprietario = msg.sender; } function apagar() public { if (msg.sender == proprietario) { selfdestruct(proprietario) } } } contract OlaMundo is Mortal { string mensagem; constructor(string _mensagem) public { mensagem = _mensagem; } function digaOla() public constant returns (string) { return mensagem; } } Não vou entrar nos detalhes da linguagem aqui, vamos direto para a parte prática. Publicando o contrato Para que o contrato seja publicado na rede, é necessário compilá-lo. Para isso será necessário instalar o compilador do Solidity. O seguinte comando realiza as seguintes operações: Compila o contrato OlaMundo.sol retornando um JSON Concatena o JSON retornado da compilação à uma declaração de uma variável em JavaScript Grava a declaração da variável num arquivo chamado compilado.js $ echo "var olaMundoCompilado=`solc --optimize --combined-json abi,bin,interface OlaMundo.sol`" > compilado.js Acesse o console do geth rodando: $ geth --rinkeby --verbosity 0 console --mine Esse comando abre o console interativo que nos dá acesso à API JavaScript para interagirmos com o ambiente Ethereum. Note que passamos o parâmetro — rinkeby que configura o console para rodar na rede de testes do Ethereum. Carregue o arquivo do contrato compilado com: > loadScript('compilado.js') Vamos guardar a Application Binery Interface (ABI) numa variável: > var abi = JSON.parse(olaMundoCompilado.contracts['OlaMundo.sol:OlaMundo'].abi); Vamos guardar também o código binário do smart contract: > var bin = '0x'+olaMundoCompilado.contracts['OlaMundo.sol:OlaMundo'].bin; Para publicar nosso smart contract, será necessário ter uma instância de um objeto de contrato no JavaScript: > var contrato = eth.contract(abi); Também será necessário ter uma conta para publicá-lo. É muito simples criar uma conta pelo console é só executar o seguinte comando: > personal.newAccount() O console irá perguntar por uma senha para poder criptografar a nova conta, nós iremos precisar dela mais para frente. Se tudo der certo, o console irá devolver o endereço da nova conta que será um hash grande. Não se preocupe em guardar esse hash, pois ele é facilmente obtido com o comando que lista todas as contas: eth.accounts Para que o contrato seja publicado, precisamos de eth para pagar os mineradores por publicar o contrato. Para conseguir eth para a conta de teste, copie o endereço da conta criada e faça um post público contendo somente o endereço da conta no Facebook, Twitter ou Google Plus. Copie o permalink do post e coloque a URL no campo deste formulário: https://www.rinkeby.io/#faucet. Escolha uma das opções e espere até completar. Para verificar se deu certo, consulte o saldo da conta: > eth.getBalance(eth.accounts[0]) Antes de executarmos o código de publicação, precisamos desbloquear a conta para pagar a publicação: > personal.unlockAccounts(eth.accounts[0]); Hora de publicar Vamos chamar o método new do nosso objeto contrato criado anteriormente passando a mensagem que será guardada no nosso smart contract, a conta proprietária do contrato, o binário, a quantidade de gas que iremos pagar para que o contrato seja publicado, e uma função que será executada assim que houver uma modificação na publicação: > var meuContrato = contrato.new('Olá mundo descentralidado!',{ from: eth.accounts[0], data: bin, gas: 4700000}, function (e, contract) { if (typeof contract.address !== 'undefined') { console.log('Contrato publicado! Endereço: ' + contract.address + ' transactionHash: ' + contract.transactionHash); } } ); Deve retornar o seguinte, só que com os hashs diferentes: > Contrato publicado! Endereço: 0x3026212e73caf773e9bc5397846fbcaf9c61c96a transactionHash: 0xd967b5e545018014830c077e74b3e4ca3ec3a962646b5d934daea942c7110bc7 Interagindo com o contrato Localmente Agora nosso contrato está online! Podemos utilizar a variável do comando anterior para chamar os métodos via JavaScript: > meuContrato.digaOla(); "Olá mundo descentralidado!" Público Digamos que você quer acessar seu contrato a partir de uma ÐApp ou de outro console, você não terá mais a referência do retorno da publicação como na situação anterior. Para acessar qualquer smart contract publicado você precisa ter acesso à ABI e o endereço. > var meuContratoPublico = eth.contract(meuContrato.abi).at(meuContrato.address); > meuContratoPublico.digaOla() Apagando o contrato Smart contracts na rede Ethereum são eternos por padrão, mas podemos programar para que esse contrato seja inutilizado: > meuContrato.apagar.sendTransaction({from:eth.accounts[0]}) Após alguns instantes a transação será efetuada, então podemos verificar: > eth.getCode(meuContrato.address) O que deve retornar: "0x" Para mais detalhes (TL;DR) acesse: https://github.com/ethereum/go-ethereum/wiki/Contract-Tutorial (Tiago A. Full-stack developer). Fonte: https://medium.com/@tiagoab/hello-world-em-ethereum-50aeb1bd5d54 Guia do Bitcoin Mantenha-se informado todos os dias sobre Bitcoin! Telegram: https://telegram.me/guiadobitcoin Facebook: https://www.facebook.com/guiadobitcoin/ Twitter: https://twitter.com/guiadobitcoin Feed RSS: https://guiadobitcoin.com.br/feed/ Compartilhe este artigo Categorias Tecnologia Etiquetas Bitcoin