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: Leyendo el Estado del Contrato

Antes de poder liquidar un mercado con IA, necesitamos leer sus detalles de la blockchain. Aprendamos la capacidad EVM Read.

La capacidad EVM Read (callContract) te permite llamar funciones view y pure en smart contracts.

Todas las lecturas se realizan a través de múltiples nodos del DON y se verifican mediante consenso, protegiendo contra endpoints RPC defectuosos, datos obsoletos o respuestas maliciosas.

El patrón de lectura

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

// 1. Get network and create client
const network = getNetwork({
  chainFamily: "evm",
  chainSelectorName: "ethereum-testnet-sepolia",
  isTestnet: true,
});
const evmClient = new cre.capabilities.EVMClient(network.chainSelector.selector);

// 2. Encode the function call
const callData = encodeFunctionData({
  abi: contractAbi,
  functionName: "myFunction",
  args: [arg1, arg2],
});

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

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

Opciones de número de bloque

ValorDescripción
LAST_FINALIZED_BLOCK_NUMBERÚltimo bloque finalizado (más seguro, recomendado)
LATEST_BLOCK_NUMBERBloque más reciente
blockNumber(n)Número de bloque específico para consultas históricas

¿Por qué zeroAddress para from?

Para operaciones de lectura, la dirección from no importa porque no se envía ninguna transacción, no se consume gas y no se modifica el estado.

Una nota sobre Go bindings

El Go SDK requiere que generes bindings con tipos seguros desde el ABI de tu contrato antes de interactuar con el:

cre generate-bindings evm

Este paso único crea métodos helper para lecturas, escrituras y decodificación de eventos - sin necesidad de definiciones ABI manuales.