想做以太坊相关的开发,不管是查余额、发交易,还是要和智能合约打交道,都绕不开以太坊接口文档。简单来说,接口文档就是一本说明书,告诉你怎么通过代码和以太坊节点对话。这篇文章就把常用的接口类型、核心方法和实际用法讲清楚,帮你快速上手。
以太坊节点对外提供的标准接口是JSON-RPC协议。你可以把它理解成一个“服务窗口”,你按照规定的格式发请求,节点就返回对应的数据。请求通常包含三个部分:方法名、参数和请求ID。比如你想查询当前区块高度,就调用eth_blockNumber这个方法,节点会返回最新的区块号。
几乎所有以太坊客户端,比如Geth和Erigon,都支持JSON-RPC接口。默认端口一般是8545,你可以通过HTTP、WebSocket或者IPC三种方式连接。HTTP适合普通的请求响应场景,WebSocket适合订阅事件,比如实时监听新区块的产生。
以太坊接口方法很多,但日常开发中真正高频使用的就十几个。下面这几个一定要熟练:
eth_getBalance:查询某个地址的以太币余额,参数是地址和区块状态。刚入门的人写第一个程序,十有八九就是调这个接口。
eth_getBlockByNumber:根据区块号查询区块详情,包括区块里包含的所有交易、时间戳、矿工地址等信息。
eth_getTransactionByHash:根据交易哈希查询交易详情。用户转账后想确认到账情况,就是靠这个接口。
eth_getTransactionReceipt:查询交易回执。交易上链后,通过回执可以知道执行结果是否成功、消耗了多少Gas、触发了哪些事件日志。
eth_call:调用智能合约的只读方法,不花Gas,也不会改变链上状态。比如查询某个代币合约里你有多少余额,就用它。
eth_sendRawTransaction:发送签名后的交易。注意交易必须先在本地用私钥签名,再把签名数据提交上去,私钥绝对不能传给节点。
eth_estimateGas:预估一笔交易需要消耗的Gas数量,方便设置合理的Gas上限,避免交易因为Gas不足而失败。
eth_getLogs:按条件过滤事件日志,常用于分析合约事件,比如统计某个NFT合约的全部铸造记录。
直接手写JSON-RPC请求当然可以,但实际项目中大家都用现成的开发库。JavaScript生态里最主流的是ethers.js和web3.js。用它们的好处是把接口封装成了函数,比如查询余额只需要一行代码,而且内置了钱包管理、交易签名、合约交互等功能。
Python开发者可以用web3.py,Java有web3j,Go有go-ethereum官方库。不管用什么语言,底层调用的都是同一套JSON-RPC接口,学会一个,其他都是换汤不换药。
如果你要和智能合约打交道,除了节点接口,还需要合约的ABI文档。ABI是合约的应用二进制接口,本质上是一段JSON描述,写明了合约里每个函数的名字、参数类型和返回值。开发库根据ABI就能把你的函数调用翻译成节点能理解的字节数据。
拿ERC20代币合约举例,ABI里会有balanceOf、transfer、approve这些方法。拿到ABI后,用ethers.js实例化合约对象,就可以像调用普通函数一样操作合约,非常直观。
自己搭节点成本不低,大多数开发者会选择Infura、Alchemy、QuickNode这类节点服务商。注册后拿到一个API地址,把开发库的连接地址换成它就行,用法完全一样。这些服务商的文档写得很详细,还提供仪表盘查看请求量。
官方资料方面,以太坊官网的开发者文档是最好的入门入口,里面有完整的JSON-RPC方法说明和教程。各开发库也都有自己的详细文档,遇到不熟悉的方法直接查即可。
第一,单位换算要小心。以太坊的最小单位是Wei,1个以太币等于10的18次方Wei,接口返回的金额几乎都是Wei,展示前要转换。第二,区块号参数支持最新、待处理和固定区块号几种写法,查询历史数据时要指定区块号才能拿到准确结果。第三,主网操作涉及真金白银,先在测试网把流程跑通再上主网。第四,注意服务商的请求频率限制,高频查询要做好缓存。
总的来说,以太坊接口文档虽然看起来条目繁多,但核心就是JSON-RPC这一套规范。把常用的十几个方法练熟,再用开发库把流程串起来,大部分DApp开发需求都能应付。建议边看文档边动手,先从查询余额和区块信息开始,再逐步过渡到发交易和调合约,上手速度会快很多。