Introdução aos contratos inteligentes
O que é um contrato inteligente?
Um "contrato inteligente" é simplesmente um programa que é executado na blockchain do Ethereum. É uma coleção de código (suas funções) e dados (seu estado) que reside em um endereço específico na blockchain do Ethereum.
Os contratos inteligentes são um tipo de conta Ethereum. Isso significa que eles têm um saldo e podem ser o alvo de transações. No entanto, eles não são controlados por um usuário; em vez disso, são implantados na rede e executados conforme programado. As contas de usuário podem então interagir com um contrato inteligente enviando transações que executam uma função definida no contrato inteligente. Os contratos inteligentes podem definir regras, como um contrato regular, e aplicá-las automaticamente por meio do código. Os contratos inteligentes não podem ser excluídos por padrão, e as interações com eles são irreversíveis.
Pré-requisitos
Se você está apenas começando ou procurando uma introdução menos técnica, recomendamos nossa introdução aos contratos inteligentes.
Certifique-se de ter lido sobre contas, transações e a máquina virtual do Ethereum antes de mergulhar no mundo dos contratos inteligentes.
Uma máquina de venda automática digital
Talvez a melhor metáfora para um contrato inteligente seja uma máquina de venda automática, conforme descrito por Nick Szabo (opens in a new tab). Com as entradas corretas, uma determinada saída é garantida.
Para pegar um lanche em uma máquina de venda automática:
dinheiro + seleção do lanche = lanche dispensado
Essa lógica é programada na máquina de venda automática.
Um contrato inteligente, assim como uma máquina de venda automática, tem uma lógica programada nele. Aqui está um exemplo simples de como essa máquina de venda automática seria se fosse um contrato inteligente escrito em Solidity:
pragma solidity 0.8.7;
contract VendingMachine {
// Declarar as variáveis de estado do contrato
address public owner;
mapping (address => uint) public cupcakeBalances;
// Quando o contrato 'VendingMachine' é implantado:
// 1. definir o endereço de implantação como o proprietário do contrato
// 2. definir o saldo de cupcakes do contrato inteligente implantado como 100
constructor() {
owner = msg.sender;
cupcakeBalances[address(this)] = 100;
}
// Permitir que o proprietário aumente o saldo de cupcakes do contrato inteligente
function refill(uint amount) public {
require(msg.sender == owner, "Only the owner can refill.");
cupcakeBalances[address(this)] += amount;
}
// Permitir que qualquer pessoa compre cupcakes
function purchase(uint amount) public payable {
require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");
require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");
cupcakeBalances[address(this)] -= amount;
cupcakeBalances[msg.sender] += amount;
}
}
Assim como uma máquina de venda automática elimina a necessidade de um funcionário vendedor, os contratos inteligentes podem substituir intermediários em muitos setores.
Não permissionado
Qualquer pessoa pode escrever um contrato inteligente e implantá-lo na rede. Você só precisa aprender a programar em uma linguagem de contrato inteligente e ter ETH suficiente para implantar seu contrato. Implantar um contrato inteligente é tecnicamente uma transação, então você precisa pagar gás da mesma forma que precisa pagar gás por uma simples transferência de ETH. No entanto, os custos de gás para a implantação de contratos são muito mais altos.
O Ethereum possui linguagens amigáveis para desenvolvedores para escrever contratos inteligentes:
- Solidity
- Vyper
No entanto, eles devem ser compilados antes de poderem ser implantados para que a máquina virtual do Ethereum possa interpretar e armazenar o contrato. Mais sobre compilação
Composabilidade
Os contratos inteligentes são públicos no Ethereum e podem ser considerados como APIs abertas. Isso significa que você pode chamar outros contratos inteligentes em seu próprio contrato inteligente para expandir muito o que é possível. Os contratos podem até mesmo implantar outros contratos.
Saiba mais sobre a composabilidade de contratos inteligentes.
Limitações
Os contratos inteligentes sozinhos não podem obter informações sobre eventos do "mundo real" porque não podem recuperar dados de fontes offchain. Isso significa que eles não podem responder a eventos no mundo real. Isso é intencional. Depender de informações externas poderia prejudicar o consenso, o que é importante para a segurança e a descentralização.
No entanto, é importante que os aplicativos de blockchain possam usar dados offchain. A solução são os oráculos, que são ferramentas que ingerem dados offchain e os disponibilizam para os contratos inteligentes.
Outra limitação dos contratos inteligentes é o tamanho máximo do contrato. Um contrato inteligente pode ter no máximo 24 KB ou ficará sem gás. Isso pode ser contornado usando o Padrão Diamante (opens in a new tab).
Contratos multisig
Os contratos multisig (assinatura múltipla) são contas de contratos inteligentes que exigem várias assinaturas válidas para executar uma transação. Isso é muito útil para evitar pontos únicos de falha em contratos que mantêm quantias substanciais de ether ou outros tokens. As multisigs também dividem a responsabilidade pela execução do contrato e pelo gerenciamento de chaves entre várias partes e evitam que a perda de uma única chave privada leve à perda irreversível de fundos. Por esses motivos, os contratos multisig podem ser usados para a governança simples de uma DAO. As multisigs exigem N assinaturas de M assinaturas aceitáveis possíveis (onde N ≤ M e M > 1) para serem executadas. N = 3, M = 5 e N = 4, M = 7 são comumente usados. Uma multisig 4/7 exige quatro de sete assinaturas válidas possíveis. Isso significa que os fundos ainda podem ser recuperados mesmo se três assinaturas forem perdidas. Nesse caso, também significa que a maioria dos detentores de chaves deve concordar e assinar para que o contrato seja executado.
Recursos de contratos inteligentes
Contratos OpenZeppelin - Biblioteca para o desenvolvimento seguro de contratos inteligentes.
- openzeppelin.com/contracts/ (opens in a new tab)
- GitHub (opens in a new tab)
- Fórum da comunidade (opens in a new tab)
Leitura adicional
- Coinbase: O que é um contrato inteligente? (opens in a new tab)
- Chainlink: O que é um contrato inteligente? (opens in a new tab)
- Vídeo: Explicado de forma simples - Contratos inteligentes (opens in a new tab)
- Cyfrin Updraft: Plataforma de aprendizado e auditoria Web3 (opens in a new tab)
Tutoriais: Assinaturas de contratos inteligentes (EIP-1271) no Ethereum
- EIP-1271: Assinando e verificando assinaturas de contratos inteligentes – Como a EIP-1271 permite que os contratos inteligentes verifiquem assinaturas, com um passo a passo da implementação do Safe.