Programação em blockchain: solidez. Programando os Smart Contracts

Em mais de 10 anos de seu desenvolvimento, o blockchain se expandiu significativamente de um sistema simples de transferência de valor por meio de moedas para a base para a Web 3.0 e aplicativos descentralizados. Isso aconteceu principalmente devido a um surto de novos projetos depois que a Ethereum introduziu seu padrão ERC20 e contratos inteligentes.

Contratos inteligentes foram amplamente usados ​​na arrecadação de fundos para ICOs, a fim de garantir transparência aos participantes. Isso os tornou famosos, mas essa não foi a única implementação. Existem casos de sucesso para contratos inteligentes na criação de organizações autônomas distribuídas, gerenciamento de direitos e condução da governança. A necessidade deles é tão aparente que até existem tentativas de criar contratos inteligentes para Bitcoin.

Se você quiser fazer isso na engenharia de blockchain, terá que saber como os contratos inteligentes funcionam e como construí-los. Felizmente, o Ethereum fornece tudo o que é necessário para isso, incluindo sua própria linguagem de programação – Solidity. Esta linguagem foi criada especificamente para trabalhar com a Máquina Virtual Ethereum. É muito fácil de entender, mas existem alguns recursos distintos que você deve manter em mente. Hoje vamos mergulhar fundo no mundo dos contratos inteligentes e codificar alguns deles. Vamos rolar!

Como funciona o Ethereum?

Em primeiro lugar, precisamos entender os fundamentos do blockchain do Ethereum e como ele funciona. Isso nos ajudará a entender a diferença entre a codificação de aplicativos centralizados e descentralizados (que basicamente são os contratos inteligentes).

Em seu núcleo, o Ethereum possui uma máquina virtual. Você provavelmente os encontrou antes ao iniciar jogos antigos em um emulador ou executar algum software específico do sistema operacional no sistema operacional não nativo. Em termos simples, uma máquina virtual é um computador dentro de um computador, que usa o hardware da máquina original. No caso do Ethereum, o EVM utiliza recursos de computadores conectados à rede (nós). Como qualquer outra VM, a do Ethereum tem sua própria RAM e ROM, que são usadas por programas executados em cima dela. A única exceção significativa é que a memória ROM do EVM é blockchain, então, uma vez que algo chega lá, não pode ser removido.

Por que isso é importante? Criar contratos inteligentes é uma responsabilidade incrível porque, caso haja uma vulnerabilidade, o dinheiro dos usuários pode ser roubado ou perdido. Embora você possa corrigir ou substituir completamente o código em um servidor centralizado, você não pode fazer isso em uma VM descentralizada. Além disso, toda ação realizada com um contrato inteligente exige o pagamento de taxas à rede. Por quê? Porque o EVM tem que processar uma determinada tarefa, e só pode fazer isso utilizando o poder de processamento de alguns nós. As taxas são chamadas de gás e são pagas em Gwei, que são semelhantes ao Satoshi do Bitcoin.

Como funciona um contrato inteligente?

Se você já usou o Ethereum, gerou uma carteira na rede pelo menos uma vez. Sua carteira é basicamente uma conta representada por um endereço. Um contrato inteligente também é uma conta, mas difere de uma conta normal.

Depois de criar uma carteira, você pode conectá-la a qualquer uma das redes disponíveis e a única coisa que mudará é o seu saldo. Isso ocorre porque os endereços de usuário não são internos a nenhuma rede – eles existem em paralelo. Por outro lado, uma instância de um contrato inteligente está incluída em uma determinada blockchain e não pode ser visualizada em outra cadeia. Para poder lançar um contrato na Rede Principal depois de testá-lo, digamos em Rinkeby, seu criador precisará implantar uma nova instância do contrato. Isso exigirá a compilação do código-fonte mais uma vez. Um criador de contrato pode fazer quantas instâncias do código quiser, desde que tenha ETH suficiente para pagar o gás para interagir com a rede.

Assim como um aplicativo centralizado, um contrato inteligente tem um local dedicado para armazenar seus recursos e um espaço reservado para o código (imagine-o como uma página da web que você baixa da internet, terá um arquivo.html e algumas pastas com fotos e outros material). Também há uma indicação de quanto ETH um contrato tem em seu saldo; isso é crucial para vários casos de uso, como arrecadação de fundos, testamentos, etc. O esquema completo é apresentado na imagem abaixo.

Ethereum EVM & amp; Esquema de carteiraImagem de U.Today

Como construir um contrato inteligente?

Agora que conhecemos os princípios de como o Ethereum funciona e como os contratos inteligentes funcionam dentro dele, podemos criar um por nós mesmos. Primeiro, precisaremos configurar o ambiente adequado. Você pode seguir dois caminhos, escrevendo o código no navegador com o Remix IDE fornecido pela Ethereum Foundation ou baixando um aplicativo de codificação de sua escolha junto com alguns pacotes para ele. Para o propósito deste tutorial, mostraremos Remix e Atom (um aplicativo de codificação universal para Mac & Janelas).

O primeiro contrato inteligente que faremos levará os nomes de diferentes modelos de carros e sua potência. O que queremos ver são dois campos de entrada e dois campos de saída para os valores que temos. Como vamos alterar as entradas, precisamos definir variáveis ​​de dois tipos: uma string para os nomes e um inteiro para a potência.

Antes do nosso contrato, colocaremos uma linha que especifica a versão do idioma, pois isso ajudará o compilador a adaptar o código corretamente. Compilar o código é necessário porque assim que chegarmos à fase de implantação, o código será adaptado ao código de máquina que o EVM será capaz de ler e processar. Além disso, será criada uma interface binária de aplicativo que poderá ser usada posteriormente na criação de um aplicativo descentralizado completo. Você sempre pode verificar a versão mais recente do Solidity em seu site oficial. Para especificá-lo, digite ‘solidez do pragma’ e a versão após o sinal ‘^’.

Para definir as fronteiras de nosso contrato, vamos dar a ele um nome seguido por um parêntese. Primeiro, vamos declarar duas variáveis: ‘modelo’ e ‘HP’. O primeiro será uma string que representa um modelo de carro e o segundo será um número inteiro que representa a potência de um determinado modelo de carro. Há duas coisas a serem mencionadas sobre as variáveis ​​em termos de solidez. A primeira é que devemos declarar se terceiros devem ou não ser capazes de vê-los, colocando “público” ou “privado” ao lado deles. O último é que os inteiros em Solidity podem ser assinados ou não. Um número inteiro sem sinal só pode ser possível e é escrito como ‘uint’. Um número inteiro com sinal pode ser positivo & negativo e é escrito como ‘int’.

Depois de especificar nossas variáveis, é hora de escrever algumas funções que nosso contrato inteligente executará. Em primeiro lugar, precisamos criar espaços reservados para nosso modelo e HP. Usaremos algumas funções públicas definidas e anexaremos nossas variáveis ​​a elas. Em segundo lugar, precisamos delinear algumas funções get public que retornarão uma entrada. Dê uma olhada na aparência de nosso contrato inteligente.

Modelo do veículo & amp; contrato inteligente de potênciaImagem de U.Today

Como fazer um token no Ethereum?

Muitas pessoas foram atraídas para a indústria de blockchain por causa dos ganhos ultrajantes no mercado de criptografia no final de 2017. Isso foi principalmente o resultado do advento do novo padrão de token ERC20 que um grande número de startups usaram para lançar seus tokens e aumentar dinheiro para o desenvolvimento. Apesar do declínio no hype, algumas empresas ainda estão lançando seus tokens no Ethereum e estão vendendo para colaboradores, provando que a demanda ainda existe. Se você sempre sonhou em construir uma startup e lançar seu token, esta parte será muito interessante.

Criar um token significa usar o padrão ERC20, que pode ser rapidamente pesquisado no Google. Não se esqueça de definir a versão do Solidity antes do próprio padrão. Haverá um conjunto de funções e alguns eventos que devem registrar ações no livro razão do Ethereum. Entre as funções, encontrará o conjunto de funções necessárias: uma para definir a oferta total, uma para verificar o saldo de uma determinada carteira e outra para transferir fichas entre carteiras. Como o Ethereum permite controlar carteiras de outras carteiras, você também encontrará funções que definem uma carteira de destino e permitem o saldo para transferência e aprovam uma transação. Salve em um arquivo.sol separado.

É hora de delinear nosso próprio token. Comece com as especificações da versão do Solidity. Em seguida, importe a interface e anexe-a a um novo contrato inteligente via ‘é’. Indo mais longe, iremos:

  • Primeiro, esboce o símbolo, o nome e o número de decimais nas variáveis. O número de decimais permite que o usuário transfira e armazene partes de um token, o número mais comum de decimais é 18. Todos eles devem ser visíveis aos usuários, por isso os tornamos públicos.

  • Em segundo lugar, definiremos o fornecimento total. No caso deste tutorial, ele será fixo e igual a um bilhão.

  • Terceiro, vamos fazer mapeamentos para verificar saldos em carteiras e abonos no caso de terceiros controlarem um endereço.

  • Quarto, definiremos uma função que será executada apenas uma vez na implantação do contrato (construtor) que dará ao nosso endereço todos os tokens que criaremos.

  • Quinto, precisamos criar várias funções que restringem o que temos na interface. O fornecimento total será obtido da variável que declaramos antes. Os saldos serão verificados de acordo com o mapeamento. A transferência só será permitida se o usuário possuir algum ETH e estiver enviando menos ou igual ao que realmente possui. O controle de outra carteira será feito de acordo com o mapeamento previamente definido e verificação do valor permitido. Verifique o código que obtivemos abaixo.

Token UTD ERC20Imagem de U.Today

Como lançar um contrato inteligente?

Agora você sabe codificar contratos inteligentes simples no Solidity. Vamos tentar entender como eles podem ser lançados na rede Ethereum. Primeiro, precisamos compilar o código. Para este propósito, você pode usar o compilador integrado do Remix ou fazê-lo em sua máquina com a ajuda do framework Truffle. Vamos pelo caminho mais fácil primeiro.

Antes de começarmos, é necessário que você crie uma conta Ethereum, caso ainda não o tenha feito. Para isso, recomendamos o uso da extensão Metamask, que pode ser instalada em cima dos navegadores Chrome, Opera, Firefox e Brave. Depois de criar uma carteira, certifique-se de salvar a frase semente, pois será a única maneira de acessar uma carteira de outras máquinas ou no caso de você ter que reinstalar a extensão. A vantagem do Metamask é que você pode alternar entre várias redes. Isso será útil, pois usaremos uma rede de teste para nossos experimentos. Abra a extensão e escolha a rede Ropsten. Então, vá até a torneira e peça um pouco de ETH, lembre-se que toda operação com EVM custa Wei.

Abra remix.ethereum.org. Você verá um código para uma cédula – feche a guia com ele. Remix tem um navegador dedicado para arquivos.sol e um compilador integrado. Na parte superior do navegador, há um ícone de cruz que permite a criação de novos arquivos. Vamos criar um arquivo e copiar nosso primeiro contrato inteligente com veículos e sua potência. Na parte direita da tela, você verá o compilador com algumas guias. Na primeira guia, selecione uma versão do compilador que corresponda à versão do Solidity que você especificou e inicie o processo de compilação. Se não houver erros, você receberá uma mensagem de ‘sucesso’. Selecione a segunda guia e você verá uma seção onde deve especificar um ambiente apropriado (no nosso caso, Web3) e verificar se o seu endereço está correto (deve vir de Metamask). Se tudo estiver correto, pressione ‘implantar’ e você receberá um pop-up do Metamask com uma transação. Confirme e pronto, seu contrato inteligente é implantado na rede.

Agora, para algo mais interessante. Se você usou um editor de texto em seu computador para escrever o código, pode implantá-lo localmente usando Node.js. Primeiro, baixe-o do site oficial ou instale via Linha de Comando (Windows) ou Terminal (OSX). No nosso caso, usaremos OSX, mas o processo é semelhante.

Instalando o Node.js.Imagem de U.Today

Em segundo lugar, instale o framework Solidity Truffle via ‘npm install’.

Instalando TruffleImagem de U.Today

Terceiro, faça uma nova pasta e crie um repo através do comando ‘init’.

Criação de um repositório de trufasImagem de U.Today

Quarto, instale HDWalletProvider neste repo via Node.js também.

Instalando HDWalletProviderImagem de U.Today

Quinto, copie os arquivos com a interface ERC20 e seu contrato de token para a pasta ‘contratos’ em seu repo. Sexto, crie o seguinte arquivo JavaScript na pasta ‘Migrations’ dentro do repo.

Arquivo de implantação JSImagem de U.Today

Sétimo, você precisa modificar seu arquivo de configuração do Truffle. No entanto, há uma etapa extra necessária antes de fazer isso. Você irá inserir o mnemônico de sua carteira (que você salvou anteriormente) e uma API para testnet Ropsten. Para obter este último, acesse o Infura e cadastre um projeto. Na página do projeto, você verá seu ID. Use-o como uma API.

Configuração de trufasImagem de U.Today

Finalmente, você está pronto para lançar seu contrato inteligente. Aqui está a aparência do comando e do processo. Se houver algum problema, você será apresentado a ele.

Contrato inteligente sendo implantado localmenteImagem de U.Today

O que você pode fazer com um contrato inteligente?

Bom trabalho, você implantou os dois primeiros contratos inteligentes. O que agora? Para começar, você precisa verificá-los e publicá-los. Vamos encontrá-los primeiro em qualquer um dos exploradores de bloco de Ethereum. Estaremos usando Etherscan.

A maneira mais rápida de acessar seus contratos é por meio das transações de sua carteira. Acesse o Metamask, pressione três pontos e ele permitirá que você visualize sua conta no Etherscan. Seu endereço agora tem pelo menos uma transação para a criação do contrato. Acessando uma transação, você encontrará um endereço de destino, que é essencialmente o endereço de um contrato. Assim que chegar à página do contrato, você verá algumas guias. Vá para a guia ‘Código’ e prossiga para a página de verificação. Insira aqui todas as informações relevantes e pressione o botão para iniciar o processo de verificação.

Verificação de códigoImagem de U.Today

Depois de verificar o primeiro contrato inteligente que criamos, agora você pode interagir com ele. Vá para a guia ‘Escrever contrato’ e você verá os marcadores que especificamos. Vamos conectar o Etherscan ao Metamask e inserir o Toyota Soarer e 280 HP. Atualize a página e você verá os dados na seção ‘Ler’.

Obras de contrato inteligenteImagem de U.Today

Resumo

Resumindo, construir contratos inteligentes é uma habilidade necessária para todo engenheiro de blockchain. A primeira plataforma a introduzir contratos inteligentes foi o Ethereum; a Fundação também apresentou à comunidade uma linguagem especialmente escrita chamada Solidity. Apesar da novidade do conceito e da linguagem em si, construir contratos inteligentes não tem nada de excepcional. Pessoas que têm experiência anterior com linguagens de programação orientadas a objetos, especialmente JavaScript, se sentirão muito confortáveis ​​para se locomover.

Contratos inteligentes são apenas programas, mas têm características distintas que todo desenvolvedor deve ter em mente. Por exemplo, como os contratos inteligentes são executados em uma VM descentralizada, seus dados estão sendo gravados de forma imutável no blockchain. Portanto, não há espaço para erros, e testar um contrato inteligente é crucial antes que ele seja implantado na rede principal. Outra característica de um contrato inteligente é que cada ação é feita por meio de transações, que requerem o poder de processamento do EVM. Como consequência, implantar contratos inteligentes e interagir com eles custa dinheiro.

Hoje explicamos os princípios de funcionamento do Ethereum Main e das redes de teste, mostramos várias ferramentas para criar contratos inteligentes e delineamos o processo de fazer dois tipos de contratos. Também demonstramos diferentes maneiras de lançar contratos inteligentes na rede e maior interação com eles. Acreditamos que, com esse conhecimento, você estará pronto para começar como um engenheiro de blockchain e construir contratos inteligentes excepcionais e aplicativos descentralizados baseados neles. Aproveitar!