Ethereum - Guia Rápido

Um grande sucesso do Bitcoin despertou o interesse de vários em criar suas próprias moedas. Olhando para as vantagens oferecidas pelo Bitcoin - uma moeda digital, as pessoas queriam usar o conceito de Blockchain em seus próprios aplicativos. As pessoas queriam mudar de seus contratos físicos para contratos digitais inteligentes, onde várias questões como repúdio, transparência, segurança, etc. seriam resolvidas automaticamente. O resultado desse esforço resultou na criação de Ethereum - uma plataforma popular para a criação de aplicativos Blockchain distribuídos que suportam contratos inteligentes.

Neste tutorial, você aprenderá a criar um aplicativo distribuído (DAPP) na plataforma Ethereum. Mais especificamente, você aprenderá como escrever um contrato, testá-lo em um Blockchain local e, finalmente, implantá-lo em um Blockchain externo para testes profundos e uso comercial. Você vai usarSolidity, uma linguagem orientada a objetos para desenvolvimento de contratos. Você também vai usarRemix, um IDE de código aberto para desenvolver e testar contratos. Para implantar o contrato testado em um Blockchain externo, você usaráGanache. Para interagir com o contrato, você precisará de um aplicativo cliente. Nós vamos usarMyEtherWalletpara criar uma carteira para cada um desses clientes. O criador do contrato publicará o contrato. Qualquer outro cliente verá o valor do contato usando a interface fornecida pelo contrato e enviará algum dinheiro ao criador para executar uma parte do contrato.

Portanto, vamos começar escrevendo o contrato.

Existem várias ferramentas disponíveis para desenvolver e testar contratos. Uma das ferramentas mais simples é fornecida no próprio site oficial da Ethereum. A ferramenta é chamadaRemix, usaremos isso para o desenvolvimento de nosso contrato.

Remix para desenvolvimento de contrato

Abra o Remix IDE digitando a seguinte URL em seu navegador.

https://remix.ethereum.org

A tela a seguir aparecerá.

Na janela central, você verá algum código padrão, que é um código de amostra do Solidity. Você digitará seu código de contrato neste editor de código. Seu código pode ser compilado automaticamente. Após a compilação bem-sucedida do código, você poderá executar o código no mesmo IDE. Ao executar os métodos de contrato, os resultados serão exibidos na mesma janela do IDE. Existem recursos para depurar o código e para testar a unidade de seu projeto. Eles podem ser vistos na barra de menu no lado superior direito, conforme mostrado na captura de tela do IDE abaixo. Você usará essas opções em breve.

Agora você vai começar a escrever seu contrato.

Solidity é uma linguagem orientada a objetos desenvolvida especialmente para a redação de contratos. É uma linguagem de alto nível, que herda características de C ++, Python e JavaScript. O compilador Solidity compila seu código-fonte em bytecode que roda na Máquina Virtual Ethereum (EVM).

Para uma compreensão rápida da sintaxe do Solidity, veja o código de amostra no IDE.

pragma solidity >=0.4.22 <0.6.0;
contract Ballot {

A primeira linha é uma diretiva para o compilador. A segunda linha inicia a definição do contrato. Dentro do contrato, você declara variáveis ​​como -

address chairperson;

Você também pode definir estruturas como Proposale criar uma matriz desses itens de estrutura. Examine isso na janela de código.

Você pode então definir um construtor que é chamado no momento de instanciar um contrato.

constructor(uint8 _numProposals) public {

Após o construtor, você definirá vários métodos, que são os métodos de contrato. No contrato de amostra,giveRightToVote é um desses métodos com a seguinte sintaxe -

function giveRightToVote(address toVoter) public {

o public A palavra-chave torna este método publicamente invocável por qualquer cliente que tenha acesso ao contrato.

Da mesma forma, o contrato de amostra define mais três métodos chamados delegate, votee winningProposal. Examine-os para sua própria compreensão da sintaxe do Solidity. Estes são os pré-requisitos para redigir seu próprio contrato. Explicar a sintaxe completa do Solidity está além do escopo deste tutorial.

Vamos nomear nosso contrato MyContract como na seguinte declaração -

contract MyContract {

Declararemos duas variáveis ​​da seguinte forma -

uint amount;
uint value;

A variável amountirá reter o dinheiro acumulado enviado pelos executores do contrato ao criador do contrato. ovaluecampo conterá o valor do contrato. À medida que os executores executam o contrato, ovalue campo será modificado para refletir o valor do contrato equilibrado.

No construtor de contrato, definimos os valores dessas duas variáveis.

constructor (uint initialAmount, uint initialValue) public {
   amount = 0;
   value = 1000;
}

Como inicialmente o valor arrecadado no contrato é zero, definimos o amount campo para 0. Definimos o contrato value para algum número arbitrário, neste caso é 1000. O criador do contrato decide esse valor.

Para examinar o valor coletado em qualquer ponto do tempo, fornecemos um método de contrato público chamado getAmount definido como segue -

function getAmount() public view returns(uint) {
   return amount;
}

Para obter o valor do contrato equilibrado em qualquer ponto do tempo, definimos getBalance método da seguinte forma -

function getBalance() public view returns(uint) {
   return value;
}

Finalmente, escrevemos um método de contrato (Send). Ele permite que os clientes enviem algum dinheiro ao criador do contrato -

function send(uint newDeposit) public {
   value = value - newDeposit;
   amount = amount + newDeposit;
}

A execução do send método irá modificar ambos value e amount campos do contrato.

O código completo do contrato é fornecido abaixo -

contract MyContract {
   uint amount;
   uint value;

   constructor (uint initialAmount, uint initialValue) public {
      amount = 0;
      value = 1000;
   }
   function getBalance() public view returns(uint) {
      return value;
   }
   function getAmount() public view returns(uint) {
      return amount;
   }
   function send(uint newDeposit) public {
      value = value - newDeposit;
      amount = amount + newDeposit;
   }
}

Depois de escrever o código do contrato completo, compilá-lo neste IDE é trivial. Basta clicar noAutocompile caixa de seleção no IDE conforme mostrado na captura de tela abaixo -

Alternativamente, você pode compilar o contrato clicando no botão com o título “Start to compile”.

Se houver algum erro de digitação, corrija-o na janela de código. Certifique-se de que o código seja compilado totalmente sem erros. Agora, você está pronto para implantar o contrato.

Neste capítulo, aprenderemos como implantar contrato no Ethereum. Clique na opção de menu Executar para implantar o contrato. A tela a seguir aparecerá.

O nome do contrato é mostrado na caixa de listagem realçada. Abaixo disso, você notará oDeploybotão, clique nele para implantar o contrato. O contrato será implantado no Blockchain integrado ao Remix. Você poderá ver o contrato implantado na parte inferior da tela. Você pode ver isso na parte destacada da imagem abaixo.

Observe a presença de três nomes de métodos nesta região destacada. Em seguida, você irá interagir com o contrato executando os métodos de contrato.

Ao clicar no contrato implantado, você verá os vários métodos públicos fornecidos pelo contrato. Isso é mostrado na imagem abaixo.

O primeiro método sendcontém uma caixa de edição na frente dele. Aqui, você digitará os parâmetros exigidos pelo método de contrato. Os outros dois métodos não aceitam parâmetros.

Enviando dinheiro

Agora, insira um valor como 100 na frente do sendfunção vista na janela do contrato. Clique nosendbotão. Isso executará o contratosend método, reduzindo o valor do contrato value campo e aumentando o valor do amount campo.

Examinando o valor do contrato

O anterior send money ação reduziu o valor do contrato em 100. Agora você pode examinar isso invocando o getBalancemétodo do contrato. Você verá a saída quando clicar nogetBalance botão como mostrado na imagem abaixo -

O contrato value agora é reduzido para 900.

Examinando o valor coletado

Nesta seção, examinaremos a quantidade de dinheiro arrecadada até agora neste contrato. Para isso, clique nogetAmountbotão. A tela a seguir aparecerá.

o amount o valor do campo mudou de 0 para 100.

Tente alguns send operações e examinar o contrato value e a amount campos para concluir que o contrato implantado está sendo executado conforme o esperado.

O Remix IDE que você usou até agora é bom o suficiente para desenvolvimento e teste inicial do seu contrato. Para contratos da vida real, você precisa testar sua funcionalidade em relação a vários parâmetros. O Remix não pode criar contas de usuário reais (sem teste) para transferir fundos entre eles. Você não tem controle sobre a configuração do Blockchain criado pelo Remix. Você não pode nem monitorar a execução das transações.

O Remix perde várias operações avançadas. Portanto, precisamos implantar nosso contrato em um Blockchain mais sofisticado que forneça todos esses recursos. Um desses Blockchain éGanache que você aprenderá em nosso capítulo subsequente.

Ganache é usado para configurar um Ethereum Blockchain pessoal para testar seus contratos Solidity. Ele oferece mais recursos quando comparado ao Remix. Você aprenderá sobre os recursos quando treinar com o Ganache. Antes de começar a usar o Ganache, você deve primeiro baixar e instalar o Blockchain em sua máquina local.

Baixando Ganache

Você pode baixar o Ganache no seguinte URL -

https://truffleframework.com/ganache

Ganache está disponível em várias plataformas. Desenvolvemos e testamos todo este tutorial no Mac. Portanto, as imagens abaixo mostrarão a instalação do Mac. Quando você abre o URL de instalação fornecido acima, ele detecta automaticamente o sistema operacional da sua máquina e o direciona para a instalação binária apropriada. A imagem abaixo mostra a instalação do Mac.

Ao clicar no botão DOWNLOAD, o download do arquivo DMG para a instalação do Mac será iniciado.

Instalando Ganache

Localize o “Ganache-2.0.0.dmg” na pasta Downloads e clique duas vezes nele para instalar o Ganache. Após a instalação bem-sucedida, a seguinte tela aparecerá -

Arraste o ícone Ganache para a pasta de aplicativos. Agora, o Ganache está disponível como um aplicativo em seu Mac.

Se você estiver usando algum outro sistema operacional, siga as instruções fornecidas para uma instalação bem-sucedida.

Começando Ganache

Agora localize Ganache em sua pasta de aplicativos e clique duas vezes em seu ícone para iniciar o Ganache.

Ganache Desktop

Quando o Ganache for iniciado, a tela do Ganache aparecerá conforme mostrado abaixo -

Clique QUICKSTART para iniciar o Ganache. Você verá o console Ganache conforme mostrado abaixo -

O console na imagem acima mostra duas contas de usuário com saldo de 100 ETH (Ether - uma moeda para transações na plataforma Ethereum). Ele também mostra uma contagem de transações de zero para cada conta. Como o usuário não realizou nenhuma transação até agora, essa contagem é obviamente zero.

Agora teremos uma visão geral de algumas telas importantes do Ganache que são de relevância imediata para nós.

Clique no ícone de configurações no lado superior direito da tela, conforme mostrado na imagem abaixo -

A tela de configurações do servidor aparecerá conforme mostrado abaixo -

Aqui, você poderá definir os valores do endereço do servidor e o número da porta do seu servidor Ganache. Por enquanto, deixe-os com seus valores padrão. A ID de rede é um identificador Blockchain interno do servidor Ganache; deixe isso com seu valor padrão. oAutominebotão está no estado ON, indicando que as transações seriam processadas instantaneamente. Se você desligou, será solicitado que você insira o tempo em segundos após o qual os blocos serão minerados.

Conta e chaves

Quando você clica no Accounts & Keys opção de menu, você verá a seguinte tela -

Aqui você seria capaz de seto saldo padrão para cada conta. O valor padrão é 100. Isso agora explica porque você viu 100 ETH exibido para cada conta na captura de tela do Desktop. Você também pode definir o número de contas nesta tela. O valor exibido nesta imagem é 2 e é por isso que o desktop mostrou apenas duas contas.

Agora, vamos trabalhar com a tela de duas configurações; o conhecimento de como esses dois funcionam seria suficiente. Reinicie o servidor clicando noRESTARTbotão no lado direito da tela. Agora você retornará à tela da área de trabalho. Tente inserir valores diferentes nos dois campos acima, reinicie o servidor e veja seu efeito.

Agora vamos entender brevemente o que está disponível no desktop Ganache. Na área de trabalho, na parte superior, temos várias opções de menu, das quais algumas são de relevância imediata para nós. A barra de menu é destacada na imagem abaixo -

Clicando no TRANSACTIONSmenu mostra todas as transações realizadas até o momento. Você estará realizando transações em breve. Agora, volte para a tela acima e verifique as transações de vez em quando. Uma tela de transação típica é mostrada abaixo -

Da mesma forma, quando você clica no BLOCKSmenu, você verá os vários blocos minados. Considere a seguinte captura de tela para entender como o menu BLOCKS se parece -

Clique no LOGScardápio. Isso abrirá o log do sistema para você. Aqui, você pode examinar as várias operações que executou no Ethereum Blockchain.

Agora, como você entendeu como usar o Ganache para configurar um Ethereum Blockchain privado, você criará alguns clientes que usariam este Blockchain.

Para aplicação cliente, você usará MyEtherWallet.

Baixar MyEtherWallet software a partir do seguinte URL -

https://github.com/kvhnuke/etherwallet/releases/tag/v3.21.06

Se necessário, descompacte o arquivo baixado e abra index.html. Você verá a seguinte interface para criar uma nova carteira.

Neste capítulo, aprenderemos como criar uma carteira Ethereum. Para criar uma nova carteira, digite uma senha de sua escolha e clique no botão “Create New Wallet”. Ao fazer isso, uma carteira será criada. Uma carteira digital é essencialmente a geração de um par de chaves pública / privada que você precisa armazenar em um local seguro. A criação da carteira resulta na seguinte tela -

Clique no “Download Keystore File (UTC / JSON)”botão para salvar as chaves geradas. Agora, clique no“I understand. Continue”botão. Sua chave privada aparecerá na tela como pode ser visto na imagem abaixo -

Clique no “Print Paper Wallet”botão para manter um registro físico da chave privada de sua carteira. Você precisará disso mais tarde para desbloquear a carteira. Você verá a seguinte tela. Não perca esta saída.

Para desbloquear sua carteira, clique no “Save Your Address”botão. Você verá a seguinte tela.

A carteira pode ser desbloqueada usando a opção Chave Privada, conforme destacado na tela acima. Corte e cole a chave privada da captura de tela anterior e clique no botão Desbloquear. Sua carteira será desbloqueada e você verá uma mensagem aparecer na parte inferior da tela. Como a carteira não contém nada no momento, desbloquear a carteira não é realmente útil para nós neste momento.

Você acabou de criar uma carteira; esta carteira é uma interface de cliente para o Blockchain. Vamos anexar a carteira ao Blockchain Ganache que você iniciou na lição anterior. Para fazer isso, clique noNetwork caixa suspensa conforme mostrado na imagem abaixo -

Vá para o final da lista. Você verá uma opção para“Add Custom Network / Node”. Selecione este item.

Agora, uma tela aparecerá solicitando o endereço do servidor Ganache e a porta de escuta.

Digite os detalhes do servidor Ganache - http://127.0.0.1 e porta: 8545. Esses seriam os valores definidos por você na configuração do servidor Ganache. Dar umanamede sua escolha para este nó. Clique no“Save & Use Custom Node”botão. Você verá a mensagem de conexão na parte inferior da tela. Neste ponto, sua carteira está conectada com sucesso ao Ganache Blockchain.

Agora você está pronto para implantar o contrato neste Blockchain conectado.

Para implantar o contrato, selecione o Contracts opção de menu conforme mostrado na imagem abaixo -

Você precisará inserir o bytecode do contrato nesta tela. Lembre-se, quando você compila o código do seu contrato Solidity, ele gera um bytecode que roda no EVM. Agora você precisará obter este bytecode deRemix IDE.

Vá para a tela Remix IDE, seu contrato digitado anteriormente deve estar lá na janela de código. Caso contrário, digite novamente o contrato na janela de código. Clique no botão Bytecode conforme mostrado na imagem a seguir -

O bytecode para sua fonte compilada é copiado para a área de transferência junto com algumas outras informações. Cole o código copiado em seu editor de texto favorito. A seguir está a captura de tela do editor de texto -

O valor do objecttag contém o bytecode desejado. Copie-o cuidadosamente, certificando-se de não copiar as aspas. O bytecode é realmente longo, então certifique-se de copiar até o último byte incluindo ele. Agora, cole este bytecode noDeploy Contract tela como mostrado abaixo -

o Gas Limit campo é definido automaticamente.

Abaixo do campo Limite de gás, você encontrará a seleção para acessar a carteira.

Agora, acesse a carteira usando o Private Keyda conta Ganache na qual este contrato será implantado. Para obter esta chave privada, volte aoGanachejanela. Clique nokeys ícone da primeira conta conforme mostrado abaixo -

Você verá a chave privada da conta do usuário nº 1, conforme mostrado na imagem abaixo -

Copie esta chave privada e cole-a na seção “Colar sua chave privada” conforme mostrado abaixo -

Você verá o “Unlock”botão na parte inferior da tela. Após o desbloqueio, uma mensagem de “sucesso” aparecerá na parte inferior da tela. Neste ponto, sua carteira está anexada à conta nº 1 do Ganache Blockchain.

Agora você está pronto para assinar e implantar o contrato. Clique no“Sign Transaction” botão como mostrado na imagem abaixo -

Assinar a transação gera e exibe ambos Raw e Signedtransações. Clique no“Deploy Contract”botão para implantar o contrato no Blockchain Ganache. Lembre-se de que o contrato é implantado pelo usuário da conta nº 1 do Ganache Blockchain. Portanto, o usuário da conta nº 1 se torna o criador do contrato. Antes de o contrato ser implantado, você será solicitado a confirmar a transação, pois pode custar algum dinheiro real se você implantar este contrato em um Ethereum Blockchain real público. Não se preocupe, para o Blockchain privado atual em execução em sua máquina local, não há dinheiro real envolvido. Clique noMake transaction botão como mostrado na imagem abaixo -

Examine o console Ganache; você verá que o saldo ETH na conta nº 1 foi reduzido, conforme mostrado na imagem abaixo -

Agora, clique no TRANSACTIONS menu conforme mostrado na imagem abaixo -

Você verá os detalhes da transação.

Nesta tela, você encontrará o endereço publicado do contrato. O endereço está marcado na imagem acima. Você distribuirá este endereço publicamente para permitir que outros saibam que seu contrato está disponível neste endereço especificado, ao qual eles podem se conectar e executar os métodos de contrato, como enviar dinheiro para você - o criador do contrato. Copie este endereço de contrato para sua própria referência, pois você precisará dele na próxima etapa.

Agora, você está pronto para interagir com o contrato que implantou. Volte para a área de trabalho MyEtherWallet e clique na guia "Interagir com o contrato", conforme mostrado na captura de tela abaixo -

Cole o endereço do contrato que você copiou anteriormente no “Contract Address”campo. Você também precisa colar o“ABI / JSON Interface” do contrato na tela acima.

Para obter o ABI, vou ao Remix janela e clique no ABI botão como mostrado na imagem abaixo.

A interface ABI / JSON será copiada para a área de transferência. Cole isso em seu editor favorito para examinar a interface gerada, que é mostrada abaixo -

ABI / JSON Interface
[
   {
      "constant": false,
      "inputs": [
         {
            "name": "newDeposit",
            "type": "uint256"
         }
      ],
      "name": "send",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
   },
   {
      "inputs": [
         {
            "name": "initialAmount",
            "type": "uint256"
         },
         {
            "name": "initialValue",
            "type": "uint256"
         }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
   },
   {
      "constant": true,
      "inputs": [],
      "name": "getAmount",
      "outputs": [
         {
            "name": "",
            "type": "uint256"
         }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
   },
   {
      "constant": true,
      "inputs": [],
      "name": "getBalance",
      "outputs": [
         {
            "name": "",
            "type": "uint256"
         }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
   }
]

Depois de colar este JSON no MyEtherWallet interface, você notará que o botão ACCESS abaixo da interface JSON agora está ativado, conforme mostrado abaixo -

Clique Access botão para acessar o contrato.

Ao clicar no Access, o endereço do contrato e a lista suspensa de seleção de função aparecerão na tela como no editor Remix. Isso é mostrado na imagem abaixo -

Você pode verificar as várias funções do contrato como no caso da implantação do Remix. Observe que o contato agora está implantado em um Ganache Blockchain externo. Verifica agetAmountfunção; você obterá o valor de Amount de zero e ogetBalance mostrará um saldo de 1000.

Agora tente enviar algum dinheiro. Vai apresentar a você umtexteditcontrole de entrada do valor. Quando você redige o contrato, um pouco de “gás” é usado e você será solicitado a confirmar a transação antes de escrevê-la no Blockchain. A transação seria executada em um curto espaço de tempo, dependendo do tempo de mineração definido por você no servidor Ganache. Depois disso, você pode reexaminar ovalue e a amount campos do contrato para verificar se eles foram realmente modificados.

Agora você pode examinar a área de trabalho do Ganache para ver as transações realizadas até o momento. Um exemplo de saída é mostrado abaixo -

Até agora, você foi o criador e o executor do contrato. Isso não faz muito sentido, pois você espera que outros usem seu contrato. Para isso, criaremos outro cliente para nosso Blockchain Ganache e enviaremos algum dinheiro da conta 2 recém-criada para o criador do contrato na conta 1.

Neste capítulo, aprenderemos a criação de usuários contratados no Ethereum. Para criar um usuário para nosso contrato publicado, criaremos outroMyEtherWalletcliente anexado ao mesmo Ganache Blockchain que você usou nas etapas anteriores. Vou aoMyEtherWallet tela e criar uma nova carteira.

Clique no contracts menu e selecione o “Interact with Contract”opção como no caso anterior. Observe que esse novo usuário irá simplesmente interagir com o contrato já publicado e não implantará seu próprio contrato. Especifique o endereço do contrato e a ABI que você usou no caso anterior.

Agora clique Access botão e invocar send método. Quando solicitado, insira algum valor, digamos 100 ETH, para ser enviado. Envie a transação. Após o envio, a tela a seguir aparecerá.

Para anexar este novo cliente ao nosso Ganache Blockchain, vá para o console do Ganache. Clique no ícone de chaves da conta nº 2, conforme mostrado na imagem a seguir -

Você obterá a chave privada para a conta nº 2.

Copie a chave que você recebeu e use-a em sua carteira recém-criada, conforme mostrado aqui -

Clique no Unlock botão para anexar a carteira.

Quando a carteira for desbloqueada com sucesso, escreva a transação de envio desejada.

Gere a transação clicando no “Generate Transaction” botão.

Makea transação e espere algum tempo para que ela reflita no Blockchain. Agora, execute“getAmount”, o valor mostrado deve ser 200 agora.

Executar “getBalance”. ovalue campo agora deve ser 800.

Examine o log de transações para ver as várias transações realizadas por diferentes usuários.

Você aprendeu a escrever seu próprio contrato digital no Solidity. Você desenvolveu e testou a interface do contrato no Remix IDE. Para mais testes multiusuário, você implantou este contrato no Ganache Blockchain. No Ganache, você criou duas contas de usuário. A primeira conta foi usada para publicar o contrato. A segunda conta foi usada para consumir o contrato.

O que vem a seguir?

O Ganache Blockchain que você usou em todo o processo é privado e local para sua máquina. Assim que estiver totalmente satisfeito com o funcionamento do contrato, você pode continuar a publicá-lo em um Ethereum Blockchain da vida real. No entanto, isso exigiria que você gastasse dinheiro de verdade. No aplicativo demo, usamos 1000 ETH como padrão para cada conta de usuário no Ganache. Ao implantar seu contrato em um Blockchain da vida real, você terá que comprar a ETH convertendo a moeda do seu próprio país em ETH. Essa moeda ficará armazenada em sua carteira e você poderá gastá-la da maneira que desejar.