Um Guia Completo para Iniciantes sobre Solidity - Parte I

Um Guia Completo para Iniciantes sobre Solidity - Parte I

Ethereum Virtual Machine, Smart Contract, dApps, Solidity e muito mais...

Este é o primeiro artigo de uma série titulada “Um Guia Completo para Iniciantes sobre Solidity”, onde irei apresentar uma compreensão detalhada do ecossistema que envolve o Smart Contract e da Linguagem Solidity com foco na plataforma Ethereum. Esses fundamentos fornecerão conhecimentos básicos sobre o assunto para ajudá-lo a iniciar sua jornada.

Com esta série, meu objetivo é trazer conteúdo completo e compreensivo sobre o tema, que tratarei de forma teórica e prática. O primeiro artigo tratará do entendimento teórico necessário para que os leitores possam começar a construir e operar com contratos utilizando Solidity. A partir do segundo artigo, irei demonstrar como escrever um contrato. Tudo será explicado passo-a-passo, e o único requerimento é um entendimento básico da tecnologia blockchain e da plataforma Ethereum.

🚀 Embarque comigo nesta jornada, onde toda semana teremos novos conteúdos.

O que é Blockchain?

Uma blockchain é um banco de dados distribuído que é compartilhado entre os nós de uma rede de computadores. Como banco de dados, uma blockchain armazena informações eletronicamente em formato digital. Blockchains são mais conhecidos por seu papel crucial em sistemas de criptomoedas, como Bitcoin, Ethereum e muitas outras. Utilizado comumente para manter um registro seguro e descentralizado de transações, assim como um livro razão. A inovação proposta por uma blockchain é a garantia da fidelidade e segurança de um registro de dados e a geração de confiança sem a necessidade de um terceiro confiável.

Por ser imutável a blockchain facilita o processo de registro de transações e rastreamento de ativos em uma rede de negócios. Um ativo pode ser algo tangível (uma casa, carro, dinheiro, terreno, etc) ou intangível (propriedade intelectual, patentes, direitos autorais, marca, etc). Praticamente qualquer coisa de valor pode ser rastreada e negociada em uma rede blockchain, reduzindo riscos e reduzindo custos para todos os envolvidos.

Um banco de dados geralmente estrutura seus dados em tabelas, enquanto uma blockchain, como o próprio nome indica, estrutura seus dados em pedaços (blocos) que são encadeados. Essa estrutura de dados inerentemente cria uma linha de tempo irreversível de dados quando implementada em uma natureza descentralizada. Quando um bloco é preenchido, ele é gravado em pedra e se torna parte dessa linha do tempo. Cada bloco na cadeia recebe um carimbo de hora exato quando é adicionado à cadeia.

Cadeia de blocos da Blockchain

Fig. 1 - Cadeia de blocos da Blockchain

O que é Ethereum?

Ethereum é uma plataforma descentralizada capaz de executar contratos inteligentes e aplicações descentralizadas usando a tecnologia blockchain. São aplicações que funcionam exatamente como programadas sem qualquer possibilidade de censura, fraude ou interferência de terceiros, isso porque o contrato é imutável.

Os contratos inteligentes permitem que os participantes façam transações entre si sem uma autoridade central confiável. Os registros de transações são imutáveis, verificáveis ​​e distribuídos com segurança pela rede, dando aos participantes total propriedade e visibilidade dos dados das transações. As transações são enviadas e recebidas por contas Ethereum criadas pelo usuário. Um remetente deve assinar transações e gastar Ether, a criptomoeda nativa da rede Ethereum, como custo de processamento de transações na rede.

A plataforma Ethereum suporta ether ou ETH, além de uma rede de aplicativos descentralizados, também conhecidos como dApps. Os contratos inteligentes, originados na plataforma Ethereum, são um componente central de como a plataforma opera. Muitas finanças descentralizadas (DeFi) e outros aplicativos (dApps) usam contratos inteligentes em conjunto com a tecnologia blockchain.

Arquitetura do Ethereum

Fig. 2 - Arquitetura do Ethereum

Como criptomoeda, o Ethereum é o segundo em valor de mercado ficando atrás apenas do Bitcoin na data de publicação deste artigo.

A Ethereum Virtual Machine (EVM)

A Ethereum Virtual Machine é a plataforma de software que os desenvolvedores podem usar para criar aplicativos descentralizados (dApps) na Blockchain do Ethereum. Esta máquina virtual é onde todas as contas Ethereum e contratos inteligentes vivem.

O próprio protocolo Ethereum existe apenas com o propósito de manter a operação contínua, ininterrupta e imutável dessa máquina de estado especial. Em qualquer bloco da cadeia, o Ethereum tem um e apenas um estado 'canônico', e o EVM é o que define as regras para calcular um novo estado válido bloco a bloco.

A Ethereum Virtual Machine

Fig. 3 - A Ethereum Virtual Machine

O que é Smart Contract?

Em 1994, o cientista de computação e criptógrafo Nick Szabo introduziu o termo “smart contract”, idealizando uma representação digital de contratos tradicionais, com o objetivo de minimizar a necessidade de confiança em intermediários.

“A smart contract is a computerized transaction protocol that executes the terms of a contract.” — Szabo, 1994

Smart contracts, ou contratos inteligentes em português, são protocolos computacionais que agem independentemente para executar propósitos específicos. Eles nada mais são do que um conjunto de código, que seguem a lógica if-this-then-that (se-isso-então-aquilo), ou seja, quando algum evento acontece, ele desencadeia uma reação pré-determinada.

Lógica if-this-then-that

Fig. 4 - Lógica if-this-then-that

Na prática, os participantes não escrevem um novo código toda vez que desejam solicitar um cálculo no EVM. Em vez disso, os desenvolvedores de aplicativos carregam programas (trechos de código reutilizáveis) no estado EVM e os usuários fazem solicitações para executar esses trechos de código com parâmetros variados.

Em um nível muito básico, você pode pensar em um contrato inteligente como uma espécie de máquina de venda automática: um script que, quando chamado com certos parâmetros, executa algumas ações ou cálculos se determinadas condições forem satisfeitas. Por exemplo, um contrato inteligente de fornecedor simples pode criar e atribuir a propriedade de um ativo digital se o chamador enviar ether para um destinatário específico.

Qualquer desenvolvedor pode criar um contrato inteligente e torná-lo público na rede, usando o blockchain como sua camada de dados, por uma taxa paga à rede. Qualquer usuário pode então chamar o contrato inteligente para executar seu código, novamente por uma taxa paga à rede.

Assim, com contratos inteligentes, os desenvolvedores podem criar e implantar aplicativos e serviços arbitrariamente complexos voltados para o usuário, como: mercados, instrumentos financeiros, jogos etc.

O que são dApps?

Um aplicativo descentralizado (dApp) é um aplicativo construído em uma rede descentralizada que combina um contrato inteligente e uma interface de usuário front-end. No Ethereum, os contratos inteligentes são acessíveis e transparentes – como APIs abertas – para que seu dApp possa até incluir um contrato inteligente escrito por outra pessoa.

Um dApp tem seu código de back-end sendo executado em uma rede ponto a ponto descentralizada. Compare isso com um aplicativo em que o código de back-end está sendo executado em servidores centralizados.

Um dApp pode ter código de front-end e interfaces de usuário escritas em qualquer idioma (assim como um aplicativo) para fazer chamadas para seu back-end. Além disso, seu frontend pode ser hospedado em armazenamento descentralizado, como IPFS.

Depois que os contratos inteligentes são implantados na rede, você não pode alterá-los. Os dApps podem ser considerado descentralizado porque são controlados pela lógica escrita no contrato, não por um indivíduo ou empresa. Isso também significa que você precisa projetar seus contratos com muito cuidado e testá-los completamente.

Comparação entre App e dApp

Fig. 5 - Comparação entre App e dApp

Embora o Bitcoin possa ser chamado de primeiro dApp, o Ethereum se tornou o principal motor de crescimento do ecossistema dApp. Isso ocorre em grande parte por causa de seus contratos inteligentes, efeito de rede e base de usuários. À medida que o mercado de finanças descentralizadas (DeFi) expande seus casos de uso e adoção, os dApps apresentam uma rampa essencial para novos públicos, implantando interfaces de usuário que emulam aplicativos da Web convencionais enquanto acessam os novos recursos do blockchain. Ao fazer isso, os dApps estão expandindo de várias maneiras a funcionalidade da Internet por meio do blockchain.

Independentemente da blockchain subjacente em uso, o interesse em dApps está crescendo rapidamente – e o movimento está apenas começando. À medida que o blockchain continua a se desenvolver em ritmo acelerado, é provável que finanças, jogos, mercados online e mídias sociais se tornem dApps baseados em blockchain.

Ok, mas e o Solidity?

Solidity é uma linguagem de alto nível e orientada a contratos, desenhada com o propósito de facilitar a criação de Smart Contracts. É influenciada por C++, Python e Javascript com o objetivo de facilitar a programação de Smart Contracts na Ethereum Virtual Machine (EVM).

Esses Smart Contracts ou, em português, Contratos Inteligentes. São programas que possuem regras e informações para o desenvolvimento de um produto ou serviço.

A linguagem recém-desenvolvida ganhou um papel significativo na estrutura de contratos da Ethereum, que é de grande importância na tecnologia blockchain. De acordo com Gavin Wood, um dos criadores da Solidity, escrever um Smart Contract é relativamente simples para quem tem experiências com programação, apesar dessa aplicação ser operada dentro de uma blockchain. Em essência, Solidity facilita o desenvolvimento de Smart Contracts no Ethereum e, embora não seja a única linguagem, foi a primeira, a mais versátil.

Prós do Solidity

Solidity tem vários pontos fortes que ajudaram a transformar o Ethereum no que ele é hoje. Por um lado, ele foi projetado para ser bastante simples de usar por qualquer pessoa com um conhecimento básico de linguagens de programação como Javascript ou C++.

Por outro lado, seus contratos inteligentes são construídos em uma blockchain, portanto, não podem ser alterados ou excluídos. Isso significa que o Ethereum é uma maneira muito segura de fazer o que foi projetado para fazer - transferir qualquer coisa de valor, usando os tokens Ether nativos ou os tokens ERC-20 compatíveis, para pagar por essas transações.

Solidity permite construir contratos inteligentes seguros, transparentes e confiáveis. Se implementados corretamente, podem aumentar a eficiência operacional, reduzir a administração de custos e a dependência de terceiros.

Solidity é uma das linguagens de programação blockchain mais populares hoje para a cadeia Ethereum e EVM, fornece bastante documentação de código aberto sobre como os aplicativos funcionam e vários casos de uso, a partir daí, você pode facilmente criar aplicativos mais complexos.

Por exemplo, se você está construindo um DEX, você pode clonar completamente o código-fonte da Uniswap e adicionar recursos mais inovadores em sua plataforma, como Liquidity Farming, Lending, etc.

Limitações do Solidity

Como o Ethereum é executado na tecnologia Blockchain, ele não consegue coletar e atualizar informações rapidamente no sistema, exceto por meio de operações de negociação. Isso pode ser um grande problema quando se trata de fatores como dados de volatilidade, como o preço dos pares de moedas (Forex).

Outra grande desvantagem que pode ser vista no Solidity é essa imaturidade (quando comparado com linguagens mais antigas como C ou Java). Para os desenvolvedores, isso significa que pode haver muito poucas bibliotecas e referências, tornando o aprendizado do Solidity uma tarefa assustadora para iniciantes.

A imutabilidade é uma grande vantagem, mas em alguns casos pode ser uma desvantagem. Por exemplo, depois que o contrato é feito, ele não pode ser modificado, não se pode adicionar recursos a ele.

Os erros não podem ser corrigidos, as transações não podem ser revertidas e as explorações de falhas só podem ser corrigidas atualizando o código Ethereum – o que requer a participação de nós individuais que nem sempre estão disponíveis, pelo menos não rapidamente.

Um hack DAO de 2016 que drenou US$ 60 milhões em 2016 usando uma vulnerabilidade EVM chamada reentrancy - uma de várias explorações conhecidas - assim como foi um problema com o hack de 27 de agosto de 2021 que causou um fork na blockchain Ethereum. Em ambos os casos, a exploração era conhecida e uma correção havia sido lançada quando foi explorada.

Em julho, a maior exchange de criptomoedas dos EUA, a Coinbase, lançou uma ferramenta chamada Solidify, que é usada para detectar e classificar riscos de contratos inteligentes, uma auditoria automatizada. Como o nome da ferramenta sugere, seu objetivo é melhorar os contratos inteligentes Solidity, encontrando possíveis falhas – algo que a Coinbase faz em sua revisão rigorosa, mas demorada, de protocolos cujos tokens está considerando listar.

Salário médio de um desenvolvedor Solidity

Mas primeiro, por que você investiria horas do seu precioso tempo aprendendo a desenvolver em Solidity?

De acordo com cryptocurrencyjobs.co, o salário base médio de um desenvolvedor Solidity varia de US$ 125.000 a US$ 145.000 anuais.

Dado o crescimento explosivo do setor de criptoativos como um todo, é natural imaginar que os desenvolvedores que dominem a linguagem Solidity sejam cada vez mais procurados.

Curva de aprendizagem

Solidity é o que é chamado de linguagem de programação orientada a objetos (OOP) de alto nível desenvolvida e usada principalmente pela blockchain Ethereum. As OOPs permitem que os desenvolvedores construam programas usando trechos de código pré-construídos.

O Solidity foi projetado para ser particularmente amigável para qualquer pessoa com familiaridade básica com outras linguagens de programação mais populares, incluindo C++, Java, JavaScript e Python. Isso significa que pessoas com experiência nos conceitos gerais de programação e linguagens de programação mencionadas levariam menos tempo para aprender Solidity. Isso pode levar de um a seis meses.

Conclusão

Isso é tudo para este artigo família. Espero que você tenha achado este artigo útil, e que tenha contribuído de alguma forma para seu crescimento.

Se precisar de alguma ajuda, se tem alguma dúvida ou se tiver algum feedback, utilize o espaço para comentários e deixe um recado.

Vamos nos conectar no Twitter e LinkedIn.

👋 Obrigado por ler até o final e até o próximo artigo !!!

Did you find this article valuable?

Support Thiago (DukeFullStack) by becoming a sponsor. Any amount is appreciated!