Pular para o conteúdo principal
Change page

Interagindo com contratos inteligentes

Você nem sempre precisa escrever e implantar seu próprio contrato inteligente. Na maioria das vezes, como desenvolvedor, você vai querer interagir com contratos inteligentes que outras pessoas já implantaram na rede Ethereum.

Esta página aborda as duas maneiras fundamentais de interagir com um contrato inteligente — lendo dados e escrevendo dados — e as ferramentas necessárias para fazer ambos.

Pré-requisitos

Você deve entender:

Duas maneiras de interagir com um contrato inteligente

A interação com um contrato inteligente se divide em duas categorias:

Lendo de um contrato

A leitura é uma operação gratuita que não cria uma transação e não altera nenhum estado na blockchain.

Quando você lê de um contrato, está simplesmente consultando dados que já existem. Por exemplo:

  • Verificar o saldo de um token ERC-20
  • Ler o preço atual de uma corretora descentralizada
  • Obter o proprietário de um NFT

Como as leituras não modificam o estado, elas não custam gás e podem ser realizadas por qualquer pessoa sem a necessidade de ETH.

Escrevendo em um contrato

A escrita é uma operação de mudança de estado que requer uma transação e custa gás.

Quando você escreve em um contrato, está acionando uma função que modifica o estado da blockchain. Por exemplo:

  • Transferir tokens
  • Trocar tokens em uma corretora descentralizada
  • Cunhar um NFT

A escrita sempre requer:

  1. Uma Conta de Propriedade Externa (EOA) com ETH suficiente para o gás
  2. Uma transação assinada pela chave privada da conta
  3. Que a transação seja minerada e incluída em um bloco

Com a abstração de conta, uma conta de contrato inteligente também pode iniciar escritas, e um pagador pode cobrir o gás em nome do usuário — portanto, uma EOA com ETH não é estritamente necessária.

Entendendo as ABIs de contratos

Para interagir com um contrato inteligente, seu aplicativo precisa saber o que o contrato pode fazer. É aqui que entra a Interface Binária de Aplicação (ABI).

Uma ABI é um documento JSON que descreve:

  • Cada função que o contrato expõe (nome, entradas, saídas)
  • Cada evento que o contrato pode emitir
  • Como codificar e decodificar dados ao se comunicar com o contrato

Pense na ABI como o manual de instruções do contrato — sem ela, seu aplicativo não sabe quais funções existem ou quais parâmetros elas esperam.

Onde encontrar a ABI de um contrato

  • Contratos verificados no Etherscan - O Etherscan (abre em uma nova aba) expõe automaticamente a ABI para código-fonte verificado
  • Do desenvolvedor - muitos projetos publicam suas ABIs em suas documentações ou pacotes npm
  • Gerar a partir do código-fonte - se você tiver o código-fonte em Solidity, pode compilá-lo para produzir a ABI

Ferramentas e bibliotecas para interagir com contratos

Os desenvolvedores geralmente usam uma biblioteca JavaScript/TypeScript para interagir com contratos a partir de um aplicativo web, backend ou script.

Bibliotecas de cliente (JavaScript/TypeScript)

Bibliotecas de backend

Exemplo: lendo o saldo de um token com Viem

Exemplo: enviando uma transação com ethers.js

Eventos e logs

Contratos inteligentes podem emitir eventos para sinalizar que algo aconteceu. Seu aplicativo pode escutar esses eventos para reagir em tempo real.

Simulando transações

Antes de enviar uma transação, você pode simulá-la para verificar se ela seria bem-sucedida — e para ver seu valor de retorno — sem gastar gás. Isso é útil para detectar erros precocemente e para visualizar os resultados.

A maioria das bibliotecas de cliente suporta isso através de eth_call:

// Com Viem
const result = await client.simulateContract({
  address: contractAddress,
  abi,
  functionName: 'swap',
  args: [amountIn],
  account: userAddress,
})

Carteiras e assinatura

Em um dapp, a carteira do usuário (como MetaMask, Rainbow ou WalletConnect) lida com a assinatura. Você não gerencia chaves privadas diretamente.

Bibliotecas de carteira e ferramentas de conexão abstraem isso para que você possa se concentrar na construção da lógica do seu aplicativo.

Leitura adicional