---
title: "O que é o compilador Solidity?"
description: "Saiba como o compilador Solidity funciona e como usá-lo"
---

# O que é o compilador Solidity?

Desenvolvedores Ethereum [escrevendo smart contracts em Solidity](https://docs.soliditylang.org/en/v0.8.16/using-the-compiler.html#compiler-tools) precisam compilar seu código para que a **Ethereum Virtual Machine \(EVM\)** possa entender e executar os comandos apropriados. O compilador [Solidity](https://www.alchemy.com/overviews/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\)](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm). 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\)](https://www.alchemy.com/overviews/solidity-abi), que é uma interface entre dois módulos de programa, geralmente entre sistemas operacionais e programas do usuário.

<ImageBlock
  src="https://media.alchemy.com/1704186026-solidity-compiler.png"
  alt="Diagrama do compilador Solidity transformando código-fonte em bytecode e uma ABI"
  width={456}
  height={414}
  caption="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](https://www.alchemy.com/overviews/solidity-ide), 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.

<ImageBlock
  src="https://media.alchemy.com/1704186197-solidity-compiler-abi-bytecode.jpg"
  alt="Painel do compilador do Remix IDE com setas apontando para as saídas de ABI e bytecode"
  width={730}
  height={1252}
  caption="A ABI e o Bytecode estão disponíveis."
/>

## **Como instalar o compilador Solidity**

Ao [aprender Solidity](https://www.alchemy.com/overviews/learn-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:

<ImageBlock
  src="https://media.alchemy.com/1704186340-macos-solidity-installation.png"
  alt="Saída do terminal verificando a instalação bem-sucedida do compilador Solidity no macOS"
  width={1116}
  height={128}
  caption="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](https://docs.soliditylang.org/en/v0.8.16/using-the-compiler.html#compiler-tools), 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](https://www.alchemy.com/dapps/ethervm-decompiler) é 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](https://www.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/](https://etherscan.io/bytecode-decompiler)

#### 3. Decompilador online do Etherscan

O [decompilador online do Etherscan](https://etherscan.io/bytecode-decompiler) é 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](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](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](https://www.alchemy.com/overviews/learn-solidity), garanta sua vaga no bootcamp de desenvolvedor Solidity de 7 semanas da Alchemy University para [dominar os fundamentos do desenvolvimento em Ethereum](https://www.alchemy.com/university/courses/ethereum?a=8e8f08e668) 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**](https://www.alchemy.com/university/courses/js?a=8e8f08e668) 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](https://www.alchemy.com/university/courses/solidity?a=8e8f08e668)
