JSON-RPC API 参考

同区块链进行通信的 API 都执行 JSON-RPCarrow-up-right 规范。本文中列出的方法是所有 API 都支持的通用方法 ,你可以参阅 API 各自的文档来了解它们的其他用法。

英文原文参考

本文基于以太坊官方文档,原英文文档请参考 OpenEthereum JSONRPCarrow-up-right

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 price

    • value: Quantity -(可选)整数,交易发送的数额

    • data: Data -(可选) 4 字节- 根据编码后的参数得到的方法签名的哈希。详情请见 Ethereum Contract ABIarrow-up-right

    • 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

立刻执行一个新的消息调用,无需在区块链上创建交易。

参数

  1. Object - Object - 详见交易对象from 是可选的,不包含nonce字段。

  2. QuantityTag - 整数(块编号),或字符串 'latest', 'earliest''pending'。详细请参考 Default Block 参数

返回值

  • Data - 所执行合约的返回值。

调用示例

请求正文:

响应正文:

eth_chainId

返回用于在最新的、累计工作量最多的块进行交易签名的 EIP155 链 ID,ID 不存在则返回空值。

参数

返回值

  • Quantity - EIP155 链 ID, ID 不存在则返回 null

调用示例

请求正文:

响应正文:

eth_coinbase

返回客户端 coinbase 地址(矿工奖励接收地址)。

参数

返回

  • Address - 当前 coinbase 地址。

调用示例

请求正文:

响应正文:

eth_estimateGas

通过发起一个调用或交易估算该交易所需要的gas用量。该次交易不会写入区块链。

参数

  1. Object - 详见交易对象from 是可选的,不包含nonce字段。

  2. QuantityTag - 整数(块编号),或字符串 'latest', 'earliest''pending'。详细请参考 Default Block 参数

返回值

  • Quantity - gas用量估算值。

调用示例

请求正文:

响应正文:

eth_gasPrice

返回当前的gas价格,单位:wei。

参数

返回值

  • Quantity - 整数,以wei为单位的当前gas价格。

调用示例

请求正文:

响应正文:

eth_getBalance

返回指定地址账户的余额。

参数

  1. Address - 20字节 - 要检查余额的地址。

  2. QuantityTag - 整数(块编号),或字符串 'latest', 'earliest''pending'。详细请参考 Default Block 参数

返回值

  • Quantity - 整数,以wei为单位的余额。

调用示例

请求正文:

响应正文:

eth_getBlockByHash

返回具有指定哈希的块。

参数

  1. Hash - 块哈希。

  2. Boolean - 为true 时返回完整的交易对象,为false 时仅返回交易哈希。

返回值

Object - 匹配的块对象,如果未找到块则返回null ,结构如下:

  • number: Quantity - 块编号,挂起块为null

  • hash: Hash - 32 字节 - 块哈希,挂起块为null

  • parentHash: Hash - 32 字节 - 父块的哈希

  • nonce: Data - 8 字节 - 生成的 PoW 哈希,挂起块为null 。如共识为 PoA 则不返回此参数。

  • sha3Uncles: Data - 32 字节 - 块中 uncle 数据的SHA3哈希

  • logsBloom: Data - 256 字节 - 块日志的bloom过滤器,挂起块为null

  • transactionsRoot: 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

根据编号返回相应块的信息。

参数

  1. QuantityTag - 整数(块编号),或字符串 'latest', 'earliest''pending'。详细请参考 Default Block 参数

  2. Boolean - 为true 时返回完整的交易对象,为false 时仅返回交易哈希。

返回值

Object - 匹配的块对象,如果未找到块则返回null ,结构如下:

  • number: Quantity - 块编号,挂起块为null

  • hash: Hash - 32 字节 - 块哈希,挂起块为null

  • parentHash: Hash - 32 字节 - 父块的哈希

  • nonce: Data - 8 字节 - 生成的 PoW 哈希,挂起块为null 。如共识为 PoA 则不返回此参数。

  • sha3Uncles: Data - 32 字节 - 块中 uncle 数据的SHA3哈希

  • logsBloom: Data - 256 字节 - 块日志的bloom过滤器,挂起块为null

  • transactionsRoot: 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

根据块哈希值返回指定块内的交易数量。

参数

  1. Hash - 32 字节 - 块哈希。

返回值

  • Quantity - 整数,指定块内的交易数量

调用示例

请求正文:

响应正文:

eth_getBlockTransactionCountByNumber

根据块编号返回指定块内的交易数量。

参数

  1. QuantityTag - 整数(块编号),或字符串 'latest', 'earliest''pending'。详细请参考 Default Block 参数

返回值

  • Quantity - 整数,指定块内的交易数量。

调用示例

请求正文:

响应正文:

eth_getCode

返回指定地址的代码。

参数

  1. Address - 20 字节 - 地址

  2. QuantityTag - 整数(块编号),或字符串 'latest', 'earliest''pending'。详细请参考 Default Block 参数

返回值

  • Data - 指定地址的代码

调用示例

请求正文:

响应正文:

eth_getFilterChanges

轮询指定的过滤器,并返回自上次轮询之后新生成的日志数组。

参数

  1. Quantity - 过滤器编号

返回值

  • Array - 日志对象数组,如果没有新生成的日志,则返回空数组

调用示例

请求正文:

响应正文:

eth_getFilterLogs

返回指定编号过滤器中的全部日志。

参数

  1. Quantity - 过滤器编号

返回值

  • Array - 日志对象数组,如果没有日志,则返回空数组

调用示例

请求正文:

eth_getLogs

返回指定过滤器对象中的所有日志数组。

参数

  1. Object - 过滤器对象,参考eth_newFilter调用的参数

返回值

  • Array - 日志对象数组,如果没有新生成的日志,则返回空数组

调用示例

请求正文:

eth_getStorageAt

返回指定地址存储位置的值。

参数

  1. Address - 20 字节 - 存储地址

  2. Quantity - 整数,存储中的位置

  3. QuantityTag - 整数(块编号),或字符串 'latest', 'earliest''pending'。详细请参考 Default Block 参数

返回值

  • Data - 指定存储位置的值

调用示例

请求正文:

响应正文:

eth_getTransactionByBlockHashAndIndex

根据块哈希和交易索引序号返回交易信息。

参数

  1. Hash - 块哈希

  2. Quantity - 整数,交易在块内的索引序号

返回值

调用示例

请求正文:

响应正文:

eth_getTransactionByBlockNumberAndIndex

根据块编号和交易索引序号返回交易信息。

参数

  1. QuantityTag - 整数(块编号),或字符串 'latest', 'earliest''pending'。详细请参考 Default Block 参数

  2. Quantity - 块内交易索引序号

返回值

Object - 匹配的块对象,如果未找到块则返回null ,结构如下:

  • number: Quantity - 块编号,挂起块为null

  • hash: Hash - 32 字节 - 块哈希,挂起块为null

  • parentHash: Hash - 32 字节 - 父块的哈希

  • nonce: Data - 8 字节 - 生成的 PoW 哈希,挂起块为null 。如共识为 PoA 则不返回此参数。

  • sha3Uncles: Data - 32 字节 - 块中 uncle 数据的SHA3哈希

  • logsBloom: Data - 256 字节 - 块日志的bloom过滤器,挂起块为null

  • transactionsRoot: 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

根据块编号和交易哈希返回交易信息。

参数

  1. Hash - 32 字节 - 交易哈希

返回值

调用示例

请求正文:

响应正文:

eth_getTransactionCount

返回指定地址的发出资产交易数量。

参数

  1. Address - 20 字节- 地址

  2. QuantityTag - 整数(块编号),或字符串 'latest', 'earliest''pending'。详细请参考 Default Block 参数

返回值

  • Quantity - 整数,从指定地址发出的交易数量

调用示例

请求正文:

响应正文:

eth_getTransactionReceipt

根据交易哈希返回指定交易的收据。

挂起交易也有收据。

参数

  1. Hash - 交易哈希

返回值

调用示例

请求正文:

响应正文:

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: QuantityTag - (可选)(默认值:latest)。整数块编号,或'latest'表示最后挖出的块,'pending''earliest'表示未挖出的交易。

  • toBlock: Quantity or Tag - (可选)(默认值:latest)。整数块编号,或'latest'表示最后挖出的块,'pending''earliest'表示未挖出的交易。

  • address: Address - (可选)20 字节 - 合约地址或用于生成日志的一组地址

  • topics: Array - (可选)32 字节 - Data主题的数组。主题是顺序相关的。可以传入null来代表任意一个主题,或通过一个子数组传入多个主题。

  • limit: Quantity - (可选)最多获检索条目数(以最新的为准)。

返回值

  • Quantity - 过滤器编号

调用示例

请求正文:

响应正文:

eth_newPendingTransactionFilter

在节点中创建一个过滤器,以便当产生挂起交易时进行通知。 要检查状态是否发生变化,请调用eth_getFilterChanges

参数

返回值

  • Quantity - 过滤器编号

调用示例

请求正文:

响应正文:

eth_sendRawTransaction

为签名交易创建一个新的消息调用交易或合约。

注意:这个方法也叫 eth_submitTransaction

参数

  1. Data - 已签名的交易数据

返回值

  • Hash - 32 字节 - 交易哈希,如果交易尚未生效则返回哈希为 0 。

当创建合约时,在交易生效后,使用eth_getTransactionReceipt获取合约地址。

调用示例

请求正文:

响应正文:

eth_sendTransaction

创建一个新的消息调用交易,如果data字段中包含代码,则创建一个合约。

参数

  1. Object - 详见交易对象,包含可选的condition字段

返回值

  • Hash - 32 字节 - 交易哈希,如果交易还未生效则返回 0 值哈希

当创建合约时,在交易生效后,使用eth_getTransactionReceipt调用获取合约地址。

调用示例

请求正文:

响应正文:

eth_sign

使用如下公式计算以太坊签名:sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))

注意:进行签名的地址必须是解锁的。

参数

  1. Address - 20 字节 - 地址

  2. Data - 需要签名的数据哈希

返回值

  • Data - 已签名的数据

调用示例

请求正文:

响应正文:

eth_signTransaction

在无需把交易发送到区块链网络的前提下对交易进行签名。后续可以使用 eth_sendRawTransaction 发送交易。

注意:签名的地址必须是解锁的

参数

  1. Object - 详见交易对象,包含可选的condition字段 ,参考eth_sendTransaction

返回值

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调用会自动超时。

参数

  1. Quantity - 过滤器编号

返回值

  • Boolean - 如果成功卸载则返回true ,否则返回false

调用示例

请求正文:

响应正文:

Last updated