Como Aprender Solidity e Iniciar Programação Blockchain

A programação de blockchain se tornou uma das esferas de software mais lucrativas e desafiadoras durante a última década. Embora blockchains sejam agnósticos de linguagem e muitas das linguagens existentes, como C ++ e JavaScript (JS), sejam usadas por engenheiros de blockchain, existem algumas tarefas que não poderiam ser convenientemente realizadas por linguagens existentes, o que abriu a demanda por novos, opções específicas de criptografia. Uma dessas linguagens é Solidity.

Solidity nasceu como uma parte central do ecossistema Ethereum. Ele absorveu C ++, JavaScript e Python. Possui muitos recursos contemporâneos, como bibliotecas e herança. O Solidity é projetado para escrever programas que interagem com contas Ethereum, que são chamados de contratos inteligentes. Os contratos inteligentes são executados na Máquina Virtual Ethereum (EVM), permitindo que os usuários que os utilizam executem tarefas como crowdfunding, leilões cegos, votação e muitas outras de maneira descentralizada. O mais famoso aplicativo matador de contratos inteligentes foi o financiamento descentralizado em ICOs, que deu início à alta nos mercados de criptografia em 2017.

Seja você um desenvolvedor experiente ou apenas começando na criptografia, é uma boa ideia começar a aprender Solidity porque os contratos inteligentes se tornaram uma parte crucial do ecossistema blockchain. Além de serem ativamente implementados por dApps, eles estão sendo ativamente integrados em blockchains de camada de infraestrutura e até mesmo em Bitcoin por meio de provedores como RSK. Ao saber como construir contratos inteligentes, você tornará sua carreira de blockchain mais sustentável e será capaz de produzir soluções de melhor qualidade. Não vamos mais adiar e sujar as mãos com a codificação!

Compreender os princípios básicos de um contrato inteligente

Uma conta de contrato inteligente consiste em três seções: saldo, armazenamento e código. O saldo representa quanto Ethereum um contrato inteligente tem. O armazenamento contém dados como strings e arrays que são específicos para um aplicativo. A seção de código tem o código de máquina bruto que é compilado a partir do que escrevemos no Solidity.

Ao contrário das contas de usuário, as contas de contrato inteligente não são externas às respectivas redes. Em outras palavras, você pode usar sua carteira com várias redes como Kovan e Ropsten, mas não pode fazer isso com um contrato inteligente. Contratos inteligentes são internos.

Cada contrato inteligente tem uma fonte, que é armazenada no dispositivo de um autor e instâncias, que são armazenadas no blockchain. Para criar uma instância (conta) de um contrato inteligente, precisamos implantá-lo na rede. É muito semelhante ao relacionamento entre classes e instâncias na programação orientada a objetos tradicional (OOP) e linguagens que a representam (JS, Ruby). Para lhe dar uma representação mais visual, vamos criar uma classe ‘Bike’ e adicionar uma instância dela.

Aula de bicicleta & amp; instânciaImagem de Utoday

O que iremos escrever é uma definição de contrato, que irá então rodar através de um compilador que irá produzir dois arquivos: bytecode e interface binária de aplicação (ABI). Bytecode é o que será realmente alimentado para o EVM e ABI é uma camada entre o bytecode e o código JavaScript regular que permite a construção de uma interface de usuário (UI).

Escolhendo um IDE & versão do Solidity

Antes de começar, precisamos de um ambiente de desenvolvimento integrado (IDE) adequado. Em outros termos, precisamos de um terminal conveniente com as ferramentas necessárias para escrever nosso código. Para os fins deste tutorial, vamos escolher Remix, um IDE criado pela fundação Ethereum que permite escrever, testar, depurar, lançar contratos inteligentes e muito mais. Você pode usá-lo diretamente no navegador ou baixá-lo localmente se desejar.

Depois de iniciar o Remix, você verá o editor de código no centro, o gerenciador de arquivos à esquerda e um compilador à direita.

Janela inicial de remixImagem de Utoday

Haverá algum código pré-escrito – não precisamos disso. Para criar o primeiro contrato inteligente, vamos pressionar o pequeno ícone de mais no canto superior esquerdo do terminal e dar um nome a ele.

Criação de um novo projeto no RemixImagem de Utoday

Como agora temos o documento blank.sol, devemos especificar a versão do Solidity que o compilador executará. No momento deste tutorial, a versão mais recente é 0.5.7. Se você não tiver certeza de qual versão usar, você pode especificar um intervalo de versões.

2 tipos de especificação da versão do SolidityImagem de Utoday

Por último, vamos dar um nome ao nosso contrato inteligente, seguido por um parêntese.

Nomenclatura de contrato inteligenteImagem de Utoday

Escrevendo seu primeiro contrato inteligente

Assim que tivermos nossa tela pronta, é hora de definir os blocos de construção básicos – variáveis. Embora engenheiros de software experientes não tenham problemas para entender este conceito, iremos apresentá-lo brevemente para iniciantes. As variáveis ​​são marcadores de posição para pedaços de informação que são posteriormente referenciados por um programa que as executa.

Vamos criar algumas variáveis: uma string (uma sequência de símbolos) e um inteiro (um número). No caso da Ethereum, as variáveis ​​são armazenadas no blockchain junto com o resto das partes dos contratos e podem, portanto, ser acessadas e atualizadas de qualquer lugar. Outra característica fundamental das variáveis ​​de Solidity é que você pode torná-las privadas escrevendo ‘privado’ ao lado das variáveis. Finalmente, para os inteiros, Solidity tem dois tipos: com sinal (pode ser positivo & negativo) e sem sinal (só pode ser positivo). Para especificar uma variável sem sinal, devemos apenas colocar ‘u’ antes dela.

Uma string privada e um inteiroImagem de Utoday

Uma vez que temos a variável ‘nome’, precisamos escrever os métodos de configuração e obtenção. Isso se parece com uma função JS. Lembre-se de que Solidity é tipado estaticamente, então temos que definir os tipos de variáveis. Agora, qualquer valor que colocarmos em ‘setName’ definirá a string ‘name’. Para o getter, usaremos ‘getName’ e especificaremos qual variável esperamos ver. Agora, é hora de fazer o mesmo para a variável “idade”. O método é construído de forma semelhante ao ‘getName’.

Definidores e getters de nome / idadeImagem de Utoday

Vamos testar nosso pequeno pedaço de código. Vá para a guia ‘Executar’ do compilador e pressione ‘Implementar’ sob o nome do seu contrato. Na parte inferior do compilador, você verá agora a seção ‘Contratos implantados’ que tem nossos métodos disponíveis. Para passar um nome para o valor ‘newName’, precisamos ter certeza de que nossa string está escrita em JSON, caso contrário, ‘getName’ não retornará nada. Para ‘setAge’ basta colocar sua idade sem aspas. Como você pode ver, agora podemos definir e receber as variáveis ​​’nome’ e ‘idade’ por meio de nosso contrato inteligente.

Compilador, com um nome e uma idadeImagem de Utoday

Definindo Wei e Gas

Uma das características mais notáveis ​​dos contrastes inteligentes é que, para implantá-los na rede Ethereum, você precisará iniciar uma transação, que custa uma certa quantia que é paga em Ether. É crucial entender como as taxas são utilizadas no sistema, pois elas serão deduzidas cada vez que você interagir com EVM.

O que é Wei?

Vamos supor que, lendo até aqui em nosso tutorial, você tenha usado Bitcoin pelo menos uma vez. Você provavelmente fez uma pequena transação que foi bem inferior a 1 BTC. Nesse caso, você usou Satoshis, que são algo como centavos por um dólar. Wei é como um Satoshi – é a menor parte de 1 Éter. Se pensarmos nisso em termos de programação, é o menor inteiro sem sinal da rede. Ao interagir com a rede, você encontrará principalmente Gwei, que se refere a Gigawei e é igual a 1 bilhão de Wei.

O que é gás?

O gás é uma parte essencial do mecanismo de execução inteligente de contratos. Possui dois valores para cada transação: Gás consumido e seu preço. É importante mencionar que um usuário iniciando uma transação define esses valores. No entanto, se o valor definido de Gás não for suficiente para processar uma operação específica, o Gás será consumido, mas a transação falhará. Além disso, se o preço do Gás for definido muito baixo para a rede em um determinado momento, a transação não será processada pelos nós, tornando-a eventualmente malsucedida. Existem vários serviços para verificar os valores ideais para suas transações, um deles é o ethgasstation.info. Para obter uma melhor compreensão do gás e por que custa algum dinheiro, vamos codificar parte dele nós mesmos.

Volte para a janela de Remix e inicie um novo arquivo. Em nosso exemplo, vamos chamá-lo de ‘Gás’ e criar um contrato com o mesmo nome. Tenha em mente que quanto mais dados precisaremos armazenar no blockchain, mais gás precisaremos. Dito isso, para o propósito deste tutorial, criaremos um contrato barato; quanto mais você adicionar, maior será a taxa.

Haverá uma função que retorna um inteiro que é a soma de duas entradas. Para torná-lo o mais leve possível, especificaremos que nosso contrato não armazenará nada no blockchain e, para isso, colocaremos “puro” ao lado da função.

Contrato baratoImagem de Utoday

Agora você pode implantá-lo no compilador e inserir quaisquer dois números para obter o inteiro ‘c’. Para verificar o preço de nossa transação, devemos dar uma olhada no terminal localizado abaixo da seção de código. Existe um custo de transação e um custo de execução. O primeiro se refere à quantidade de dados que uma transação possui. O segundo se refere a quanto da energia do EVM foi exigida pela transação.

Custo do contrato baratoImagem de Utoday

Esta é uma transação extremamente básica que custa quase nada para a rede. Ao escrever contratos inteligentes significativos, você adicionará mais detalhes, o que aumentará seu peso e, portanto, as taxas de transação.

Criando & implantando seu próprio token ERC20

Vamos enfrentá-lo, a maioria dos desenvolvedores de blockchain que estão apenas começando estão ansiosos para jogar grande e criar seus próprios blockchains e tokens. Embora este seja um tópico extremamente difícil que atraiu alguns dos melhores engenheiros de software de outras esferas, construir um token ERC20 básico não é ciência de foguetes.

Primeiro, precisamos criar outro arquivo no Remix e fazer o upload da interface ERC20, que é a seguinte:

Padrão ERC20Imagem de Utoday

A função ‘totalSupply’ permite-nos ver quantos tokens temos no total. A função ‘balanceOf’ é usada para obter quantidades de tokens em endereços específicos. A função de ‘transferência’ permite que os usuários realizem transações entre si. As funções ‘transferFrom’, ‘allowance’ e ‘approve’ existem para permitir que outros usuários iniciem transações em seu nome. Os eventos são as ferramentas de registro para o razão.

Além da própria interface, precisaremos de um arquivo.sol separado para nosso novo token. Aqui, importaremos a interface ERC20 e especificaremos o símbolo, nome e decimais de nosso token.

token de hojeImagem de Utoday

Antes de compilá-lo, precisamos especificar as restrições.

  • Vamos começar com a oferta total – é uma variável inteira constante que tornaremos privada. O fornecimento total de nossos tokens será de 1 milhão, também escrevemos uma função para retornar esse valor.

  • Em segundo lugar, precisamos armazenar nosso token em algum lugar. Para isso, precisaremos delinear o mapeamento que retornará um saldo para qualquer endereço especificado.

  • Terceiro, deve haver uma função para transferências de token, que terá essencialmente um endereço de um receptor e uma quantidade de token transferida. Essa função também deve ser capaz de verificar se um remetente tem tokens suficientes em seu saldo, o que pode ser realizado por meio de uma declaração if / then simples. Além disso, definiremos condicionais para ‘_value’ de uma forma que impeça os usuários de enviar transações com 0 tokens, pois isso só inundaria a rede com lixo.

  • Quarto, devemos criar o mapeamento para as funções restantes, que é um mapeamento de mapeamento para um inteiro.

  • Em seguida, especificaremos alguns verificadores nas funções de ‘aprovação’ e ‘permissão’ e colocaremos as condições para ‘transferência de’.

  • Por fim, nem todos os tokens estarão disponíveis no mercado. Alguns dos tokens geralmente são deixados de fora para equipes, fundações, consultores e outros fins. Portanto, é essencial deixarmos claro quantos tokens estarão circulando. Conforme criamos os tokens, o suprimento circulante é igual ao nosso saldo.

Restrições de tokens uTodayImagem de Utoday

O código está pronto, então vamos testá-lo. Prossiga para a guia ‘Executar’ do compilador e implante nosso contrato de token. Você verá que temos nossos dados de token junto com o estoque total, saldos e licenças. Parabéns, você merece um tapinha nas costas!

Para fazer nosso token realmente funcionar na rede, precisamos implantar o contrato inteligente (observe que isso é diferente de implantá-lo para teste no Remix). Para o propósito deste tutorial, usaremos Remix e Metamask, mas existem outras maneiras de fazer isso. Metamask é um programa de carteira Ethereum simples, mas eficiente, com uma bela IU que se integra como uma extensão a alguns dos navegadores mais populares. No nosso caso, usaremos o Opera. Em primeiro lugar, vá para metamask.io e baixe a extensão. Assim que terminar, você verá um ícone de raposa no canto superior direito do seu navegador.

Baixando Metamask & amp; localização do íconeImagem de Utoday

Pressione o ícone e prossiga com as instruções oferecidas para criar uma carteira. Não se esqueça de guardar a frase secreta! Quando você tiver sua carteira, pressione o ícone Metamask e mude a rede para ‘Ropsten’ porque não queremos bagunçar a rede principal do Ethereum.

Alterando Metamask para RopstenImagem de Utoday

A última etapa é gerar alguns Ether (infelizmente, você não poderá usá-los para compras reais, mas são necessários para teste). Vá para faucet.metamask.io e solicitar 1 Ether.

Agora você está pronto. Volte para a janela de Remix e mude o ambiente para ‘Web3 injetado’ no compilador. Dê uma olhada na guia da conta também – seu endereço deve ser o mesmo que você gerou com Metamask. Selecione o contrato inteligente que deseja implantar, que é o seu contrato de token e não a interface ERC20 e pressione o botão respectivo. Uma janela Metamask aparecerá com uma transação, seus detalhes e opções para interagir com ela. Envie a transação e nosso token ganhará vida.

Pop-up MetamaskImagem de Utoday

Agora você pode brincar com todas as funções que especificamos anteriormente. Vejamos nosso contrato de outro lado para verificar se ele funciona corretamente. Como qualquer outro blockchain, Ethereum tem múltiplos exploradores de bloco que servem ao propósito essencial de monitorar o que está acontecendo na rede. No nosso caso, vamos nos ater a etherscan, embora haja um punhado de outras grandes alternativas. Observe que se você apenas acessar o etherscan, verá a rede principal. Como precisamos ver a rede Ropsten, você precisará colocar ‘ropsten.’ Antes do endereço do site. Procure seu endereço e você verá duas transações – uma é para Ether grátis que você recebeu, e outra é para implantar o contrato.

Endereço do usuário no EtherscanImagem de Utoday

Para encontrar o endereço do seu contrato, pressione no TxHash e navegue até o campo ‘Para’. Aqui você pode verificar as transações, o código e os eventos do seu contrato inteligente. Neste ponto, precisamos verificar e publicar nosso contrato. Vá para a seção ‘Código’ e clique no link ‘Verificar e publicar’. Aqui, você precisará especificar novamente o nome do seu token, a versão do compilador (em nosso caso, a última versão do Solidity que usamos foi 0.5.7, portanto, continuaremos com a versão do compilador relacionada). Agora você deve copiar o código de contrato inteligente do token junto com o código de interface ERC20 de sua janela Remix para etherscan e pressionar ‘Verificar e publicar’ na parte inferior da tela.

Verificando o contrato inteligenteImagem de Utoday

É hora de voltar ao endereço do seu contrato. O código na guia ‘Código’ agora será verificado. Além disso, agora você terá mais duas guias: ‘Ler contrato’ & ‘Escrever contrato’. Na seção de leitura, podemos verificar a funcionalidade de nosso token. Insira seu endereço (não o do contrato) no campo ‘balanceOf’ para ver quantos tokens você tem; deve mostrar 1 milhão que codificamos como o suprimento total e o demos circulando em nossa carteira. Isso significa que nosso token agora está funcionando corretamente no testnet.

Recebendo o saldoImagem de Utoday

Resumo

Se você está procurando iniciar uma carreira na indústria de criptografia, precisa entender que, apesar de sua relativa simplicidade no básico, o blockchain tem uma profundidade incrível. Desde 2017, os blockchains evoluíram significativamente e seus casos de uso foram além de apenas transações financeiras. Com o advento do Ethereum, surgiu uma nova camada de redes que hospeda vários dApps e soluções baseadas em blockchain. A ferramenta por trás dessa evolução foi um contrato inteligente, e se você quiser tornar sua experiência mais valiosa e preparada para o futuro, você deve saber como funciona.

Embora você possa codificar contratos inteligentes usando outras linguagens, o Solidity é mais adequado para esse propósito. Além disso, se você deseja se tornar um desenvolvedor Ethereum ou criar um token ICO / ERC20 para o seu projeto, esta é a sua escolha. Se você já teve alguma experiência com C ++ ou JavaScript, codificar no Solidity deve ser relativamente fácil. No entanto, você terá que entender algumas diferenças entre os modelos cliente-servidor e descentralizados de lançamento de software. Graças à Ethereum Foundation e algumas organizações terceirizadas, os desenvolvedores são apresentados a um conjunto de ferramentas convenientes como Remix e Etherscan para codificar e implantar contratos inteligentes.

Esperamos que nosso tutorial tenha ajudado você a contornar a maioria dos conceitos do Solidity para poder iniciar sua jornada de blockchain. Lembre-se de que você sempre pode verificar a documentação mais recente do Solidity. Desejamos-lhe boa sorte e ficaremos felizes em usar alguns de seus dApps algum dia!