Pular para o conteúdo
0%

O que é Solidity?

Alchemy team headshot

Escrito por Alchemy

Publicado em 22 de setembro de 20238 min de leitura

À medida que a indústria web3 cresce, os desenvolvedores encontram cada vez mais opções de linguagens de programação web3. Cada linguagem é projetada com diferentes benefícios e tradeoffs para escrever smart contracts. As linguagens podem diferir no suporte a blockchains específicas, ou ter características distintas como velocidade, legibilidade ou segurança.

Desenvolvida como a linguagem de smart contracts para a blockchain Ethereum, Solidity é uma linguagem de programação poderosa usada para criar aplicações descentralizadas para o maior ecossistema de desenvolvedores da indústria blockchain.

Neste artigo, apresentaremos uma introdução ao Solidity através de sua história, suas influências de linguagem e seus usos. No final, forneceremos alguns dos melhores recursos para desenvolvedores continuarem aprendendo através de cursos gratuitos de Solidity e recursos para aprender desenvolvimento web3.

O que é Solidity?

Proposto em 2014, Solidity é uma linguagem de programação de alto nível, orientada a objetos, para implementar smart contracts que rodam na** Ethereum Virtual Machine (EVM)**. Solidity é inspirada por linguagens de programação conhecidas como C++ e JavaScript. Como desenvolvedor web3, trabalhar com Solidity é benéfico para aprender desenvolvimento web3.

Esta seção apresenta a história do Solidity, estabelece semelhanças entre Solidity e outras linguagens de programação, e explica os principais casos de uso do Solidity.

Quem criou o Solidity?

Em 2014, o CTO da Ethereum, Gavin Wood, criou o Solidity como uma linguagem que atenderia à necessidade da Ethereum de uma linguagem de programação Turing-completa para escrever smart contracts.

O fundador da Ethereum, Vitalik Buterin, propôs a Ethereum como um protocolo que estenderia a funcionalidade de blockchain pioneira do Bitcoin, com a funcionalidade adicional de smart contracts. Em sua visão, a Ethereum seria capaz de rodar uma rede elaborada de smart contracts, que são trechos de código executados condicionalmente em uma rede distribuída e global de computadores. Smart contracts permitem que desenvolvedores criem novas criptomoedas, construam aplicações DeFi, entre outras coisas.

A equipe do projeto Solidity foi liderada por Christian Reitwiessner, que conseguiu criar uma linguagem de programação Turing-completa e orientada a objetos para implementar smart contracts. Ser uma linguagem de alto nível significa que os desenvolvedores criam smart contracts sem precisar manipular informações de nível de sistema, como memória ou bytecode, para realizar computações.

Completude Turing se refere à capacidade de um sistema de manipulação de dados, neste caso uma linguagem de programação, de simular o comportamento de uma Máquina de Turing. Teoricamente, o Solidity precisava ser capaz de realizar qualquer computação que os desenvolvedores exigissem dele.

Em quais linguagens de programação o Solidity é baseado?

O Solidity foi baseado e influenciado por múltiplas linguagens de programação existentes durante seu desenvolvimento, incluindo C++, Python e JavaScript.

Semelhanças do Solidity com C++

O Solidity usa uma sintaxe idêntica à do C++ para declarações de variáveis e loops for. Além disso, há suporte para sobrecarga de funções no estilo C++, necessária quando duas funções têm o mesmo nome, mas diferem nos parâmetros que aceitam.

Por fim, o Solidity permite conversão de tipos tanto implícita quanto explícita. Isso significa que os tipos de variáveis podem ser convertidos por código explícito do desenvolvedor ou serão convertidos automaticamente quando exigido por uma computação.

Semelhanças do Solidity com JavaScript

O Solidity costumava ser fortemente influenciado pelo JavaScript. Agora, a principal semelhança visível está no uso da palavra-chave 'function' pelo Solidity para definir funções.

Para desenvolvedores familiarizados com algumas das maiores influências do Solidity, conhecer o Solidity será bastante direto. Além disso, o Solidity é tipado estaticamente, permite o uso de bibliotecas e a criação de tipos complexos.

Semelhanças do Solidity com Python

A influência do Python no Solidity é menos aparente em termos de sintaxe, porém, assim como o Python, o Solidity usa linearização C3, herança múltipla e mantém a palavra-chave 'super'.

Usando sintaxe pythônica, o Vyper é semelhante ao Solidity, e é projetado propositalmente para aumentar a segurança de smart contracts usados em blockchains compatíveis com EVM.

Como o Solidity é usado?

Específico à sua natureza como linguagem de codificação para blockchain, o Solidity foi criado especificamente para ser compilado na Ethereum Virtual Machine (EVM). Assim, o Solidity é capaz de escrever smart contracts seguros compatíveis com Ethereum, para qualquer blockchain compatível com EVM.

Essa ampla compatibilidade, aliada à sua fácil compreensão e funcionalidade flexível, fez do Solidity a linguagem de desenvolvimento blockchain mais amplamente usada na indústria.

Como o Solidity funciona?

Desenvolvedores Solidity escrevem smart contracts, que são programas rodando na EVM. Semelhante às classes em outras linguagens, os smart contracts podem ter múltiplas funções, estados internos e declarações públicas.

Os contratos Solidity são compilados em bytecode para serem lidos pela EVM. Após a compilação, os contratos Solidity não terão nenhuma diferença daqueles escritos em outras linguagens de smart contract compatíveis com EVM, como Vyper ou Huff.

Como qualquer outra ferramenta de desenvolvimento, o Solidity passa por atualizações regulares de versão. Note que, como os smart contracts são implantados uma única vez e são irreversíveis após entrarem na blockchain, as restrições de versão do Solidity só importam no momento da criação.

Embora desenvolvedores Solidity possam teoricamente escrever smart contracts Ethereum diretamente em bytecode, linguagens de alto nível como Solidity permitem que engenheiros escrevam contratos de forma mais eficiente, sem nenhuma manipulação de baixo nível.

Como o Solidity interage com a EVM?

A seguir, um resumo de como o Solidity funciona para alterar o estado da EVM:

  1. Escrever smart contracts em Solidity
  2. Os smart contracts em Solidity são compilados para bytecode
  3. O bytecode é convertido em opcodes da EVM
  4. Os opcodes da EVM alteram o estado da EVM

A EVM é uma máquina de estados virtual e um registro de estado do "computador global" da Ethereum. Em termos mais simples, a EVM mantém o estado global da rede, que inclui endereços, saldos de contas e posses de tokens.

Os smart contracts em Solidity são escritos para fazer alterações no estado global da EVM. O estado global da EVM é alterado por ações como a criação de tokens, o envio e recebimento de tokens, ou a liberação de ativos.

Uma série de operações da EVM, codificadas em opcodes da EVM, provocam essas mudanças no estado global. Cada opcode da EVM é projetado para fazer com que a EVM realize um tipo específico de mudança de estado, como enviar tokens de um endereço para outro, criar tokens, ou até mesmo destruir smart contracts.

Na última etapa, a EVM traduz o bytecode do smart contract em opcodes da EVM, que fazem as alterações necessárias na blockchain.

Cada opcode vem com uma determinada taxa de gas, cobrada em ETH para mitigar o risco de um agente malicioso sobrecarregar a rede com uma quantidade excessiva de requisições. O custo total de gas de uma transação é, portanto, calculado pelo preço por unidade de gas multiplicado pelo custo total de gas dos opcodes de uma transação.

Quais blockchains compatíveis com EVM suportam Solidity?

O Solidity é capaz de escrever smart contracts para qualquer blockchain compatível com EVM, incluindo L2s como Polygon, Arbitrum e Optimism. Como o Solidity é flexível e fácil de usar, é suportado por um grande número de outras blockchains. Aqui estão alguns dos maiores projetos que suportam Solidity:

1. Polkadot

Polkadot é uma chain focada em integrar múltiplas blockchains (ou seja, parachains) em uma única chain usando uma relay chain. O objetivo da Polkadot é que as parachains sejam interoperáveis para permitir escalabilidade e aumentar a largura de banda. Um exemplo de parachain da Polkadot é a Astar, que é suportada pela Alchemy.

2. Avalanche

Avalanche é uma concorrente da Ethereum que suporta desenvolvimento em Solidity. A arquitetura da Avalanche é baseada em uma rede de três blockchains: uma para emitir e negociar ativos (X Chain), uma para coordenar os validadores da rede (P-Chain), e uma que permite a criação de smart contracts (C Chain).

3. BNB chain (anteriormente Binance Smart Chain)

A Binance Smart Chain começou como um token ERC-20 na Ethereum, e para suportar seu crescente ecossistema de aplicações, a rede Binance Smart Chain (BSC) foi criada. A BSC e seus tokens usam Solidity em seus smart contracts. Hoje, a Binance Smart Chain é chamada de BNB Chain.

Solidity é a linguagem de programação de smart contracts mais popular na indústria blockchain. Solidity é a linguagem nativa para criar smart contracts compatíveis com EVM. Mesmo fora da EVM, existem projetos que têm suporte nativo à Virtual Machine da Ethereum, como a Solana EVM da Neon Labs.

Como a indústria blockchain ainda está crescendo, pode parecer que o Solidity é menos usado em comparação com todas as outras linguagens de programação. No entanto, dentro da indústria, o Solidity é a linguagem de smart contract mais amplamente aplicável. O Solidity tem casos de uso fortes em muitas chains e nos ecossistemas de dApps web3 de crescimento mais rápido.

De acordo com um relatório do Hard Fork, da The Next Web, o Solidity aparece em o dobro de perguntas marcadas com a tag blockchain em comparação com seu concorrente mais próximo. O JavaScript tem apenas 4,8% do volume comparado aos 9,5% do Solidity.

Como o Solidity é usado na Ethereum?

Ver alguns exemplos do uso do Solidity na Ethereum lhe dará uma boa noção da simplicidade do código Solidity na criação de smart contracts flexíveis. Os exemplos de código encontrados na documentação oficial do Solidity são uma ótima introdução à linguagem.

Smart contracts

A seguir, um exemplo simples de código da documentação do Solidity que cria uma moeda simples na Ethereum.

Exemplo de código Solidity de um smart contract simples de moeda na Ethereum
Este código cria uma moeda.

Observe as declarações de função e as variáveis privadas e públicas do contrato. As funções permitem que o contrato realize diferentes ações on-chain, neste caso, enviando tokens de um endereço para outro e criando tokens.

Variáveis públicas são acessíveis de fora do contrato e geram automaticamente funções getter para recuperar o valor dessas variáveis. A palavra-chave event permite que aplicações cliente escutem mudanças causadas pelo contrato.

Neste exemplo, um cliente veria o evento sent, que indica a um listener que o endereço msg.sender enviou uma amount de tokens ao endereço receiver.

O que são os padrões ERC do Solidity?

Subjacentes ao design dos smart contracts em Solidity estão os padrões ERC (Ethereum Request for Comment), que são diretrizes criadas para melhorar e padronizar as implementações de diferentes tipos de tokens Ethereum.

Os padrões ERC são propostos por EIPs (Ethereum Improvement Proposals). Uma vez que os padrões ERC são aprovados e finalizados, eles se tornam um padrão para escrever contratos Solidity. Isso permite um template comum de interface Solidity para construir smart contracts. Quando desenvolvedores Solidity constroem tokens seguindo padrões ERC existentes, eles sabem como seus tokens se comportarão adequadamente na blockchain.

Alguns dos padrões ERC mais amplamente usados são:

  • ERC-20 - padrão de token fungível
  • ERC-721 - padrão de token não-fungível
  • ERC-1155 - padrão de token semi-fungível
  • ERC-4626 - padrão de vault com rendimento

Como aprender programação em Solidity

Agora você sabe o que é Solidity, mas como começar a aprender Solidity? Como a linguagem de smart contract mais popular, há uma vasta quantidade de recursos disponíveis online para começar a aprender desenvolvimento em Solidity.

Uma das melhores formas de aprender Solidity é com o bootcamp de Solidity de 7 semanas da Alchemy University, originalmente criado pela ChainShot, uma equipe líder de engenheiros web3, e redesenhado pela Alchemy após adquirirem a ChainShot em agosto de 2022.

O bootcamp de desenvolvedores Ethereum era originalmente um curso de certificação de $3.000, e agora é GRATUITO. Garanta sua vaga na fila para entrar na Alchemy University.

Recursos sobre Solidity

Esta seção fornece alguns dos melhores recursos online para aprender desenvolvimento em Solidity.

  1. ‍Documentação Oficial do Solidity - use a documentação como seu recurso principal para aprender desenvolvimento em Solidity.
  2. Solidity by Example - compilação de exemplos de Solidity, variando de um programa 'Hello World' até aplicações de carteira e DeFi.
  3. Clean Contracts - guia sobre como escrever smart contracts seguros e previsíveis com exemplos de código Solidity.
  4. Ethernaut pela OpenZeppelin - um jogo de guerra baseado em smart contracts, no qual cada nível consiste em hackear um smart contract.

Comece a construir com Solidity

Este artigo apresentou o Solidity e forneceu recursos para você começar a aprender desenvolvimento em Solidity. Solidity é uma linguagem extremamente flexível e poderosa para desenvolver aplicações descentralizadas na Ethereum e em blockchains compatíveis com EVM.

Quando você se sentir confortável com seu conhecimento, não hesite em implantar uma aplicação na testnet Goerli, participar de um hackathon web3, e começar a tentar construir uma startup web3!

Background gradient

Construa magia blockchain

A Alchemy combina os produtos e ferramentas de desenvolvimento Web3 mais poderosos com recursos, comunidade e suporte lendário.