Como redigir seu primeiro contrato inteligente?



Aprenda os fundamentos do Desenvolvimento de contrato inteligente e comece a escrever seu primeiro contrato inteligente. Você também saberá como testar o contrato inteligente.

No , você aprendeu o que são Contratos Inteligentes, diferentes Linguagens de Contratos Inteligentes e como configurar um Ambiente de Desenvolvimento de Contratos Inteligentes. Neste artigo, você aprenderá como construir seu primeiro contrato inteligente. Eu estarei usandoRemix IDE para desenvolver e testar um contrato inteligente.

Os tópicos abaixo são abordados neste tutorial de desenvolvimento de contrato inteligente:





Construindo seu Contrato Inteligente

Um contrato inteligente de pedido de compra simples será desenvolvido como parte desta série de blog. Conforme esta série avança e novos conceitos de linguagem de programação de solidez são introduzidos, o contrato inteligente de pedido de compra irá evoluir e melhorar.



Estrutura do Contrato Inteligente

O contrato inteligente de solidez, em essência, é uma coleção de

  • dados - que mantém o estado atual do contrato
  • função - que aplicam a lógica para fazer a transição do estado do contrato

Os contratos inteligentes de solidez seguem uma estrutura padrão. Qualquer contrato inteligente começa com a seguinte declaração



Diretiva Pragma

A palavra-chave “pragma” pode ser usada para habilitar certos recursos ou verificações do compilador. A declaração abaixo define que o arquivo de origem (contrato inteligente) não será compilado com o compilador anterior a 0.4.0 e a versão do compilador posterior a 0.6.0. Essa declaração garante que nenhum comportamento indesejado seja introduzido quando uma nova versão do compilador for introduzida.

solidez do pragma> = 0,4.0<=0.6.0 

Declaração de contrato

O contrato é declarado usando a palavra-chave “contrato”. Isso declara um contrato vazio que é identificado pelo nome “PurchaseOrder”.

contrato PurchaseOrder {}

Armazenamento de dados relevantes para o contrato

Cada contrato ou, em termos genéricos, cada programa pode exigir o armazenamento de alguns dados. Adicionar dados ao programa fornece um nível de flexibilidade. Mudar de valores embutidos no programa no programa para valores fornecidos pelo usuário é um recurso importante. As variáveis ​​permitem que você armazene os dados, rotule os dados, recupere os dados e manipule os dados.

Desenvolvimento de Contrato Inteligente: Apresentando Variáveis

Em solidez, as variáveis ​​são de dois tipos

  1. Tipo de valor: Esses tipos de variáveis ​​são passados ​​por valor, ou seja, sempre são copiados quando são usados ​​como argumentos de função ou em atribuições. Por exemplo: inteiros, endereço booleano, etc.
  2. Tipos de referência: Esses tipos de variáveis ​​são de tipos complexos e são passados ​​por referência, essas variáveis ​​não cabem em 256 bits e devem ser gerenciadas com cuidado, pois copiá-las é caro.

Adicionando dados ao Contrato Inteligente

Vamos adicionar algumas variáveis ​​de dados ao contrato. Para cada pedido de compra, deve haver alguma quantidade de produto associada a ele. Vamos adicionar uma variável product_quantity que será do tipo de dados inteiro ou número.

valores de array de impressão php apenas

A variável que estamos introduzindo agora é um inteiro sem sinal e é representada por uint256, 256 aqui significa o armazenamento de 256 bits.

  • VOCÊ - não assinado (o que significa que este tipo só pode representar inteiros positivos, não inteiros positivos e negativos)
  • INT - inteiro
  • 256 - 256 bits de tamanho
  • o valor mínimo uint256 pode ser atribuído é 0
  • o valor máximo uint256 que pode ser atribuído é 2 ^ 256-1 [um número muito grande]

A quantidade do produto é apenas um valor positivo e a suposição atual é que iremos fornecer um valor muito grande para a quantidade do produto.

A variável “product_quantity” declarada faz parte do estado do contrato e, portanto, é persistida ou armazenada no espaço do contrato. Atualmente, o valor padrão desta variável é 0.

contrato PurchaseOrder {uint256 product_quantity}

Definindo o construtor

O construtor é chamado quando o contrato é implantado. O construtor inicializa o contrato com alguns valores. No cenário atual, a quantidade do produto é definida como 100, quando o contrato é implantado. Um construtor parametrizado também pode ser criado passando uma variável e inicializando product_quantity usando o valor passado.

O ponto principal a ser observado aqui é o modificador de acesso “público” associado ao construtor. A palavra-chave pública especifica que qualquer pessoa pode acessar esta função, esta não é uma função restrita.

construtor () public {product_quantity = 100}

Adicionando funções

Vamos agora adicionar funções para tornar nosso programa interativo. Funções são recursos controlados que podem ser adicionados a um programa. Qualquer função é precedida por função de palavra-chave. No geral, é assim que a declaração da função se parece' função ”.

Obter função

Um dos requisitos mais comuns, para qualquer um dos programas, é ler o valor armazenado. No contrato a seguir, vamos precisar ler o valor “product_quantity”. Para fornecer esse recurso, uma função de leitura ou uma função de obtenção é adicionada. Nesta função, não estamos fazendo nenhuma manipulação ao valor armazenado, apenas recuperando o valor armazenado.

Vamos agora quebrar nossa função get (get_quantity)

Não. Palavra-chave Valor
1 get_quantity (){nenhum parâmetro é passado}
2 público{qualquer pessoa pode acessar a função}
3 Visão{significa que a função apenas lê o estado do contrato, não altera o estado do contrato, portanto, ver}
4 retorna uma variável do tipo uint256 {define o que é retornado pela função}
function get_quantity () public view retorna (uint256) {return product_quantity}

Funções de setter

A leitura dos dados é necessária e já foi realizada na última seção, mas a maior parte do cenário também requer a capacidade de gravar / atualizar os dados. Esse recurso específico é fornecido adicionando uma função configuradora. Esta função obtém um valor do usuário na forma de um parâmetro de entrada. Usando o valor fornecido à função pelo usuário, o valor da variável “product_quantity” é gravado / atualizado.

Vamos agora detalhar nossa função definida (update_quantity)

Adicionando uma função para atualizar o valor da quantidade do produto

Não. Palavra-chave Valor
1 update_quantity (valor uint256){o valor do parâmetro do tipo uint256 é passado}
2 público{qualquer pessoa pode acessar a função}
3 Não é necessário, pois o estado está sendo atualizado pelas funções
4 retorna uma variável do tipo uint256 (definido o que é retornado pela função)
função update_quantity (uint256 value) public {product_quantity = product_quantity + value}

Juntando tudo isso, é assim que o contrato geral deve ser.

solidez do pragma> = 0,4.0<=0.6.0 contract PurchaseOrder{ uint256 product_quantity //state variable /*Called with the contract is deployed and initializes the value*/ constructor() public{ product_quantity = 100 } // Get Function function get_quantity() public view returns(uint256){ return product_quantity } // Set Function function update_quantity(uint256 value) public { product_quantity = product_quantity + value } } 

Implementando o Contrato Inteligente

iso 9000 vs six sigma

É hora de testar o contrato inteligente. Para testar este contrato inteligente, usaremos Remix Online IDE .

Remix é um playground online para contrato inteligente ethereum . Remix é totalmente baseado em navegador. O Remix fornece a você um IDE (ambiente de desenvolvimento integrado) online onde você pode escrever seus contratos inteligentes. O Remix fornece a você um recurso de compilador de solidez online. O contrato inteligente no Remix IDE pode ser compilado sem problemas usando uma versão específica do compilador.

O Remix também oferece a capacidade de testar rapidamente o contrato inteligente.

O Remix fornece um conjunto de ferramentas completo para iniciar o desenvolvimento do contrato inteligente e testar a unidade do contrato inteligente, sem fazer nenhuma instalação em sua máquina local. Isso é de grande utilidade para começar com solidez, já que os desenvolvedores só precisam se concentrar em escrever um contrato inteligente, em vez de se preocupar com a infraestrutura.

Com o Remix IDE, tudo o que você precisa é de um navegador e uma conexão com a Internet para começar a desenvolver um contrato inteligente. Desenvolvimento, teste e validação rápidos de uma ideia para um contrato inteligente.

Remix recentemente atualizou sua interface do usuário.

Remix-UI-Smart-Contracts-Edureka

Clique no ícone do arquivo, conforme destacado na imagem acima, o explorador de arquivos será aberto.

  1. Clicando no ícone de mais, um novo arquivo pode ser criado, nomeie o arquivo PurchaseOrder.sol
  2. Isso criará um arquivo vazio chamado PurchaseOrder.sol, clique e abra este arquivo.
  3. Vamos copiar e colar todo o contrato no PurchaseOrder.sol.
  4. Clique no segundo ícone, no menu esquerdo logo abaixo do ícone do arquivo, a opção do compilador de solidez deve aparecer.
  5. No rótulo Compiler, selecione a versão do compilador. A versão atualmente selecionada é 0.5.8.
  6. Após a seleção da versão do compilador, clique em “Compile PurchaseOrder.sol”. Isso irá compilar o contrato inteligente.

7. Assim que o contrato inteligente for compilado com sucesso, clique no botão “Detalhes da compilação” e os seguintes detalhes devem aparecer. Após a compilação, duas informações importantes são disponibilizadas

    • ABI - Interface binária do aplicativo. Este é um arquivo json que detalha todos os métodos expostos no contrato inteligente, juntamente com os metadados dos métodos. Mais sobre isso será discutido nos blogs subsequentes.
    • Bytecode- Código de operação EVM (máquina virtual Ethereum), a lógica de contrato inteligente é convertida em bytecode na compilação.

8. Para testar o contrato inteligente, ele precisa ser implantado. Para implantar o contrato inteligente, clique no próximo ícone no menu à esquerda, abaixo do ícone de compilação. A tela a seguir aparecerá. Para testar o contrato inteligente, o contrato inteligente precisa ser implantado. Para implantar o contrato inteligente, clique no próximo ícone no menu à esquerda, abaixo do ícone de compilação. A tela a seguir aparecerá.

Opção de implantação

A tela de implantação fornece algumas opções, vamos examiná-las uma por uma.

  • Ambiente: pode ser considerada uma opção semelhante à escolha de comprar um laptop da Amazon, Flipkart, Newegg (todos eles são revendedores online), você escolhe onde deseja comprar, com base em suas necessidades. Da mesma forma, no caso do Remix, temos a opção de implantar o contrato inteligente e testar o contrato inteligente. A lista suspensa ao lado do rótulo do ambiente oferece três seleções
    • JavaScript VM - um único nó local Ethereum é girado na memória do navegador e fornece 5 contas de teste pré-financiadas que podem ser usadas para a transação (implantação, funções de chamada)
    • Fornecimento Web3 injetado - depende do MetaMask. Metamask é como um corretor ou intermediário, o que permite que os aplicativos da web interajam com o contrato inteligente. Metamask fornece capacidade para gerenciar as identidades e também assinar as transações a serem enviadas para a rede ethereum. Este intermediário ou 3rdA parte fornecer ajuda a determinar a rede de blockchain em que o contrato inteligente será implantado.
    • Provedor Web3 - se você estiver executando um nó Ethereum local e o endpoint RPC estiver disponível, esta opção pode ser usada. O contrato inteligente será implantado no nó local da Ethereum.
  • Contas: essas informações são preenchidas com base no ambiente selecionado. Por exemplo. JavaScript VM fornece 5 contas de teste pré-financiadas. No caso de provedor Web3 e Web3 injetado, não forneça contas de teste pré-financiadas.
  • Limite de gás: define a quantidade máxima de gás que o iniciador está disposto a gastar em qualquer transação. Este é o local para proteção contra loop infinito e esgotamento de todos os fundos da conta em caso de condição de loop infinito.
  • Valor: o valor que pode ser necessário para enviar durante a implantação do contrato inteligente. Este é um valor opcional.

Para implantar o contrato, selecione a opção JavaScript VM, selecione a primeira conta na lista suspensa de contas, observe o saldo da conta (100 ether).

Certifique-se de que o nome do contrato inteligente que aparece é PurchaseOrder, clique em implantar. Principais ações que acontecerão

  1. O saldo da conta muda de 100 ether para 99,999999 ether, o valor deduzido é o custo da transação para implantar o contrato inteligente.
  2. Sob o contrato implantado, um novo bloco para contrato inteligente aparecerá, que também fornecerá o endereço do novo contrato inteligente algo como este (0x692a70d2e424a56d2c6c27aa97d1a86395877b3a)
  3. Na janela do console a seguinte informação aparecerá
    1. Hash de transação - identifica exclusivamente a implantação do contrato
    2. Custo de transação
    3. Endereço do contrato

Interagindo com o contrato implantado

  1. No contrato implementado, os dois métodos de interação a seguir estão disponíveis update_quantity e get_quantity.
  2. Ambos os métodos de interação são os métodos públicos definidos no contrato de “Ordem de Compra”.
  3. O método “update_quantity” da quantidade de atualização requer um parâmetro de entrada, portanto, a caixa de entrada.
  4. O método de obtenção da quantidade “get_quantity” recupera o valor de product_quantity.
  5. Vamos verificar o que acontece quando get_quantity é invocado, o valor de retorno 100 é mostrado, que foi inicializado no construtor. Isso não faz com que uma transação aconteça
  6. Vamos invocar update_quantity e fornecer 30 como entrada. Isso faz com que uma transação aconteça

Em suma, qualquer operação que cause operação de gravação no estado do contrato (ou seja, altera as variáveis ​​do contrato) resultará em uma transação.

instrução c ++ goto

Qualquer operação que apenas leia o estado do contrato não causa uma transação.

Conclusão inteligente de desenvolvimento de contrato

Com isso, acabamos de criar nosso primeiro contrato inteligente, apenas arranhando a superfície da solidez. Acabamos de ver o que é necessário para testar o contrato inteligente desde a implantação do contrato inteligente até o início das transações.

No próximo blog, que é uma continuação da série de desenvolvimento de contratos inteligentes, vamos nos aprofundar nos fundamentos de solidez, dando um mergulho mais profundo na implantação de contratos inteligentes.

Com isso, concluo este Contrato Inteligente blog de desenvolvimento. Espero que tenham gostado de ler este blog e o tenham achado informativo.

EuSe você deseja aprender Contratos Inteligentes, construir uma carreira no domínio do Blockchain e ganhar experiência em programação Ethereum, inscreva-se no live-online aqui, ele vem com suporte 24 horas por dia, 7 dias por semana para orientá-lo durante o período de aprendizado.

Tem alguma questão para nós? Mencione isso na seção de comentários de 'Desenvolvimento de contrato inteligente' e entraremos em contato com você em brevest.