Docs
Supported ChainsManta PacificJSON-RPC APISmart Contract Methods

eth_call - Manta RPC Method

Execute smart contract calls without creating transactions on Manta Pacific. Essential for reading contract state for ZK-enabled DeFi, private identity verification, and modular ZK applications via Universal Circuits.

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

Why Manta? Build on the modular ZK L2 with Celestia DA delivering the lowest fees for 200+ dApps with first L2 on Celestia mainnet, ZK-as-a-Service via Universal Circuits, Polygon CDK integration, and modular OP Stack architecture.

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 ZK-enabled DeFi, private identity verification, and modular ZK applications via Universal Circuits
  • 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-manta-pacific-archive.n.dwellir.com/YOUR_API_KEY \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "eth_call",
    "params": [{
      "to": "0x0Dc808adcE2099A9F62AA87D9670745AbA741746",
      "data": "0x70a082310000000000000000000000000Dc808adcE2099A9F62AA87D9670745AbA741746"
    }, "latest"],
    "id": 1
  }'
JavaScript
import { JsonRpcProvider, Contract } from 'ethers';

const provider = new JsonRpcProvider('https://api-manta-pacific-archive.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-manta-pacific-archive.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(
    '0x0Dc808adcE2099A9F62AA87D9670745AbA741746',
    '0x0Dc808adcE2099A9F62AA87D9670745AbA741746'
)
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-manta-pacific-archive.n.dwellir.com/YOUR_API_KEY")
    if err != nil {
        log.Fatal(err)
    }

    contractAddress := common.HexToAddress("0x0Dc808adcE2099A9F62AA87D9670745AbA741746")
    data := common.FromHex("0x70a082310000000000000000000000000Dc808adcE2099A9F62AA87D9670745AbA741746")

    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