eth_call - Immutable RPC Method
Execute smart contract calls without creating transactions on Immutable. Essential for reading contract state for Web3 gaming (Gods Unchained, RavenQuest), gaming NFTs with enforced royalties, and cross-chain game assets.
Executes a new message call immediately without creating a transaction on Immutable. Used for reading smart contract state.
Why Immutable? Build on the gaming-optimized zkEVM with 660+ games, 5.5M+ Passport signups, and $40M TVL with first EVM chain with enforceable royalties, Polygon zkEVM technology, $2B+ ecosystem funding, and Agglayer cross-chain liquidity.
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 Web3 gaming (Gods Unchained, RavenQuest), gaming NFTs with enforced royalties, and cross-chain game assets
- Complex queries - Execute multi-step contract logic
Request Parameters
20-byte address executing the call
20-byte contract address
Gas limit for the call
Gas price in wei
Value to send in wei
Encoded function call data
Block number or tag
Response Body
The return value of the executed contract function
Code Examples
# Call ERC20 balanceOf function
curl -X POST https://api-immutable-zkevm-mainnet.n.dwellir.com/YOUR_API_KEY \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_call",
"params": [{
"to": "0x3A0C2Ba54D6CBd3121f01b96DFd20e99D1696c9D",
"data": "0x70a082310000000000000000000000003A0C2Ba54D6CBd3121f01b96DFd20e99D1696c9D"
}, "latest"],
"id": 1
}'import { JsonRpcProvider, Contract } from 'ethers';
const provider = new JsonRpcProvider('https://api-immutable-zkevm-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;
}from web3 import Web3
w3 = Web3(Web3.HTTPProvider('https://api-immutable-zkevm-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(
'0x3A0C2Ba54D6CBd3121f01b96DFd20e99D1696c9D',
'0x3A0C2Ba54D6CBd3121f01b96DFd20e99D1696c9D'
)
print(f'Balance: {balance}')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-immutable-zkevm-mainnet.n.dwellir.com/YOUR_API_KEY")
if err != nil {
log.Fatal(err)
}
contractAddress := common.HexToAddress("0x3A0C2Ba54D6CBd3121f01b96DFd20e99D1696c9D")
data := common.FromHex("0x70a082310000000000000000000000003A0C2Ba54D6CBd3121f01b96DFd20e99D1696c9D")
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 Code | Message | Description |
|---|---|---|
| -32000 | Execution reverted | Contract function reverted |
| -32602 | Invalid parameters | Invalid data encoding |
| -32015 | VM execution error | Contract logic error |
Related Methods
eth_estimateGas- Estimate gas for transactioneth_sendRawTransaction- Send actual transaction
eth_feeHistory
Get historical gas fee data on Immutable. Essential for fee prediction for Web3 gaming (Gods Unchained, RavenQuest), gaming NFTs with enforced royalties, and cross-chain game assets.
eth_getLogs
Query event logs on Immutable. Essential for indexing Web3 gaming (Gods Unchained, RavenQuest), gaming NFTs with enforced royalties, and cross-chain game assets on the gaming-optimized zkEVM with 660+ games, 5.5M+ Passport signups, and $40M TVL.