跳转到内容

eth_call

立即执行一次消息调用,但不会在区块链上创建交易。常用于读取合约状态数据。

  1. Object — 交易调用对象:

    字段类型必填说明
    fromDATA发送方地址
    toDATA合约地址
    gasQUANTITYGas 上限
    gasPriceQUANTITYGas 单价
    valueQUANTITY转账金额
    dataDATAABI 编码后的函数调用数据
  2. QUANTITY|TAG — 区块号,或 "latest""earliest""pending"

DATA — 合约函数执行后的返回值。

Terminal window
# 读取 USDC 合约 totalSupply()
curl -X POST https://eth-mainnet.blockreq.com/v1/rpc/public \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_call",
"params": [{
"to": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"data": "0x18160ddd"
}, "latest"],
"id": 1
}'
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x0000000000000000000000000000000000000000000000000000001234567890"
}
import { JsonRpcProvider, Contract } from "ethers";
const provider = new JsonRpcProvider("https://eth-mainnet.blockreq.com/v1/rpc/YOUR_API_KEY");
const usdc = new Contract("0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", [
"function totalSupply() view returns (uint256)",
], provider);
const supply = await usdc.totalSupply();
console.log("USDC supply:", supply.toString());
from web3 import Web3
w3 = Web3(Web3.HTTPProvider("https://eth-mainnet.blockreq.com/v1/rpc/YOUR_API_KEY"))
result = w3.eth.call({
"to": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"data": "0x18160ddd"
})
print("Total supply:", int(result.hex(), 16))
MethodCost
eth_call20 RU