Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

EVM Read: Lendo o Estado do Contrato

Antes de podermos liquidar um mercado com IA, precisamos ler seus detalhes da blockchain. Vamos aprender a capability EVM Read.

A capability EVM Read (callContract) permite que você chame funções view e pure em smart contracts.

Todas as leituras acontecem em múltiplos nós da DON e são verificadas via consenso, protegendo contra endpoints RPC defeituosos, dados desatualizados ou respostas maliciosas.

O padrão de leitura

import { cre, getNetwork, encodeCallMsg, LAST_FINALIZED_BLOCK_NUMBER, bytesToHex } from "@chainlink/cre-sdk";
import { encodeFunctionData, decodeFunctionResult, zeroAddress } from "viem";

// 1. Obter rede e criar cliente
const network = getNetwork({
  chainFamily: "evm",
  chainSelectorName: "ethereum-testnet-sepolia",
  isTestnet: true,
});
const evmClient = new cre.capabilities.EVMClient(network.chainSelector.selector);

// 2. Codificar a chamada da função
const callData = encodeFunctionData({
  abi: contractAbi,
  functionName: "myFunction",
  args: [arg1, arg2],
});

// 3. Chamar o contrato
const result = evmClient
  .callContract(runtime, {
    call: encodeCallMsg({
      from: zeroAddress,
      to: contractAddress,
      data: callData,
    }),
    blockNumber: LAST_FINALIZED_BLOCK_NUMBER,
  })
  .result();

// 4. Decodificar o resultado
const decodedValue = decodeFunctionResult({
  abi: contractAbi,
  functionName: "myFunction",
  data: bytesToHex(result.data),
});

Opções de número de bloco

ValorDescrição
LAST_FINALIZED_BLOCK_NUMBERÚltimo bloco finalizado (mais seguro, recomendado)
LATEST_BLOCK_NUMBERBloco mais recente
blockNumber(n)Número de bloco específico para consultas históricas

Por que zeroAddress para from?

Para operações de leitura, o endereço from não importa porque nenhuma transação é enviada, nenhum gas é consumido e nenhum estado é modificado.

Uma nota sobre bindings em Go

O Go SDK requer que você gere bindings type-safe a partir da ABI do seu contrato antes de interagir com ele:

cre generate-bindings evm

Este passo único cria métodos auxiliares para leituras, escritas e decodificação de eventos - sem necessidade de definições manuais de ABI.