eth_call
方法可立即执行新的消息调用,而无需在区块链上创建交易。此方法非常适合在不消耗 gas 或修改区块链状态的情况下从智能合约读取数据,使其成为 DApp 开发中最常用的方法之一。
此方法允许以只读方式与已部署的智能合约进行交互,并可选择状态覆盖。状态覆盖功能对于测试"假设"场景特别有用。
交易调用对象,包含以下字段:
发送交易的地址
交易接收地址
为交易执行提供的 gas 整数
用于每个已支付 gas 的 gasPrice 整数,以十六进制编码
与此交易一起发送的价值整数,以十六进制编码
方法签名的哈希和编码参数。更多信息,请参阅 Solidity 文档中的合约 ABI 描述
十六进制格式的区块号或以下字符串标签之一:latest, earliest, pending, safe 或 finalized(safe 和 finalized 标签仅在 Ethereum, Gnosis, Arbitrum, Arbitrum Nova 和 Avalanche C-chain 上支持)
状态覆盖集选项允许您在执行调用之前更改合约的状态
执行调用前为账户设置的虚假余额
执行调用前为账户设置的虚假 nonce
执行调用前注入账户的虚假 EVM 字节码
执行调用前覆盖账户存储中所有插槽的虚假键值映射
执行调用前覆盖账户存储中单个插槽的虚假键值映射
执行的合约方法的返回值
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x00000000000000000000000000000000000000000000015af1d78b58c4000000"
}
eth_call
最常见的用途之一是检查 ERC20 代币余额。数据字段通常包含函数签名,后跟参数:
0x70a08231
+ 填充地址0x313ce567
0x95d89b41
0x18160ddd
响应需要根据预期的返回类型进行解码。