previous-article Tutorial sobre como publicar um contrato inteligente na Testnet do Ethereum next-article Home Tutorial sobre como publicar um contrato inteligente na Testnet do Ethereum Tutorial sobre como publicar um contrato inteligente na Testnet do Ethereum 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/ share-this-article categories Tecnologia tags Bitcoin