eth_call
curl --request POST \
--url https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/ \
--header 'Content-Type: application/json' \
--data '
{
"id": 1,
"jsonrpc": "2.0",
"method": "eth_call",
"params": [
{
"from": "0x5d20879655df3c1e04ab111af0009ad650e762f0",
"to": "0x5d20879655df3c1e04ab111af0009ad650e762f0",
"data": "0x"
},
"latest"
]
}
'import requests
url = "https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/"
payload = {
"id": 1,
"jsonrpc": "2.0",
"method": "eth_call",
"params": [
{
"from": "0x5d20879655df3c1e04ab111af0009ad650e762f0",
"to": "0x5d20879655df3c1e04ab111af0009ad650e762f0",
"data": "0x"
},
"latest"
]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
id: 1,
jsonrpc: '2.0',
method: 'eth_call',
params: [
{
from: '0x5d20879655df3c1e04ab111af0009ad650e762f0',
to: '0x5d20879655df3c1e04ab111af0009ad650e762f0',
data: '0x'
},
'latest'
]
})
};
fetch('https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'id' => 1,
'jsonrpc' => '2.0',
'method' => 'eth_call',
'params' => [
[
'from' => '0x5d20879655df3c1e04ab111af0009ad650e762f0',
'to' => '0x5d20879655df3c1e04ab111af0009ad650e762f0',
'data' => '0x'
],
'latest'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/"
payload := strings.NewReader("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_call\",\n \"params\": [\n {\n \"from\": \"0x5d20879655df3c1e04ab111af0009ad650e762f0\",\n \"to\": \"0x5d20879655df3c1e04ab111af0009ad650e762f0\",\n \"data\": \"0x\"\n },\n \"latest\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/")
.header("Content-Type", "application/json")
.body("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_call\",\n \"params\": [\n {\n \"from\": \"0x5d20879655df3c1e04ab111af0009ad650e762f0\",\n \"to\": \"0x5d20879655df3c1e04ab111af0009ad650e762f0\",\n \"data\": \"0x\"\n },\n \"latest\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_call\",\n \"params\": [\n {\n \"from\": \"0x5d20879655df3c1e04ab111af0009ad650e762f0\",\n \"to\": \"0x5d20879655df3c1e04ab111af0009ad650e762f0\",\n \"data\": \"0x\"\n },\n \"latest\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 1,
"result": "0x"
}Arc node API
eth_call | Arc
Arc API method that executes a new message call immediately without creating a transaction on the blockchain. Arc via Chainstack.
POST
/
eth_call
curl --request POST \
--url https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/ \
--header 'Content-Type: application/json' \
--data '
{
"id": 1,
"jsonrpc": "2.0",
"method": "eth_call",
"params": [
{
"from": "0x5d20879655df3c1e04ab111af0009ad650e762f0",
"to": "0x5d20879655df3c1e04ab111af0009ad650e762f0",
"data": "0x"
},
"latest"
]
}
'import requests
url = "https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/"
payload = {
"id": 1,
"jsonrpc": "2.0",
"method": "eth_call",
"params": [
{
"from": "0x5d20879655df3c1e04ab111af0009ad650e762f0",
"to": "0x5d20879655df3c1e04ab111af0009ad650e762f0",
"data": "0x"
},
"latest"
]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
id: 1,
jsonrpc: '2.0',
method: 'eth_call',
params: [
{
from: '0x5d20879655df3c1e04ab111af0009ad650e762f0',
to: '0x5d20879655df3c1e04ab111af0009ad650e762f0',
data: '0x'
},
'latest'
]
})
};
fetch('https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'id' => 1,
'jsonrpc' => '2.0',
'method' => 'eth_call',
'params' => [
[
'from' => '0x5d20879655df3c1e04ab111af0009ad650e762f0',
'to' => '0x5d20879655df3c1e04ab111af0009ad650e762f0',
'data' => '0x'
],
'latest'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/"
payload := strings.NewReader("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_call\",\n \"params\": [\n {\n \"from\": \"0x5d20879655df3c1e04ab111af0009ad650e762f0\",\n \"to\": \"0x5d20879655df3c1e04ab111af0009ad650e762f0\",\n \"data\": \"0x\"\n },\n \"latest\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/")
.header("Content-Type", "application/json")
.body("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_call\",\n \"params\": [\n {\n \"from\": \"0x5d20879655df3c1e04ab111af0009ad650e762f0\",\n \"to\": \"0x5d20879655df3c1e04ab111af0009ad650e762f0\",\n \"data\": \"0x\"\n },\n \"latest\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://arc-testnet.core.chainstack.com/6caa7fd90475ac9214f7521dd460fa7c/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_call\",\n \"params\": [\n {\n \"from\": \"0x5d20879655df3c1e04ab111af0009ad650e762f0\",\n \"to\": \"0x5d20879655df3c1e04ab111af0009ad650e762f0\",\n \"data\": \"0x\"\n },\n \"latest\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 1,
"result": "0x"
}Arc API method that executes a new message call immediately without creating a transaction on the blockchain. This is commonly used to read data from smart contracts, such as ERC-20 token balances.
The following example queries the
Get your own node endpoint todayStart for free and get your app to production levels immediately. No credit card required.You can sign up with your GitHub, X, Google, or Microsoft account.
Parameters
callObject— the call object:from— (optional) address the call is sent fromto— the address the call is directed togas— (optional) gas provided for the callgasPrice— (optional) gas price for the callvalue— (optional) value sent with the calldata— (optional) hash of the method signature and encoded parameters
blockParameter— the block number (hex) or tag (latest,earliest,pending)
State override (optional)
eth_call accepts an optional third parameter: a state override set that changes account state for this call only. Nothing is written to the chain. The set is an object keyed by account address, and each address can override:
balance— the account balance in wei, hex-encodednonce— the account nonce, hex-encodedcode— the bytecode to run at the addressstate— storage slot values that replace the account’s entire storagestateDiff— storage slot values to change, keeping the rest of the storage
42 at an unused address, then calls that address:
curl --request POST \
--url CHAINSTACK_NODE_URL \
--header 'Content-Type: application/json' \
--data '{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_call",
"params": [
{ "to": "0x00000000000000000000000000000000c0ffee42", "data": "0x" },
"latest",
{ "0x00000000000000000000000000000000c0ffee42": { "code": "0x602a60005260206000f3" } }
]
}'
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x000000000000000000000000000000000000000000000000000000000000002a"
}
Response
result— the return value of the executed contract call
eth_call code examples
The following example queries the balanceOf function on the USDC ERC-20 token contract:
const ethers = require('ethers');
const NODE_URL = "CHAINSTACK_NODE_URL";
const provider = new ethers.JsonRpcProvider(NODE_URL);
// USDC token address
const USDC = "0x3600000000000000000000000000000000000000";
const getBalance = async (address) => {
const abi = ["function balanceOf(address) view returns (uint256)"];
const token = new ethers.Contract(USDC, abi, provider);
const balance = await token.balanceOf(address);
// USDC uses 6 decimals
console.log(`USDC balance: ${ethers.formatUnits(balance, 6)}`);
};
getBalance("0x9729187D9E8Bbefa8295F39f5634cA454dd9d294");
from web3 import Web3
node_url = "CHAINSTACK_NODE_URL"
web3 = Web3(Web3.HTTPProvider(node_url))
# USDC token address
USDC = "0x3600000000000000000000000000000000000000"
# balanceOf function signature: keccak256("balanceOf(address)")[:4]
# Plus address padded to 32 bytes
address = "0x9729187D9E8Bbefa8295F39f5634cA454dd9d294"
data = "0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294"
result = web3.eth.call({
'to': USDC,
'data': data
})
balance = int(result.hex(), 16) / 10**6 # USDC uses 6 decimals
print(f"USDC balance: {balance}")
curl -X POST "CHAINSTACK_NODE_URL" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_call",
"params": [
{
"to": "0x3600000000000000000000000000000000000000",
"data": "0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294"
},
"latest"
],
"id": 1
}'
Last modified on October 1, 2026
Was this page helpful?