Docs
Supported ChainsBoba NetworkJSON-RPC APISmart Contract Methods

eth_call - Boba Network RPC Method

Execute smart contract calls without creating transactions on Boba Network. Essential for reading contract state for AI-powered dApps, Web2 API integration, enterprise blockchain solutions, and offchain computation.

Executes a new message call immediately without creating a transaction on Boba Network. Used for reading smart contract state.

Why Boba Network? Build on the Hybrid Compute L2 enabling smart contracts to access AI models and Web2 APIs natively with HybridCompute 2.0 for native AI/API access, $70M ecosystem funding, OP Stack compatibility, and two-way offchain integration.

Use Cases

The eth_call method is essential for:

  • Reading contract state - Query view/pure functions
  • Simulating transactions - Test execution without gas costs
  • DeFi integrations - Check prices, balances, allowances for AI-powered dApps, Web2 API integration, enterprise blockchain solutions, and offchain computation
  • Complex queries - Execute multi-step contract logic

Request Parameters

Request
fromDATA

20-byte address executing the call

toDATA

20-byte contract address

gasQUANTITY

Gas limit for the call

gasPriceQUANTITY

Gas price in wei

valueQUANTITY

Value to send in wei

dataDATA

Encoded function call data

blockParameterQUANTITY|TAG

Block number or tag

Response Body

Response
resultDATA

The return value of the executed contract function

Code Examples

Bash
# Call ERC20 balanceOf function
curl -X POST https://api-boba-mainnet.n.dwellir.com/YOUR_API_KEY \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "eth_call",
    "params": [{
      "to": "0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000",
      "data": "0x70a08231000000000000000000000000DeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000"
    }, "latest"],
    "id": 1
  }'
JavaScript
import { JsonRpcProvider, Contract } from 'ethers';

const provider = new JsonRpcProvider('https://api-boba-mainnet.n.dwellir.com/YOUR_API_KEY');

// ERC20 ABI for common functions
const ERC20_ABI = [
  "function balanceOf(address owner) view returns (uint256)",
  "function allowance(address owner, address spender) view returns (uint256)",
  "function totalSupply() view returns (uint256)",
  "function decimals() view returns (uint8)",
  "function symbol() view returns (string)"
];

// Read ERC20 token balance
async function getTokenBalance(tokenAddress, walletAddress) {
  const contract = new Contract(tokenAddress, ERC20_ABI, provider);
  const balance = await contract.balanceOf(walletAddress);
  const decimals = await contract.decimals();
  const symbol = await contract.symbol();

  return {
    raw: balance.toString(),
    formatted: (Number(balance) / Math.pow(10, decimals)).toFixed(4),
    symbol: symbol
  };
}

// Direct eth_call
async function directCall(to, data) {
  const result = await provider.call({ to, data });
  return result;
}
Python
from web3 import Web3

w3 = Web3(Web3.HTTPProvider('https://api-boba-mainnet.n.dwellir.com/YOUR_API_KEY'))

def get_erc20_balance(token_address, wallet_address):
    # balanceOf(address) selector
    function_signature = "balanceOf(address)"
    function_selector = w3.keccak(text=function_signature)[:4].hex()

    # Encode address parameter
    encoded_address = wallet_address[2:].lower().zfill(64)
    data = function_selector + encoded_address

    # Make the call
    result = w3.eth.call({
        'to': token_address,
        'data': data
    })

    return int(result.hex(), 16)

balance = get_erc20_balance(
    '0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000',
    '0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000'
)
print(f'Balance: {balance}')
Go
package main

import (
    "context"
    "fmt"
    "log"

    "github.com/ethereum/go-ethereum"
    "github.com/ethereum/go-ethereum/common"
    "github.com/ethereum/go-ethereum/ethclient"
)

func main() {
    client, err := ethclient.Dial("https://api-boba-mainnet.n.dwellir.com/YOUR_API_KEY")
    if err != nil {
        log.Fatal(err)
    }

    contractAddress := common.HexToAddress("0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000")
    data := common.FromHex("0x70a08231000000000000000000000000DeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000")

    msg := ethereum.CallMsg{
        To:   &contractAddress,
        Data: data,
    }

    result, err := client.CallContract(context.Background(), msg, nil)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("Result: 0x%x\n", result)
}

Error Handling

Error CodeMessageDescription
-32000Execution revertedContract function reverted
-32602Invalid parametersInvalid data encoding
-32015VM execution errorContract logic error