Pular para o conteúdo
0%

O que é o compilador Solidity?

Daniel Idowu headshot

Escrito por Daniel Idowu

Publicado em 4 de outubro de 20226 min de leitura

Desenvolvedores Ethereum escrevendo smart contracts em Solidity precisam compilar seu código para que a Ethereum Virtual Machine (EVM) possa entender e executar os comandos apropriados. O compilador Solidity converte o código em uma coleção de instruções em bytes.

Solidity é a linguagem de programação da Ethereum, a segunda maior criptomoeda por capitalização de mercado. Solidity é uma linguagem de programação de alto nível criada especificamente para colocar smart contracts em ação. Além disso, Solidity é uma linguagem orientada a contratos e orientada a objetos, com objetos de tipagem estática.

Neste artigo, vamos apresentar o compilador Solidity, como instalar compiladores Solidity, ferramentas de compilação Solidity e até mesmo decompiladores disponíveis publicamente.

O que é o compilador Solidity?

Existem dois compiladores Solidity: solc e solc.js, que é derivado do solc. O compilador Solidity propriamente dito, o solc, é escrito em C++ e está na versão 0.8.16 no momento deste artigo. O solc.js usa o Emscripten para compilar o código C++ em JavaScript. O solc é compilado para JavaScript a cada versão.

Arquivos Solidity são compilados usando a biblioteca Node.js e a ferramenta de linha de comando conhecida como solcjs. Ela usa apenas JavaScript para a compilação, em vez do compilador de linha de comando solc, o que torna sua instalação mais simples que a do solc.

Antes que smart contracts possam ser implantados, eles precisam ser compilados em bytecode para a EVM (Ethereum Virtual Machine). Bytecode é a informação para a qual o código Solidity é "traduzido", e contém instruções binárias para o computador.

Na Ethereum, o bytecode é o que é implantado na blockchain. A compilação também gera uma ABI (Application Binary Interface), que é uma interface entre dois módulos de programa, geralmente entre sistemas operacionais e programas do usuário.

Diagrama do compilador Solidity transformando código-fonte em bytecode e uma ABI
Compilador Solidity - Fonte: Intellipat

Contratos são compilados em bytecode que é executado na EVM. Esse bytecode é implantado na blockchain e salvo em um endereço. Ele é então tornado público e fica disponível para que qualquer pessoa interaja com ele. Um endereço identifica uma instância de contrato implantada, que também mantém armazenamento persistente para preservar o estado interno do contrato. O Ether, a criptomoeda nativa da Ethereum, é usado como reserva de valor, como método de pagamento pela execução de smart contracts na blockchain e como recompensa para os mineradores que mantêm a rede Ethereum segura.

A seguir, um exemplo rápido de como um contrato é compilado.

Vamos compilar esse código usando o Remix, uma IDE Ethereum online popular, para que não precisemos instalar nenhuma ferramenta em nossa máquina local.

Na imagem abaixo, você deve notar as setas rosa e roxa na parte inferior da imagem, apontando respectivamente para a ABI e para o bytecode. ABIs são representadas em JSON.

Painel do compilador do Remix IDE com setas apontando para as saídas de ABI e bytecode
A ABI e o Bytecode estão disponíveis.

Como instalar o compilador Solidity

Ao aprender Solidity, você pode querer instalar um compilador Solidity. Existem várias formas convenientes de instalar o compilador Solidity. Um método fácil é usar o Remix, onde você tem a opção de usá-lo online. No entanto, ele é projetado para contratos pequenos e tem poucas opções de compilação.

Para contratos maiores, você pode instalar o compilador Solidity usando npm/Node.js, Docker, pacotes para Linux, MacOS e a partir de binários estáticos.

Método 1: instalar usando npm/node.js

O compilador Solidity, também conhecido como solc, pode ser instalado usando npm. O comando abaixo instalará o programa solcjs e o disponibilizará em todo o sistema.

Agora você pode testar seu compilador Solidity executando o comando a seguir.

Agora você está pronto para usar o solcjs, que tem menos recursos que o compilador Solidity padrão, mas fornecerá um bom ponto de partida.

Método 2: instalar usando Docker

Para começar a programar em Solidity, você pode baixar uma imagem Docker e usá-la. Como a imagem Docker executa o executável do compilador, você pode passar a ele qualquer argumento de compilador.

O comando para baixar uma imagem Docker do Solidity é o seguinte.

Depois de baixar uma imagem Docker, execute o comando a seguir para verificá-la.

Para compilar arquivos Solidity na máquina host usando a imagem Docker, monte uma pasta local para entrada e saída e especifique o contrato a ser compilado.

Método 3: instalar usando pacotes binários (MacOS, linux)

Instalação no MacOS

Podemos usar o Homebrew para instalar o Solidity no MacOS. Isso nos fornece pacotes macOS compilados a partir do código-fonte, e basta seguir as instruções de instalação.

Após a conclusão da execução, podemos verificar se o Solidity foi instalado com sucesso executando o comando abaixo.

Você deve receber uma saída como esta:

Saída do terminal verificando a instalação bem-sucedida do compilador Solidity no macOS
Instalação do Solidity no macOS

Instalação no Linux

Instalar pacotes no Linux é um procedimento bem simples que pode ser feito em poucos passos. Primeiro, adicione o repositório à nossa lista de repositórios.

Em seguida, atualize a lista de pacotes e instale o solc. Se quisermos usar o build nightly em vez da última versão estável, devemos alterar a entrada do repositório para ethereum/ethereum-dev.

Compilando um smart contract Solidity de exemplo

O código a seguir usa nosso contrato de exemplo fornecido acima.

Para compilar um contrato, podemos executar o código a seguir.

Para usar uma versão específica da EVM na compilação do nosso contrato, podemos definir a versão da seguinte forma.

O que é o Solidity-upgrade?

O solidity-upgrade permite que você atualize seus contratos para refletir mudanças que quebram compatibilidade na linguagem. Embora não faça, e não possa fazer, todos os ajustes necessários para cada release que quebra compatibilidade, ele ainda assim suporta aqueles que, de outra forma, exigiriam muitos ajustes manuais tediosos.

Como o Solidity-upgrade funciona?

O Solidity-upgrade, que é baseado em libsolidity, pode analisar sintaticamente, compilar e analisar seus arquivos-fonte para encontrar atualizações de código-fonte aplicáveis. As atualizações de código-fonte são consideradas pequenas alterações textuais no seu código-fonte. Elas são aplicadas a uma réplica em memória dos arquivos-fonte fornecidos.

A atualização tem duas fases:

Primeira fase

Primeiramente, como não é possível atualizar o código-fonte nesse nível durante a análise sintática dos arquivos-fonte, os erros são coletados e podem ser registrados usando a flag —verbose. Atualmente, não há atualizações de código-fonte disponíveis.

Segunda fase

Na segunda fase, todos os arquivos-fonte são compilados e todos os módulos de análise de atualização ativados são executados junto com a compilação. Por padrão, todos os módulos disponíveis são ativados.

Problemas de compilação podem surgir a partir do solidity-upgrade, os quais as atualizações de código-fonte podem potencialmente corrigir. Se não houver problemas, nenhuma atualização de código-fonte é reportada, e o processo está concluído. Se ocorrerem problemas e uma atualização de código-fonte tiver sido reportada por um módulo de atualização, a primeira atualização de código-fonte reportada é aplicada e a recompilação é iniciada para todos os arquivos-fonte fornecidos.

O que é um decompilador Solidity?

O decompilador Solidity é uma ferramenta que recebe como entrada código EVM de um smart contract compilado e o decompila em um código-fonte semelhante a Solidity. O decompilador ajuda a verificar e entender o comportamento dos contratos.

O decompilador Solidity é útil para depurar smart contracts nos casos em que o código original não está disponível. No entanto, a tecnologia por trás da decompilação de bytecode EVM ainda está em desenvolvimento, já que alguns dos decompiladores disponíveis decompilam apenas parcialmente contratos complexos, e boa parte do código de baixo nível frequentemente fica ausente na versão decompilada.

Decompiladores da Ethereum virtual machine (EVM)

Aqui está uma lista de decompiladores Solidity populares:

1. Ethervm.io

Ethervm.io é um decompilador online gratuito que decompila bytecode de contratos Ethereum em código mais legível, semelhante a Solidity.

Comece agora: https://ethervm.io/decompile

2. JEB decompiler

O JEB decompiler oferece capacidades específicas, como análise de código para determinar métodos sem acesso a uma ABI. O JEB se tornou a ferramenta preferida de auditores de segurança, pesquisadores de vulnerabilidades e engenheiros reversos que investigam smart contracts opacos rodando em plataformas Ethereum.

Comece agora: https://www.pnfsoftware.com/jeb/manual/ethereum/

3. Decompilador online do Etherscan

O decompilador online do Etherscan é um decompilador para a Ethereum Virtual Machine (EVM) que extrai informações do bytecode de runtime e as apresenta em um formato mais legível para humanos.

4. Evemedis, de Nick Johnson

Evemedis é um disassembler de EVM. Ele realiza análise estática no bytecode para fornecer um nível de abstração mais alto do que as operações EVM em estado bruto.

Comece agora: https://github.com/Arachnid/evmdis

5. Decurity

Decurity é um decompilador de ABI que implementa ferramentas simples para recuperar a ABI de smart contracts EVM, incluindo nomes de funções.

Comece agora: https://github.com/Decurity/abi-decompiler

Considerações finais

Agora você entende o que são os compiladores Solidity, como instalá-los e como compilar um contrato simples. A documentação do Solidity contém mais informações sobre compiladores Solidity.

Se você está apenas começando a aprender Solidity, garanta sua vaga no bootcamp de desenvolvedor Solidity de 7 semanas da Alchemy University para dominar os fundamentos do desenvolvimento em Ethereum em um curso online gratuito, interativo e abrangente. Se os desenvolvedores forem novos no desenvolvimento em geral, o curso intensivo de JavaScript de 3 semanas da Alchemy University é um ótimo pré-requisito antes de começar um bootcamp de Ethereum. Se você já domina o básico e quer se aprofundar, confira o novo curso de Solidity da Alchemy

Background gradient

Construa magia blockchain

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