JSON-RPC API 参考
同区块链进行通信的 API 都执行 JSON-RPC 规范。本文中列出的方法是所有 API 都支持的通用方法 ,你可以参阅 API 各自的文档来了解它们的其他用法。
英文原文参考
本文基于以太坊官方文档,原英文文档请参考 OpenEthereum JSONRPC。
Default Block 参数
以下方法需额外使用 defaultBlock 参数:
当有能改变状态的请求时,最后传入的参数决定区块高度。
defaultBlock 参数有下列几种选项:
Quantity/Integer- 整数,区块编号String "earliest"- 最早的块/创世块String "latest"- 最新块String "pending"- 正在处理的状态/交易
交易对象
不同类型的交易(transaction)有不同的对象.
Legacy 交易。EIP-2718 以前只有这种交易类型,包含以下字段:
from:Address- 20 字节 - 发起交易的地址to:Address- (创建新合约时可选) 20 字节 - 接收交易的地址gas:Quantity- (可选) 整数,供交易执行的 gas 数额。eth_call不消耗 gas, 但执行某些交易会需要这个参数gasPrice:Quantity- (可选)整数,已花费 gas 的 gas pricevalue:Quantity-(可选)整数,交易发送的数额data:Data-(可选) 4 字节- 根据编码后的参数得到的方法签名的哈希。详情请见 Ethereum Contract ABI。nonce:Quantity- (可选)整数,可使用同一个 nonce 值来覆盖你的挂起交易
AccessList 交易, EIP-2930: 除 legacy 交易的所有字段外还包含以下字段:
type:0x1- 交易类型,硬编码accessList:List- 对象列表address:Address- 20 字节 - 将被读取的地址storageKeys:List- of 32 字节 - 将被读取的存储key
一些 RPC 调用中的交易对象还包含以下字段:
condition:Object- (可选)有条件的提交交易。可以是一个代表区块编号的整数{ block: 1 }或者是以秒为单位的 UTC 时间戳{ time: 1491290692 }或者是null。
API 方法
eth_accounts
返回客户端持有的地址列表。
参数
无
返回值
Array- 20 字节- 客户端持有的地址。
调用示例
请求正文:
响应正文:
eth_blockNumber
返回最新块的编号。
参数
无
返回值
Quantity- 整数,客户端当前块编号。
调用示例
请求正文:
响应正文:
eth_call
立刻执行一个新的消息调用,无需在区块链上创建交易。
参数
Object-Object- 详见交易对象。from是可选的,不包含nonce字段。Quantity或Tag- 整数(块编号),或字符串'latest','earliest'或'pending'。详细请参考 Default Block 参数。
返回值
Data- 所执行合约的返回值。
调用示例
请求正文:
响应正文:
eth_chainId
返回用于在最新的、累计工作量最多的块进行交易签名的 EIP155 链 ID,ID 不存在则返回空值。
参数
无
返回值
Quantity- EIP155 链 ID, ID 不存在则返回null。
调用示例
请求正文:
响应正文:
eth_coinbase
返回客户端 coinbase 地址(矿工奖励接收地址)。
参数
无
返回
Address- 当前 coinbase 地址。
调用示例
请求正文:
响应正文:
eth_estimateGas
通过发起一个调用或交易估算该交易所需要的gas用量。该次交易不会写入区块链。
参数
Object- 详见交易对象。from是可选的,不包含nonce字段。Quantity或Tag- 整数(块编号),或字符串'latest','earliest'或'pending'。详细请参考 Default Block 参数。
返回值
Quantity- gas用量估算值。
调用示例
请求正文:
响应正文:
eth_gasPrice
返回当前的gas价格,单位:wei。
参数
无
返回值
Quantity- 整数,以wei为单位的当前gas价格。
调用示例
请求正文:
响应正文:
eth_getBalance
返回指定地址账户的余额。
参数
Address- 20字节 - 要检查余额的地址。Quantity或Tag- 整数(块编号),或字符串'latest','earliest'或'pending'。详细请参考 Default Block 参数。
返回值
Quantity- 整数,以wei为单位的余额。
调用示例
请求正文:
响应正文:
eth_getBlockByHash
返回具有指定哈希的块。
参数
Hash- 块哈希。Boolean- 为true时返回完整的交易对象,为false时仅返回交易哈希。
返回值
Object - 匹配的块对象,如果未找到块则返回null ,结构如下:
number:Quantity- 块编号,挂起块为nullhash:Hash- 32 字节 - 块哈希,挂起块为nullparentHash:Hash- 32 字节 - 父块的哈希nonce:Data- 8 字节 - 生成的 PoW 哈希,挂起块为null。如共识为 PoA 则不返回此参数。sha3Uncles:Data- 32 字节 - 块中 uncle 数据的SHA3哈希logsBloom:Data- 256 字节 - 块日志的bloom过滤器,挂起块为nulltransactionsRoot:Data- 32 字节 - 块中的交易 trie 树根节点stateRoot:Data- 32 字节 - 块最终状态 trie 树的根节点receiptsRoot:Data- 32 字节 - 块交易收据 trie 树的根节点author:Address- 20 字节 - 块对应的矿工地址(挖矿奖励的接收账户)miner:Address- 20 字节 -author对应的名字difficulty:Quantity- 整数,出块难度totalDifficulty:Quantity- 整数,截止到本块的链上总难度extraData:Data- 块的其他数据size:Quantity- 整数,本块字节数gasLimit:Quantity- 本块允许的最大 gas 用量gasUsed:Quantity- 本块中所有交易使用的总 gas 用量timestamp:Quantity- 块 unix 时间戳transactions:Array- 交易对象数组,或32字节长的交易哈希数组,取决于最后一个参数uncles:Array- uncle 哈希数组
调用示例
请求正文:
响应正文:
eth_getBlockByNumber
根据编号返回相应块的信息。
参数
Quantity或Tag- 整数(块编号),或字符串'latest','earliest'或'pending'。详细请参考 Default Block 参数。Boolean- 为true时返回完整的交易对象,为false时仅返回交易哈希。
返回值
Object - 匹配的块对象,如果未找到块则返回null ,结构如下:
number:Quantity- 块编号,挂起块为nullhash:Hash- 32 字节 - 块哈希,挂起块为nullparentHash:Hash- 32 字节 - 父块的哈希nonce:Data- 8 字节 - 生成的 PoW 哈希,挂起块为null。如共识为 PoA 则不返回此参数。sha3Uncles:Data- 32 字节 - 块中 uncle 数据的SHA3哈希logsBloom:Data- 256 字节 - 块日志的bloom过滤器,挂起块为nulltransactionsRoot:Data- 32 字节 - 块中的交易 trie 树根节点stateRoot:Data- 32 字节 - 块最终状态 trie 树的根节点receiptsRoot:Data- 32 字节 - 块交易收据 trie 树的根节点author:Address- 20 字节 - 块对应的矿工地址(挖矿奖励的接收账户)miner:Address- 20 字节 -author对应的名字difficulty:Quantity- 整数,出块难度totalDifficulty:Quantity- 整数,截止到本块的链上总难度extraData:Data- 块的其他数据size:Quantity- 整数,本块字节数gasLimit:Quantity- 本块允许的最大 gas 用量gasUsed:Quantity- 本块中所有交易使用的总 gas 用量timestamp:Quantity- 块 unix 时间戳transactions:Array- 交易对象数组,或32字节长的交易哈希数组,取决于最后一个参数uncles:Array- uncle 哈希数组
调用示例
请求正文:
响应正文:
eth_getBlockTransactionCountByHash
根据块哈希值返回指定块内的交易数量。
参数
Hash- 32 字节 - 块哈希。
返回值
Quantity- 整数,指定块内的交易数量
调用示例
请求正文:
响应正文:
eth_getBlockTransactionCountByNumber
根据块编号返回指定块内的交易数量。
参数
Quantity或Tag- 整数(块编号),或字符串'latest','earliest'或'pending'。详细请参考 Default Block 参数。
返回值
Quantity- 整数,指定块内的交易数量。
调用示例
请求正文:
响应正文:
eth_getCode
返回指定地址的代码。
参数
Address- 20 字节 - 地址Quantity或Tag- 整数(块编号),或字符串'latest','earliest'或'pending'。详细请参考 Default Block 参数。
返回值
Data- 指定地址的代码
调用示例
请求正文:
响应正文:
eth_getFilterChanges
轮询指定的过滤器,并返回自上次轮询之后新生成的日志数组。
参数
Quantity- 过滤器编号
返回值
Array- 日志对象数组,如果没有新生成的日志,则返回空数组
调用示例
请求正文:
响应正文:
eth_getFilterLogs
返回指定编号过滤器中的全部日志。
参数
Quantity- 过滤器编号
返回值
Array- 日志对象数组,如果没有日志,则返回空数组
调用示例
请求正文:
eth_getLogs
返回指定过滤器对象中的所有日志数组。
参数
Object- 过滤器对象,参考eth_newFilter调用的参数
返回值
Array- 日志对象数组,如果没有新生成的日志,则返回空数组
调用示例
请求正文:
eth_getStorageAt
返回指定地址存储位置的值。
参数
Address- 20 字节 - 存储地址Quantity- 整数,存储中的位置Quantity或Tag- 整数(块编号),或字符串'latest','earliest'或'pending'。详细请参考 Default Block 参数。
返回值
Data- 指定存储位置的值
调用示例
请求正文:
响应正文:
eth_getTransactionByBlockHashAndIndex
根据块哈希和交易索引序号返回交易信息。
参数
Hash- 块哈希Quantity- 整数,交易在块内的索引序号
返回值
Object- Transaction Response Object, ornullwhen no transaction
调用示例
请求正文:
响应正文:
eth_getTransactionByBlockNumberAndIndex
根据块编号和交易索引序号返回交易信息。
参数
Quantity或Tag- 整数(块编号),或字符串'latest','earliest'或'pending'。详细请参考 Default Block 参数。Quantity- 块内交易索引序号
返回值
Object - 匹配的块对象,如果未找到块则返回null ,结构如下:
number:Quantity- 块编号,挂起块为nullhash:Hash- 32 字节 - 块哈希,挂起块为nullparentHash:Hash- 32 字节 - 父块的哈希nonce:Data- 8 字节 - 生成的 PoW 哈希,挂起块为null。如共识为 PoA 则不返回此参数。sha3Uncles:Data- 32 字节 - 块中 uncle 数据的SHA3哈希logsBloom:Data- 256 字节 - 块日志的bloom过滤器,挂起块为nulltransactionsRoot:Data- 32 字节 - 块中的交易 trie 树根节点stateRoot:Data- 32 字节 - 块最终状态 trie 树的根节点receiptsRoot:Data- 32 字节 - 块交易收据 trie 树的根节点author:Address- 20 字节 - 块对应的矿工地址(挖矿奖励的接收账户)miner:Address- 20 字节 -author对应的名字difficulty:Quantity- 整数,出块难度totalDifficulty:Quantity- 整数,截止到本块的链上总难度extraData:Data- 块的其他数据size:Quantity- 整数,本块字节数gasLimit:Quantity- 本块允许的最大 gas 用量gasUsed:Quantity- 本块中所有交易使用的总 gas 用量timestamp:Quantity- 块 unix 时间戳transactions:Array- 交易对象数组,或32字节长的交易哈希数组,取决于最后一个参数uncles:Array- uncle 哈希数组
调用示例
请求正文:
响应正文:
eth_getTransactionByHash
根据块编号和交易哈希返回交易信息。
参数
Hash- 32 字节 - 交易哈希
返回值
Object- Transaction Response Object, ornullwhen no transaction was found.
调用示例
请求正文:
响应正文:
eth_getTransactionCount
返回指定地址的发出资产交易数量。
参数
Address- 20 字节- 地址Quantity或Tag- 整数(块编号),或字符串'latest','earliest'或'pending'。详细请参考 Default Block 参数。
返回值
Quantity- 整数,从指定地址发出的交易数量
调用示例
请求正文:
响应正文:
eth_getTransactionReceipt
根据交易哈希返回指定交易的收据。
挂起交易也有收据。
参数
Hash- 交易哈希
返回值
Object- Receipt object
调用示例
请求正文:
响应正文:
eth_newBlockFilter
在节点中创建一个过滤器,以便当新块生成时进行通知。要检查状态是否变化, 请调用eth_getFilterChanges。
参数
无
返回值
Quantity- 过滤器编号
调用示例
请求正文:
响应正文:
eth_newFilter
基于给定的选项创建一个过滤器对象,接收状态变化时的通知(log)。要检查状态是否变化, 请调用eth_getFilterChanges。
关于特定主题过滤器的说明:主题是顺序相关的。如果一个交易的日志有主题
[A, B],那么将被 以下的主题过滤器匹配:
[]- 任何主题[A]- 先匹配A主题[null, B]- 先匹配其他主题,再匹配B主题[A, B]- 先匹配A主题,再匹配B主题,最后匹配其他主题[[A, B], [A, B]]- 先匹配A主题或B主题,再匹配A主题或B主题,最后匹配其他主题
参数
Object - 过滤器选项:
fromBlock:Quantity或Tag- (可选)(默认值:latest)。整数块编号,或'latest'表示最后挖出的块,'pending'或'earliest'表示未挖出的交易。toBlock:QuantityorTag- (可选)(默认值:latest)。整数块编号,或'latest'表示最后挖出的块,'pending'或'earliest'表示未挖出的交易。address:Address- (可选)20 字节 - 合约地址或用于生成日志的一组地址topics:Array- (可选)32 字节 -Data主题的数组。主题是顺序相关的。可以传入null来代表任意一个主题,或通过一个子数组传入多个主题。limit:Quantity- (可选)最多获检索条目数(以最新的为准)。
返回值
Quantity- 过滤器编号
调用示例
请求正文:
响应正文:
eth_newPendingTransactionFilter
在节点中创建一个过滤器,以便当产生挂起交易时进行通知。 要检查状态是否发生变化,请调用eth_getFilterChanges。
参数
无
返回值
Quantity- 过滤器编号
调用示例
请求正文:
响应正文:
eth_sendRawTransaction
为签名交易创建一个新的消息调用交易或合约。
注意:这个方法也叫
eth_submitTransaction
参数
Data- 已签名的交易数据
返回值
Hash- 32 字节 - 交易哈希,如果交易尚未生效则返回哈希为 0 。
当创建合约时,在交易生效后,使用eth_getTransactionReceipt获取合约地址。
调用示例
请求正文:
响应正文:
eth_sendTransaction
创建一个新的消息调用交易,如果data字段中包含代码,则创建一个合约。
参数
Object- 详见交易对象,包含可选的condition字段
返回值
Hash- 32 字节 - 交易哈希,如果交易还未生效则返回 0 值哈希
当创建合约时,在交易生效后,使用eth_getTransactionReceipt调用获取合约地址。
调用示例
请求正文:
响应正文:
eth_sign
使用如下公式计算以太坊签名:sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))。
注意:进行签名的地址必须是解锁的。
参数
Address- 20 字节 - 地址Data- 需要签名的数据哈希
返回值
Data- 已签名的数据
调用示例
请求正文:
响应正文:
eth_signTransaction
在无需把交易发送到区块链网络的前提下对交易进行签名。后续可以使用 eth_sendRawTransaction 发送交易。
注意:签名的地址必须是解锁的
参数
Object- 详见交易对象,包含可选的condition字段 ,参考eth_sendTransaction。
返回值
Object - 已签名数据:
raw:Data- 签名并使用 RLP 编码的交易tx:Object- Transaction Response Object
调用示例
请求正文:
响应正文:
eth_syncing
返回一个描述同步状态的对象或false。
参数
无
返回值
Object - 同步状态对象,没有同步则为false。同步对象的结构如下:
startingBlock:Quantity- 导入开始的块(当同步达到此区块头时重置)currentBlock:Quantity- 当前块,和 eth_blockNumber 一样highestBlock:Quantity- 预估最高块blockGap:Array- "first", "last"的数组,[first, last) 都不在链上warpChunksAmount:Quantity- 以 chunk 为单位的快照总数warpChunksProcessed:Quantity- 已处理的快照 chunk 总数
调用示例
请求正文:
响应正文:
eth_uninstallFilter
卸载指定编号的过滤器。当不在需要监听时,总是需要执行该调用。另外,过滤器如果在一定时间内未接收到eth_getFilterChanges调用会自动超时。
参数
Quantity- 过滤器编号
返回值
Boolean- 如果成功卸载则返回true,否则返回false
调用示例
请求正文:
响应正文:
Last updated