Introdução aos smart contracts em Solidity
Escrito por Daniel Idowu
Contratos inteligentes em Solidity têm diversos usos, desde carteiras multisig até exchanges descentralizadas. Solidity é uma das principais linguagens de programação web3, construída especificamente para a criação de contratos inteligentes, e por isso tem visto um aumento constante em popularidade.
Este artigo vai apresentar os contratos inteligentes em Solidity, como funcionam e quais são suas propriedades. Também vamos passar pela sintaxe e pelos tipos de dados de Solidity para você começar a interagir com contratos inteligentes em Solidity no seu próximo projeto. Para expandir seu conhecimento de Solidity, faça o curso gratuito de sintaxe Solidity da Alchemy University.
O que é um contrato inteligente em Solidity?
Um contrato inteligente em Solidity é um programa escrito em Solidity, implantado na blockchain Ethereum e executado na Ethereum Virtual Machine (EVM). A Ethereum armazena o código do contrato inteligente e seus dados (seu estado) em um endereço designado.
Quando condições predeterminadas são atendidas, o programa, ou contrato inteligente, armazenado na blockchain é executado sem a necessidade de um intermediário. Contratos inteligentes são, em outras palavras, programas que governam o comportamento de contas dentro do estado da Ethereum.
Você pode escrever contratos inteligentes em Solidity ou em qualquer outra linguagem de programação compatível com a EVM. Eles precisam primeiro ser compilados em bytecode para serem compatíveis com a EVM.
Solidity é uma linguagem orientada a objetos, de alto nível, para escrever contratos inteligentes. Contratos inteligentes escritos em Solidity podem ser usados para diversos fins, como votação, crowdfunding, leilões cegos e carteiras multisig.
Como funcionam os contratos inteligentes?
Contratos inteligentes são programas armazenados na blockchain. Um contrato inteligente formaliza acordos entre diversas partes em código e aplica regras automaticamente quando pré-condições são atendidas. Isso significa que todas as partes envolvidas no contrato inteligente têm certeza imediata do resultado, sem perda de tempo ou envolvimento de terceiros. Contratos inteligentes também podem automatizar fluxos de trabalho para disparar o próximo evento após a execução.
Contratos inteligentes que seguem o padrão ERC20 são considerados tokens ERC20. Tokens ERC20 permitem a transferência de tokens entre detentores.
Quais são as propriedades dos contratos inteligentes em Solidity?
Contratos inteligentes são, por natureza, imutáveis e determinísticos. Isso significa que, uma vez implantado ou construído na Ethereum, um contrato inteligente nunca deixará de existir, a menos que condições que disparam uma autodestruição tenham sido programadas nele. O código sempre executará conforme as condições para as quais foi programado.
Além disso, contratos inteligentes são determinísticos, já que cada nó da rede é capaz de produzir o mesmo resultado quando a mesma entrada é fornecida para um método. Caso nós diferentes cheguem a saídas diferentes na execução do contrato inteligente, o protocolo de consenso é violado e o contrato inteligente se torna inutilizável.
Além disso, contratos inteligentes são sem permissão, o que significa que qualquer pessoa que possua ETH e tenha acesso à internet é capaz de implantar um contrato inteligente na Ethereum.
Por fim, contratos inteligentes são componíveis. Isso significa que você pode usar contratos inteligentes de outros projetos como blocos de construção para o seu projeto. Contratos inteligentes podem ser pensados como APIs abertas, em que os usuários não precisam escrever seu próprio contrato inteligente para se tornarem desenvolvedores de dApp, apenas precisam saber como interagir com eles.
Sintaxe de contratos inteligentes em Solidity
Embora haja muitos recursos disponíveis para ajudar você a começar a aprender Solidity, esta seção vai descrever a sintaxe usada para escrever contratos inteligentes em Solidity.
1. Contracts
Contracts em Solidity são semelhantes a classes em linguagens orientadas a objetos. Cada contract pode conter declarações de State Variables, Functions, Function Modifiers, Events, Errors, Struct Types e Enum Types. Neste artigo vamos discutir Constructors, State Variables e Integer Variables em mais detalhes. Além disso, contracts podem herdar de outros contracts.
Também existem contracts especiais chamados libraries e interfaces.
2. Versionamento semântico
Solidity, como a maioria dos softwares, usa versionamento semântico. Isso significa que não há grandes mudanças a menos que você esteja atualizando uma versão major. Você pode consultar as principais mudanças que quebram compatibilidade introduzidas em cada versão do Solidity na documentação. A versão mais atualizada do Solidity é v0. 8.16, a partir de agosto de 2022.
3. Constructor
Um constructor é chamado apenas uma vez durante a implantação, ou criação do contract. Um constructor é uma função opcional declarada com a palavra-chave constructor e permite executar código de inicialização do contract.
Antes de o código do constructor ser executado, as state variables são inicializadas com o valor especificado, caso você as inicialize inline, ou com seu valor padrão, caso não o faça.
Depois que o constructor é executado, o código final do contract é implantado na blockchain.
Se não houver constructor, o contract vai assumir o constructor padrão.
4. State variables
State variables são variáveis cujos valores são armazenados no storage do contract. Cada função tem seu próprio escopo, e state variables devem sempre ser definidas fora desse escopo.
State variables seguem regras de visibilidade. Você pode tornar state variables públicas com a palavra-chave de visibilidade public, que fornece uma função getter que outros contratos inteligentes podem acessar.
5. Modificação
Em Solidity, um modifier altera a semântica de uma função de forma declarativa. Em outras palavras, modifiers mudam o comportamento da função à qual estão anexados. Modifiers são úteis para eliminar redundância de código e podem ser reutilizados para verificar a mesma condição em múltiplas funções dentro de um contrato inteligente.
6. Integer variables
Existem dois tipos de integer variables em Solidity: unsigned integers (uint), e signed integers (int). Um signed integer é um value data type que pode armazenar valores negativos e positivos. Um unsigned integer, por outro lado, não tem sinal e, portanto, é um value data type que deve ser não negativo.
Tipos de dados em Solidity
Como outras linguagens de programação, Solidity tem diversas classificações de tipos de dados. No entanto, Solidity é única no sentido de que vários tipos de dados elementares podem ser combinados para formar tipos de dados mais complexos. Esta seção descreve os principais tipos de dados em Solidity.
1. Booleans
Os possíveis valores de booleans, denotados por bool em Solidity, são as constantes true e false.
2. Strings
String literals são escritos com aspas duplas ou simples. Strings também podem ser divididas em múltiplas partes consecutivas, o que pode ser útil ao lidar com strings longas.
3. Numbers
Fixed e ufixed referem-se, respectivamente, a fixed point numbers com sinal e sem sinal de vários tamanhos.
4. Bytes
Em Solidity, byte refere-se a signed integers de 8 bits. Bits são armazenados na memória com valores binários de 0 ou 1. Em Solidity, o data type byte representa uma sequência de bytes.
Existem dois tipos de byte types em Solidity, fixed-sized byte arrays e dynamically-sized byte arrays. A palavra-chave bytesX é usada para definir variáveis em que X denota a sequência de bytes de 1 até 32.
Bytes em Solidity representa um array dinâmico de bytes. Eles não são, no entanto, um value type.
5. Address
O address armazena um valor de 20 bytes, que é o tamanho de um endereço Ethereum. Hexadecimal literals que passam no teste de checksum do address são do tipo address. Hexadecimal literals que têm entre 39 e 41 dígitos de comprimento e não passam no teste de checksum produzem um erro. Você pode adicionar zeros no início (para integer types) ou no final (para bytesNN types) para remover o erro.
6. Payable address
O payable address, denotado por address payable, é semelhante ao address, mas com os membros adicionais transfer e send. A distinção é necessária porque um address simples pode ser um contrato inteligente que não foi construído para aceitar Ether (ETH). Um address payable é um endereço para o qual você pode enviar Ether.
7. Enums
Enums, também conhecidos como enumeration values em Solidity, são uma forma de criar um tipo definido pelo usuário, o que permite criar valores constantes, como os nomes de constantes integrais. Enums tornam um contrato inteligente mais fácil de ler e manter em comparação com tipos de valor elementares.
Enums são explicitamente conversíveis de e para todos os integer types, mas a conversão implícita não é permitida. A conversão explícita a partir de integer verifica em tempo de execução se o valor está dentro do intervalo do enum e causa um panic error caso contrário. Enums, portanto, reduzem a incidência de bugs no seu código.
Enums exigem pelo menos um membro, e seu valor padrão quando declarado é o primeiro membro. Enums não podem ter mais de 256 membros.
8. Arrays
Arrays são um grupo de variáveis do mesmo data type, com cada variável tendo um índice único. Arrays podem ter um tamanho fixo em tempo de compilação, o que os torna fixed arrays, ou podem ter um tamanho dinâmico, o que os torna dynamic arrays.
Arrays de tamanho fixo têm um tamanho predefinido na declaração. A palavra-chave new não pode ser usada para introduzir membros adicionais ao array. Em vez disso, as variáveis de dados devem ser inicializadas inline.
Arrays de tamanho dinâmico não têm um tamanho predefinido quando são declarados. Em vez disso, seu tamanho é determinado em tempo de execução.
Elementos de array podem ser de qualquer tipo, incluindo um mapping ou um struct, uma estrutura de dados definida pelo usuário.
9. Mappings
Em Solidity, mappings funcionam como hash tables ou dicionários em outras linguagens de programação. Mappings funcionam como um reference type e armazenam dados na forma de pares chave-valor, em que a chave pode ser qualquer um dos data types embutidos, exceto reference types, e o valor pode ser de qualquer tipo.
Se state variables de um mapping type forem públicas, Solidity cria uma função getter para você.
10. Structs (tipos definidos pelo usuário)
Um struct, ou uma estrutura, permite que você defina novos data types. Struct types podem ser usados dentro de mappings e arrays, e podem eles mesmos conter mappings e arrays aninhados. No entanto, não é possível que um struct contenha um membro de seu próprio tipo, já que o tamanho do struct precisa ser finito.
O que é o contexto de um contrato inteligente?
Um contexto de contrato inteligente fornece informações sobre o ambiente em que uma transação está sendo executada. Quando uma função de contrato inteligente é chamada por meio de uma transação, a função chamada recebe algumas informações extras. Dentro de uma função de contrato inteligente você terá acesso a essas variáveis de contexto.
Você tem acesso ao message sender, aos preços de gas e aos testes conduzidos na transação. Portanto, você tem acesso a uma série de variáveis de contexto que pode usar de forma intercambiável na lógica do seu código.
Inscreva-se em um bootcamp de desenvolvedor Ethereum para saber mais
Neste artigo, apresentamos os fundamentos para começar com contratos inteligentes em Solidity e descrevemos os principais tipos de dados e sintaxe para aumentar seu entendimento. Inscreva-se no Bootcamp gratuito online de Desenvolvedor Ethereum da Alchemy para aprender mais sobre a criação de contratos inteligentes com Solidity. Se os desenvolvedores forem novos no desenvolvimento em geral, o curso intensivo de JavaScript para Ethereum de 3 semanas da Alchemy University é um ótimo pré-requisito.
Visões gerais relacionadas
Solidity3 de dezembro de 2025
As 6 melhores IDEs de Solidity para desenvolvedores (2026)
Conheça as melhores IDEs para desenvolvimento em Solidity.
Solidity19 de novembro de 2025
Otimização de gas em Solidity: 12 técnicas para deixar seus smart contracts mais baratos e eficientes
Quer escrever código melhor e reduzir suas taxas de gas?
Solidity13 de novembro de 2025
12 boas práticas de segurança para smart contracts em Solidity
Proteja seus smart contracts com essas dicas e ferramentas de segurança de especialistas.

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