Alert Source Discuss
🚧 Stagnant Standards Track: Interface

EIP-1474: 远程过程调用规范

Authors Paul Bouchon <mail@bitpshr.net>, Erik Marks (@rekmarks)
Created 2018-10-02
Discussion Link https://ethereum-magicians.org/t/eip-remote-procedure-call-specification/1537

简单总结

此提案定义了以太坊节点应实现的一组标准远程过程调用方法。

摘要

当前这一代以太坊客户端创建的节点公开了不一致且不兼容的远程过程调用(RPC)方法,因为不存在正式的以太坊 RPC 规范。本提案标准化了这样一个规范,以便为开发人员提供可预测的以太坊 RPC 接口,而不管底层节点实现如何。

规范

概念

RFC-2119

本文档中的关键词 “MUST”、”MUST NOT”、”REQUIRED”、”SHALL”、”SHALL NOT”、”SHOULD”、”SHOULD NOT”、”RECOMMENDED”、”MAY” 和 “OPTIONAL” 必须按照 RFC-2119 中描述的方式进行解释。

JSON-RPC

与以太坊节点的通信是使用 JSON-RPC 完成的,JSON-RPC 是一种无状态、轻量级的 远程过程调用 协议,它使用 JSON 作为其数据格式。以太坊 RPC 方法必须使用 JSON-RPC 请求对象 调用,并且必须使用 JSON-RPC 响应对象 响应。

错误代码

如果以太坊 RPC 方法遇到错误,则响应对象上包含的 error 成员必须是一个包含 code 成员和描述性 message 成员的对象。以下列表包含所有可能的错误代码和相关消息:

代码 消息 含义 类别
-32700 解析错误 无效的 JSON 标准
-32600 无效请求 JSON 不是有效的请求对象 标准
-32601 找不到方法 方法不存在 标准
-32602 无效参数 无效的方法参数 标准
-32603 内部错误 内部 JSON-RPC 错误 标准
-32000 无效输入 缺少或无效的参数 非标准
-32001 找不到资源 找不到请求的资源 非标准
-32002 资源不可用 请求的资源不可用 非标准
-32003 交易被拒绝 交易创建失败 非标准
-32004 不支持的方法 方法未实现 非标准
-32005 超出限制 请求超出定义的限制 非标准
-32006 不支持 JSON-RPC 版本 不支持 JSON-RPC 协议的版本 非标准

错误响应示例:

{
    "id": 1337
    "jsonrpc": "2.0",
    "error": {
        "code": -32003,
        "message": "Transaction rejected"
    }
}

值编码

传递给以太坊 RPC 方法和从中返回的特定类型的值需要特殊的编码:

Quantity
  • Quantity必须是十六进制编码的。
  • Quantity必须以 “0x” 为前缀。
  • Quantity必须使用每个字节可能的最少十六进制数字表示。
  • Quantity必须将零表示为 “0x0”。

Quantity 值示例:

有效 原因
0x invalid 空不是有效的数量
0x0 valid 解释为零的数量
0x00 invalid 不允许前导零
0x41 valid 解释为数量 65
0x400 valid 解释为数量 1024
0x0400 invalid 不允许前导零
ff invalid 值必须有前缀
Block Identifier

以下 RPC 方法采用默认区块标识符作为参数。

  • eth_getBalance
  • eth_getStorageAt
  • eth_getTransactionCount
  • eth_getCode
  • eth_call
  • eth_getProof

由于没有明确的方法来区分 Data 参数和 Quantity 参数,EIP-1898 提供了一种使用区块哈希或区块号指定区块的格式。区块标识符是一个 JSON object,包含以下字段:

属性 类型 描述
[blockNumber] {Quantity} 规范链中具有此编号的区块
OR [blockHash] {Data} 由此哈希唯一标识的区块。blockNumberblockHash 属性是互斥的;必须设置其中一个。
requireCanonical {boolean} (可选)如果区块不在规范链中,是否引发错误,如下所述。仅允许与 blockHash 标签结合使用。默认为 false

如果未找到该块,则被调用者应该引发 JSON-RPC 错误(建议的错误代码是 -32001: Resource not found。如果标签是 blockHash 并且 requireCanonicaltrue,则如果该块不在规范链中,则被调用者还应该引发 JSON-RPC 错误(建议的错误代码是 -32000: Invalid input,并且在任何情况下都应该与块未找到情况的错误代码不同,以便调用者可以区分这些情况)。未找到块的检查应该优先于块是否规范的检查,因此如果未找到该块,则被调用者引发块未找到,而不是块非规范。

Data
  • Data必须是十六进制编码的。
  • Data必须以 “0x” 为前缀。
  • Data必须使用每个字节两个十六进制数字表示。

Data 值示例:

有效 原因
0x valid 解释为空数据
0x0 invalid 每个字节必须用两个十六进制数字表示
0x00 valid 解释为单个零字节
0x41 true 解释为数据值 65
0x004200 true 解释为数据值 16896
0xf0f0f false 字节需要两个十六进制数字
004200 false 值必须有前缀
提议变更

新的以太坊 RPC 方法和对现有方法的更改必须通过传统的 EIP 流程提出。这允许围绕新的方法实现和提议的方法修改达成社区共识。RPC 方法提案必须达到 “draft” 状态才能添加到本提案和此处定义的官方以太坊 RPC 规范中。

方法

web3_clientVersion

描述

返回当前客户端的版本

参数

(无)

返回

{string} - 客户端版本

示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "web3_clientVersion",
    "params": [],
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "Mist/v0.9.3/darwin/go1.4.1"
}

web3_sha3

描述

使用 Keccak-256 算法哈希数据

参数
# 类型 描述
1 {Data} 要哈希的数据
返回

{Data} - 给定数据的 Keccak-256 哈希值

示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "web3_sha3",
    "params": ["0x68656c6c6f20776f726c64"]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0xc94770007dda54cF92009BFF0dE90c06F603a09f"
}

net_listening

描述

确定此客户端是否正在侦听新的网络连接

参数

(无)

返回

{boolean} - 如果侦听处于活动状态,则为 true;如果侦听未处于活动状态,则为 false

示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "net_listening",
    "params": []
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": true
}

net_peerCount

描述

返回当前连接到此客户端的对等节点的数量

参数

(无)

返回

{Quantity} - 连接的对等节点的数量

示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "net_peerCount",
    "params": []
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0x2"
}

net_version

描述

返回与当前网络关联的链 ID

参数

(无)

返回

{string} - 与当前网络关联的链 ID

常见的链 ID:

  • "1" - 以太坊主网
  • "3" - Ropsten 测试网
  • "4" - Rinkeby 测试网
  • "42" - Kovan 测试网

注意: 有关可能的链 ID 的 完整列表,请参阅 EIP-155。

示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "net_version",
    "params": []
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "3"
}

eth_accounts

描述

返回此客户端拥有的地址列表

参数

(无)

返回

{Data[]} - 地址数组

示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_accounts",
    "params": []
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f"]
}

eth_blockNumber

描述

返回此客户端看到的最新区块的编号

参数

(无)

返回

{Quantity} - 最新区块的编号

示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_blockNumber",
    "params": []
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0xc94"
}

eth_call

描述

立即执行新的消息调用,而无需将交易提交到网络

参数
# 类型 描述
1 {object} @property {Data} [from] - 交易发送者
@property {Data} to - 交易接收者,如果要部署合约,则为 null
@property {Quantity} [gas] - 为交易执行提供的 gas
@property {Quantity} [gasPrice] - 每个使用的 gas 的单价,单位为 wei
@property {Quantity} [value] - 随此交易发送的值,单位为 wei
@property {Data} [data] - 合约代码或带有编码参数的哈希方法调用
2 {Quantity|string|Block Identifier} 区块号,或者 "latest""earliest""pending" 之一,或者如 Block Identifier 中所述的区块标识符
返回

{Data} - 已执行合约的返回值

示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_call",
    "params": [{
        "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
        "from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
        "gas": "0x76c0",
        "gasPrice": "0x9184e72a000",
        "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
        "value": "0x9184e72a"
    }]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0x"
}

eth_coinbase

描述

返回此客户端的 coinbase 地址

参数

(无)

返回

{Data} - coinbase 地址

示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_coinbase",
    "params": []
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0xc94770007dda54cF92009BFF0dE90c06F603a09f"
}

eth_estimateGas

描述

估算完成交易所需的 gas,而无需将其提交到网络

注意: 产生的 gas 估计值可能明显高于交易实际使用的 gas 量。这是由于多种原因造成的,包括 EVM 机制和节点性能。

参数
# 类型 描述
1 {object} @property {Data} [from] - 交易发送者
@property {Data} [to] - 交易接收者
@property {Quantity} [gas] - 为交易执行提供的 gas
@property {Quantity} [gasPrice] - 每个使用的 gas 的单价,单位为 wei
@property {Quantity} [value] - 随此交易发送的值,单位为 wei
@property {Data} [data] - 合约代码或带有编码参数的哈希方法调用
2 {Quantity|string} 区块号,或者 "latest""earliest""pending" 之一
返回

{Quantity} - 交易所需的 gas 量

示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_estimateGas",
    "params": [{
        "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
        "from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
        "gas": "0x76c0",
        "gasPrice": "0x9184e72a000",
        "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
        "value": "0x9184e72a"
    }]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0x5208"
}

eth_gasPrice

描述

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

参数

(无)

返回

{Quantity} - 当前 gas 价格,单位为 wei

示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_gasPrice",
    "params": []
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0x09184e72a000"
}

eth_getBalance

描述

返回地址的余额,单位为 wei

参数
# 类型 描述
1 {Data} 要查询余额的地址
2 {Quantity|string|Block Identifier} 区块号,或者 "latest""earliest""pending" 之一,或者如 Block Identifier 中所述的区块标识符
返回

{Quantity} - 提供的帐户的余额,单位为 wei

示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_getBalance",
    "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "latest"]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0x0234c8a3397aab58"
}

eth_getBlockByHash

描述

返回有关由哈希指定的区块的信息

参数
# 类型 描述
1 {Data} 区块的哈希值
2 {boolean} 如果为 true,则将提取完整的交易对象;如果为 false,则将提取交易哈希
返回

{null|object} - 如果未找到任何区块,则为 null;否则为包含以下成员的区块对象:

  • {Data} extraData - 此区块的“额外数据”字段
  • {Data} hash - 区块哈希,如果为 pending,则为 null
  • {Data} logsBloom - 日志 Bloom 过滤器,如果为 pending,则为 null
  • {Data} miner - 接收此区块的挖矿奖励的地址
  • {Data} nonce - 工作量证明哈希,如果为 pending,则为 null
  • {Data} parentHash - 父区块哈希
  • {Data} receiptsRoot - 此区块的收据树的根
  • {Data} sha3Uncles - 此区块中叔伯数据的 SHA3
  • {Data} stateRoot - 此区块的最终状态树的根
  • {Data} transactionsRoot - 此区块的交易树的根
  • {Quantity} difficulty - 此区块的难度
  • {Quantity} gasLimit - 此区块中允许的最大 gas
  • {Quantity} gasUsed - 此区块中所有交易使用的 gas 总量
  • {Quantity} number - 区块号,如果为 pending,则为 null
  • {Quantity} size - 此区块的大小,单位为字节
  • {Quantity} timestamp - 此区块被整理时的 Unix 时间戳
  • {Quantity} totalDifficulty - 直到此区块的链的总难度
  • {Array<Transaction>} transactions - 交易对象或哈希的列表
  • {Array<Transaction>} uncles - 叔伯哈希的列表
示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_getBlockByHash",
    "params":["0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", true]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": {
        "difficulty": "0x027f07",
        "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "gasLimit": "0x9f759",
        "gasUsed": "0x9f759",
        "hash": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",
        "logsBloom": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",
        "miner": "0x4e65fda2159562a496f9f3522f89122a3088497a",
        "nonce": "0xe04d296d2460cfb8472af2c5fd05b5a214109c25688d3704aed5484f9a7792f2",
        "number": "0x1b4",
        "parentHash": "0x9646252be9520f6e71339a8df9c55e4d7619deeb018d2a3f2d21fc165dde5eb5",
        "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
        "size":  "0x027f07",
        "stateRoot": "0xd5855eb08b3387c0af375e9cdb6acfc05eb8f519e419b874b6ff2ffda7ed1dff",
        "timestamp": "0x54e34e8e"
        "totalDifficulty":  "0x027f07",
        "transactions": []
        "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
        "uncles": ["0x1606e5...", "0xd5145a9..."]
    }
}

eth_getBlockByNumber

描述

返回有关由数字指定的区块的信息

参数
# 类型 描述
1 {Quantity|string} 区块号,或者 "latest""earliest""pending" 之一
2 {boolean} 如果为 true,则将提取完整的交易对象;如果为 false,则将提取交易哈希
返回

{null|object} - 如果未找到任何区块,则为 null;否则为包含以下成员的区块对象:

  • {Data} extraData - 此区块的“额外数据”字段
  • {Data} hash - 区块哈希,如果为 pending,则为 null
  • {Data} logsBloom - 日志 Bloom 过滤器,如果为 pending,则为 null
  • {Data} miner - 接收此区块的挖矿奖励的地址
  • {Data} nonce - 工作量证明哈希,如果为 pending,则为 null
  • {Data} parentHash - 父区块哈希
  • {Data} receiptsRoot - 此区块的收据树的根
  • {Data} sha3Uncles - 此区块中叔伯数据的 SHA3
  • {Data} stateRoot - 此区块的最终状态树的根
  • {Data} transactionsRoot - 此区块的交易树的根
  • {Quantity} difficulty - 此区块的难度
  • {Quantity} gasLimit - 此区块中允许的最大 gas
  • {Quantity} gasUsed - 此区块中所有交易使用的 gas 总量
  • {Quantity} number - 区块号,如果为 pending,则为 null
  • {Quantity} size - 此区块的大小,单位为字节
  • {Quantity} timestamp - 此区块被整理时的 Unix 时间戳
  • {Quantity} totalDifficulty - 直到此区块的链的总难度
  • {Array<Transaction>} transactions - 交易对象或哈希的列表
  • {Array<Transaction>} uncles - 叔伯哈希的列表
示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_getBlockByNumber",
    "params":["0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", true]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": {
        "difficulty": "0x027f07",
        "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "gasLimit": "0x9f759",
        "gasUsed": "0x9f759",
        "hash": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",
        "logsBloom": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",
        "miner": "0x4e65fda2159562a496f9f3522f89122a3088497a",
        "nonce": "0xe04d296d2460cfb8472af2c5fd05b5a214109c25688d3704aed5484f9a7792f2",
        "number": "0x1b4",
        "parentHash": "0x9646252be9520f6e71339a8df9c55e4d7619deeb018d2a3f2d21fc165dde5eb5",
        "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
        "size":  "0x027f07",
        "stateRoot": "0xd5855eb08b3387c0af375e9cdb6acfc05eb8f519e419b874b6ff2ffda7ed1dff",
        "timestamp": "0x54e34e8e"
        "totalDifficulty":  "0x027f07",
        "transactions": []
        "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
        "uncles": ["0x1606e5...", "0xd5145a9..."]
    }
}

eth_getBlockTransactionCountByHash

描述

返回由区块哈希指定的区块中的交易数量

参数
# 类型 描述
1 {Data} 区块的哈希值
返回

{Quantity} - 指定区块中的交易数量

示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_getBlockTransactionCountByHash",
    "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f"]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0xc"
}

eth_getBlockTransactionCountByNumber

描述

返回由区块号指定的区块中的交易数量

参数
# 类型 描述
1 {Quantity|string} 区块号,或者 "latest""earliest""pending" 之一
返回

{Quantity} - 指定区块中的交易数量

示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_getBlockTransactionCountByNumber",
    "params": ["0xe8"]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0xa"- {[`Data`](#data)} address - 此日志的来源地址
- {[`Data`](#data)} blockHash - 包含此日志的区块哈希值,如果待定则为 `null`
- {[`Data`](#data)} data - 包含日志的非索引参数
- {[`Data`](#data)} transactionHash - 创建此日志的交易的哈希值,如果待定则为 `null`
- {[`Quantity`](#quantity)} blockNumber - 包含此日志的区块编号,如果待定则为 `null`
- {[`Quantity`](#quantity)} logIndex - 此日志在其区块中的索引,如果待定则为 `null`
- {[`Quantity`](#quantity)} transactionIndex - 创建此日志的交易的索引,如果待定则为 `null`
- {`Array<Data>`} topics - 依赖顺序的主题列表
- {`boolean`} removed - 如果此过滤器已被销毁且无效,则为 `true`

**注意:**`eth_newBlockFilter``eth_newPendingTransactionFilter` 过滤器检索日志时,`eth_getFilterLogs` 的返回值将是哈希数组,而不是 Log 对象数组。

##### 示例

```sh
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_getFilterLogs",
    "params": ["0x16"]
}' <url>

# Response
{
   "id": 1337,
   "jsonrpc": "2.0",
    "result": [{
        "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d",
        "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d",
        "blockNumber":"0x1b4",
        "data":"0x0000000000000000000000000000000000000000000000000000000000000000",
        "logIndex": "0x1",
        "topics": [],
        "transactionHash":  "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf",
        "transactionIndex": "0x0"
   }]
}

eth_getLogs

描述

根据过滤器对象返回所有日志的列表

参数
# Type Description
1 {object} @property {Quantity|string} [fromBlock] - 区块号,或 "latest""earliest""pending" 之一
@property {Quantity|string} [toBlock] - 区块号,或 "latest""earliest""pending" 之一
@property {Data|Data[]} [address] - 合约地址或应从中生成日志的地址列表
@property {Data[]} [topics] - 依赖顺序的主题列表
@property {Data} [blockhash] - 通过哈希将日志限制为某个区块

注意: 如果传递了 blockhash,则不允许或不考虑 fromBlocktoBlock

返回

{Array<Log>} - 包含以下成员的日志对象数组:

  • {Data} address - 此日志的来源地址
  • {Data} blockHash - 包含此日志的区块哈希值,如果待定则为 null
  • {Data} data - 包含日志的非索引参数
  • {Data} transactionHash - 创建此日志的交易的哈希值,如果待定则为 null
  • {Quantity} blockNumber - 包含此日志的区块编号,如果待定则为 null
  • {Quantity} logIndex - 此日志在其区块中的索引,如果待定则为 null
  • {Quantity} transactionIndex - 创建此日志的交易的索引,如果待定则为 null
  • {Data} topics - 依赖顺序的主题列表
  • {boolean} removed - 如果此过滤器已被销毁且无效,则为 true
示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_getLogs",
    "params": [{
        "topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]
    }]
}' <url>

# Response
{
   "id": 1337,
   "jsonrpc": "2.0",
    "result": [{
        "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d",
        "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d",
        "blockNumber":"0x1b4",
        "data":"0x0000000000000000000000000000000000000000000000000000000000000000",
        "logIndex": "0x1",
        "topics": [],
        "transactionHash":  "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf",
        "transactionIndex": "0x0"
   }]
}

eth_getStorageAt

描述

返回地址中存储位置的值

参数
# Type Description
1 {Data} 存储数据的地址
2 {Quantity} 存储数据的索引
3 {Quantity|string|Block Identifier} 区块号,或 "latest""earliest""pending" 之一,或 区块标识符 中描述的区块标识符
返回

{Data} - 存储在给定地址和数据索引处的值

示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_getStorageAt",
    "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0x00000000000000000000000000000000000000000000000000000000000004d2"
}

eth_getTransactionByBlockHashAndIndex

描述

返回由区块哈希值和交易索引指定的有关交易的信息

参数
# Type Description
1 {Data} 区块的哈希值
2 {Quantity} 指定区块中交易的索引
返回

{null|object} - 如果未找到任何交易,则为 null,否则为包含以下成员的交易对象:

  • {Data} r - ECDSA 签名 r
  • {Data} s - ECDSA 签名 s
  • {Data} blockHash - 包含此交易的区块哈希值,如果待定则为 null
  • {Data} from - 交易发送者
  • {Data} hash - 此交易的哈希值
  • {Data} input - 合约代码或哈希方法调用
  • {Data} to - 交易接收者,如果部署合约则为 null
  • {Quantity} v - ECDSA 恢复 ID
  • {Quantity} blockNumber - 包含此交易的区块编号,如果待定则为 null
  • {Quantity} gas - 为交易执行提供的 gas
  • {Quantity} gasPrice - 每个 gas 使用的 wei 的价格
  • {Quantity} nonce - 标识此交易的唯一编号
  • {Quantity} transactionIndex - 此交易在区块中的索引,如果待定则为 null
  • {Quantity} value - 随此交易发送的 wei 的值
示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_getTransactionByBlockHashAndIndex",
    "params":["0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", "0x0"]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": {
        "blockHash": "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
        "blockNumber": "0x5daf3b",
        "from": "0xa7d9ddbe1f17865597fbd27ec712455208b6b76d",
        "gas": "0xc350",
        "gasPrice": "0x4a817c800",
        "hash": "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b",
        "input": "0x68656c6c6f21",
        "nonce": "0x15",
        "r": "0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea",
        "s": "0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c",
        "to": "0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb",
        "transactionIndex": "0x41",
        "v": "0x25",
        "value": "0xf3dbb76162000"
    }
}

eth_getTransactionByBlockNumberAndIndex

描述

返回由区块号和交易索引指定的有关交易的信息

参数
# Type Description
1 {Quantity|string} 区块号,或 "latest""earliest""pending" 之一
2 {Quantity} 指定区块中交易的索引
返回

{null|object} - 如果未找到任何交易,则为 null,否则为包含以下成员的交易对象:

  • {Data} r - ECDSA 签名 r
  • {Data} s - ECDSA 签名 s
  • {Data} blockHash - 包含此交易的区块哈希值,如果待定则为 null
  • {Data} from - 交易发送者
  • {Data} hash - 此交易的哈希值
  • {Data} input - 合约代码或哈希方法调用
  • {Data} to - 交易接收者,如果部署合约则为 null
  • {Quantity} v - ECDSA 恢复 ID
  • {Quantity} blockNumber - 包含此交易的区块编号,如果待定则为 null
  • {Quantity} gas - 为交易执行提供的 gas
  • {Quantity} gasPrice - 每个 gas 使用的 wei 的价格
  • {Quantity} nonce - 标识此交易的唯一编号
  • {Quantity} transactionIndex - 此交易在区块中的索引,如果待定则为 null
  • {Quantity} value - 随此交易发送的 wei 的值
示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_getTransactionByBlockNumberAndIndex",
    "params":["0x29c", "0x0"]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": {
        "blockHash": "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
        "blockNumber": "0x5daf3b",
        "from": "0xa7d9ddbe1f17865597fbd27ec712455208b6b76d",
        "gas": "0xc350",
        "gasPrice": "0x4a817c800",
        "hash": "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b",
        "input": "0x68656c6c6f21",
        "nonce": "0x15",
        "r": "0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea",
        "s": "0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c",
        "to": "0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb",
        "transactionIndex": "0x41",
        "v": "0x25",
        "value": "0xf3dbb76162000"
    }
}

eth_getTransactionByHash

描述

返回由哈希值指定的有关交易的信息

参数
# Type Description
1 {Data} 交易的哈希值
返回

{null|object} - 如果未找到任何交易,则为 null,否则为包含以下成员的交易对象:

  • {Data} r - ECDSA 签名 r
  • {Data} s - ECDSA 签名 s
  • {Data} blockHash - 包含此交易的区块哈希值,如果待定则为 null
  • {Data} from - 交易发送者
  • {Data} hash - 此交易的哈希值
  • {Data} input - 合约代码或哈希方法调用
  • {Data} to - 交易接收者,如果部署合约则为 null
  • {Quantity} v - ECDSA 恢复 ID
  • {Quantity} blockNumber - 包含此交易的区块编号,如果待定则为 null
  • {Quantity} gas - 为交易执行提供的 gas
  • {Quantity} gasPrice - 每个 gas 使用的 wei 的价格
  • {Quantity} nonce - 标识此交易的唯一编号
  • {Quantity} transactionIndex - 此交易在区块中的索引,如果待定则为 null
  • {Quantity} value - 随此交易发送的 wei 的值
示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_getTransactionByHash",
    "params": ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": {
        "blockHash": "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
        "blockNumber": "0x5daf3b",
        "from": "0xa7d9ddbe1f17865597fbd27ec712455208b6b76d",
        "gas": "0xc350",
        "gasPrice": "0x4a817c800",
        "hash": "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b",
        "input": "0x68656c6c6f21",
        "nonce": "0x15",
        "r": "0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea",
        "s": "0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c",
        "to": "0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb",
        "transactionIndex": "0x41",
        "v": "0x25",
        "value": "0xf3dbb76162000"
    }
}

eth_getTransactionCount

描述

返回从地址发送的交易数量

参数
# Type Description
1 {Data} 要查询发送交易的地址
2 {Quantity|string|Block Identifier} 区块号,或 "latest""earliest""pending" 之一,或 区块标识符 中描述的区块标识符
返回

{Quantity} - 从指定地址发送的交易数量

示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_getTransactionCount",
    "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "latest"]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0x1"
}

eth_getTransactionReceipt

描述

返回由哈希值指定的交易的收据

注意: 挂起交易的交易收据不可用。

参数
# Type Description
1 {Data} 交易的哈希值
返回

{null|object} - 如果未找到任何交易,则为 null,否则为包含以下成员的交易收据对象:

  • {Data} blockHash - 包含此交易的区块哈希值
  • {Data} contractAddress - 新合约的地址,如果没有创建合约则为 null
  • {Data} from - 交易发送者
  • {Data} logsBloom - 日志布隆过滤器
  • {Data} to - 交易接收者,如果部署合约则为 null
  • {Data} transactionHash - 此交易的哈希值
  • {Quantity} blockNumber - 包含此交易的区块编号
  • {Quantity} cumulativeGasUsed - 此区块中此交易和所有先前交易使用的 gas
  • {Quantity} gasUsed - 此交易使用的 gas
  • {Quantity} status - 如果此交易成功则为 1,如果失败则为 0
  • {Quantity} transactionIndex - 此交易在区块中的索引
  • {Array<Log>} logs - 此交易生成的日志对象列表
示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_getTransactionReceipt",
    "params": ["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": {
        "blockHash": '0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b',
        "blockNumber": '0xb',
        "contractAddress": '0xb60e8dd61c5d32be8058bb8eb970870f07233155',
        "cumulativeGasUsed": '0x33bc',
        "gasUsed": '0x4dc',
        "logs": [],
        "logsBloom": "0x00...0",
        "status": "0x1",
        "transactionHash": '0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238',
        "transactionIndex":  '0x1'
    }
}

eth_getUncleByBlockHashAndIndex

描述

返回由区块哈希值和叔块索引位置指定的有关叔块的信息

参数
# Type Description
1 {Data} 区块的哈希值
2 {Quantity} 叔块的索引
返回

{null|object} - 如果未找到任何区块或叔块,则为 null,否则为包含以下成员的叔块对象:

  • {Data} extraData - 此区块的“额外数据”字段
  • {Data} hash - 区块哈希值,如果待定则为 null
  • {Data} logsBloom - 日志布隆过滤器,如果待定则为 null
  • {Data} miner - 接收此区块的挖矿奖励的地址
  • {Data} nonce - 工作量证明哈希值,如果待定则为 null
  • {Data} parentHash - 父区块哈希值
  • {Data} receiptsRoot - 此区块的收据 trie 的根
  • {Data} sha3Uncles - 此区块中叔块数据的 SHA3 值
  • {Data} stateRoot - 此区块的最终状态 trie 的根
  • {Data} transactionsRoot - 此区块的交易 trie 的根
  • {Quantity} difficulty - 此区块的难度
  • {Quantity} gasLimit - 此区块中允许的最大 gas
  • {Quantity} gasUsed - 此区块中所有交易使用的总 gas
  • {Quantity} number - 区块号,如果待定则为 null
  • {Quantity} size - 此区块的大小(以字节为单位)
  • {Quantity} timestamp - 整理此区块时的 Unix 时间戳
  • {Quantity} totalDifficulty - 直到此区块的链的总难度
  • {Array<Transaction>} uncles - 叔块哈希值列表
示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_getUncleByBlockHashAndIndex",
    "params": ["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "0x0"]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": {
        "difficulty": "0x027f07",
        "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "gasLimit": "0x9f759",
        "gasUsed": "0x9f759",
        "hash": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",
        "logsBloom": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",
        "miner": "0x4e65fda2159562a496f9f3522f89122a3088497a",
        "nonce": "0xe04d296d2460cfb8472af2c5fd05b5a214109c25688d3704aed5484f9a7792f2",
        "number": "0x1b4",
        "parentHash": "0x9646252be9520f6e71339a8df9c55e4d7619deeb018d2a3f2d21fc165dde5eb5",
        "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
        "size":  "0x027f07",
        "stateRoot": "0xd5855eb08b3387c0af375e9cdb6acfc05eb8f519e419b874b6ff2ffda7ed1dff",
        "timestamp": "0x54e34e8e"
        "totalDifficulty":  "0x027f07",
        "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
        "uncles": []
    }
}

eth_getUncleByBlockNumberAndIndex

描述

返回由区块号和叔块索引位置指定的有关叔块的信息

参数
# Type Description
1 {Quantity|string} 区块号,或 "latest""earliest""pending" 之一
2 {Quantity} 叔块的索引
返回

{null|object} - 如果未找到任何区块或叔块,则为 null,否则为包含以下成员的叔块对象:

  • {Data} extraData - 此区块的“额外数据”字段
  • {Data} hash - 区块哈希值,如果待定则为 null
  • {Data} logsBloom - 日志布隆过滤器,如果待定则为 null
  • {Data} miner - 接收此区块的挖矿奖励的地址
  • {Data} nonce - 工作量证明哈希值,如果待定则为 null
  • {Data} parentHash - 父区块哈希值
  • {Data} receiptsRoot - 此区块的收据 trie 的根
  • {Data} sha3Uncles - 此区块中叔块数据的 SHA3 值
  • {Data} stateRoot - 此区块的最终状态 trie 的根
  • {Data} transactionsRoot - 此区块的交易 trie 的根
  • {Quantity} difficulty - 此区块的难度
  • {Quantity} gasLimit - 此区块中允许的最大 gas
  • {Quantity} gasUsed - 此区块中所有交易使用的总 gas
  • {Quantity} number - 区块号,如果待定则为 null
  • {Quantity} size - 此区块的大小(以字节为单位)
  • {Quantity} timestamp - 整理此区块时的 Unix 时间戳
  • {Quantity} totalDifficulty - 直到此区块的链的总难度
  • {Array<Transaction>} uncles - 叔块哈希值列表
示例
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_getUncleByBlockNumberAndIndex",
    "params": ["0x29c", "0x0"]
}' <url>

# Response
{
    "id": 1337,
```md
# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0x38a"
}

eth_mining

Description

确定此客户端是否正在挖掘新区块

Parameters

(无)

Returns

{boolean} - 如果此客户端正在挖掘则为 true,否则如果未挖掘则为 false

Example
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_mining",
    "params": []
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": true
}

eth_newBlockFilter

Description

创建一个过滤器来监听新区块,该过滤器可以与 eth_getFilterChanges 一起使用

Parameters

Returns

{Quantity} - 新创建的过滤器的 ID,可以与 eth_getFilterChanges 一起使用

Example
# Request
curl -X POST --data '{
    "id": 1337
    "jsonrpc": "2.0",
    "method": "eth_newBlockFilter",
    "params": []
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0x1"
}

eth_newFilter

Description

创建一个过滤器来监听特定的状态变化,然后可以与 eth_getFilterChanges 一起使用

Parameters
# Type Description
1 {object} @property {Quantity|string} [fromBlock] - 区块号,或 "latest""earliest""pending" 之一
@property {Quantity|string} [toBlock] - 区块号,或 "latest""earliest""pending" 之一
@property {Data|Data[]} [address] - 合约地址或应该从中产生日志的地址列表
@property {Data[]} [topics] - 依赖于顺序的主题列表

Note: 主题是依赖于顺序的。具有带有主题 [A, B] 的日志的事务将与以下主题过滤器匹配:

  • [] - “任何内容”
  • [A] - “第一个位置的 A(以及之后的任何内容)”
  • [null, B] - “第一个位置的任何内容 AND 第二个位置的 B(以及之后的任何内容)”
  • [A, B] - “第一个位置的 A AND 第二个位置的 B(以及之后的任何内容)”
  • [[A, B], [A, B]] - “第一个位置的(A OR B)AND 第二个位置的(A OR B)(以及之后的任何内容)”
Returns

{Quantity} - 新创建的过滤器的 ID,可以与 eth_getFilterChanges 一起使用

Example
# Request
curl -X POST --data '{
    "id": 1337
    "jsonrpc": "2.0",
    "method": "eth_newFilter",
    "params": [{
        "topics": ["0x0000000000000000000000000000000000000000000000000000000012341234"]
    }]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0x1"
}

eth_newPendingTransactionFilter

Description

创建一个过滤器来监听可以使用 eth_getFilterChanges 的新的待处理交易

Parameters

Returns

{Quantity} - 新创建的过滤器的 ID,可以与 eth_getFilterChanges 一起使用

Example
# Request
curl -X POST --data '{
    "id": 1337
    "jsonrpc": "2.0",
    "method": "eth_newPendingTransactionFilter",
    "params": []
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0x1"
}

eth_protocolVersion

Description

返回当前的 Ethereum 协议版本

Parameters

(无)

Returns

{string} - 当前的 Ethereum 协议版本

Example
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_protocolVersion",
    "params": []
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "54"
}

eth_sendRawTransaction

Description

将已签名的交易发送到网络

Parameters
# Type Description
1 {Data} 已签名交易数据
Returns

{Data} - 交易哈希,如果交易尚不可用,则为零哈希

Example
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_sendRawTransaction",
    "params": ["0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
}

eth_sendTransaction

Description

创建、签名并向网络发送新交易

Parameters
# Type Description
1 {object} @property {Data} from - 交易发送者
@property {Data} [to] - 交易接收者
@property {Quantity} [gas="0x15f90"] - 为交易执行提供的 gas
@property {Quantity} [gasPrice] - 每个使用的 gas 的 wei 价格
@property {Quantity} [value] - 随此交易发送的 wei 值
@property {Data} [data] - 合约代码或带有编码参数的哈希方法调用
@property {Quantity} [nonce] - 标识此交易的唯一编号
Returns

{Data} - 交易哈希,如果交易尚不可用,则为零哈希

Example
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_sendTransaction",
    "params": [{
        "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
        "from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
        "gas": "0x76c0",
        "gasPrice": "0x9184e72a000",
        "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
        "value": "0x9184e72a"
    }]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
}

eth_sign

Description

计算一种以太坊特定的签名,其形式为 keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))

Parameters
# Type Description
1 {Data} 用于签名的地址
2 {Data} 要签名的数据
Returns

{Data} - 所提供数据的签名哈希

Example
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_sign",
    "params": ["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"
}

eth_signTransaction

Description

签署一个交易,该交易可以在以后使用 eth_sendRawTransaction 提交到网络

Parameters
# Type Description
1 {object} @property {Data} from - 交易发送者
@property {Data} [to] - 交易接收者
@property {Quantity} [gas="0x15f90"] - 为交易执行提供的 gas
@property {Quantity} [gasPrice] - 每个使用的 gas 的 wei 价格
@property {Quantity} [value] - 随此交易发送的 wei 值
@property {Data} [data] - 合约代码或带有编码参数的哈希方法调用
@property {Quantity} [nonce] - 标识此交易的唯一编号
Returns

{Data} - 交易对象的签名哈希

Example
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_signTransaction",
    "params": [{
        "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
        "from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
        "gas": "0x76c0",
        "gasPrice": "0x9184e72a000",
        "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
        "value": "0x9184e72a"
    }]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"
}

eth_signTypedData

Description

计算一种以太坊特定的签名,其形式为 keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))

Parameters
# Type Description
1 {Data} 用于签名的地址
2 {Data} 包含类型信息、域分隔符和数据的要签名的消息

Note: 客户端开发人员应参考 EIP-712 以获取有关 编码和签名数据 的完整语义。 Dapp 开发人员应参考 EIP-712 以获取 RPC 方法输入参数 的预期结构。

Returns

{Data} - 所提供消息的签名哈希

Example
# Request
curl -X POST --data '{
	"id": 1337
	"jsonrpc": "2.0",
	"method": "eth_signTypedData",
	"params": ["0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826", {
		"types": {
			"EIP712Domain": [{
				"name": "name",
				"type": "string"
			}, {
				"name": "version",
				"type": "string"
			}, {
				"name": "chainId",
				"type": "uint256"
			}, {
				"name": "verifyingContract",
				"type": "address"
			}],
			"Person": [{
				"name": "name",
				"type": "string"
			}, {
				"name": "wallet",
				"type": "address"
			}],
			"Mail": [{
				"name": "from",
				"type": "Person"
			}, {
				"name": "to",
				"type": "Person"
			}, {
				"name": "contents",
				"type": "string"
			}]
		},
		"primaryType": "Mail",
		"domain": {
			"name": "Ether Mail",
			"version": "1",
			"chainId": 1,
			"verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"
		},
		"message": {
			"from": {
				"name": "Cow",
				"wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826"
			},
			"to": {
				"name": "Bob",
				"wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB"
			},
			"contents": "Hello, Bob!"
		}
	}]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": "0x4355c47d63924e8a72e509b65029052eb6c299d53a04e167c5775fd466751c9d07299936d304c153f6443dfa05f40ff007d72911b6f72307f996231605b915621c"
}

eth_submitHashrate

Description

提交挖矿哈希率

Parameters
# Type Description
1 {Data} 哈希率
2 {Data} 标识此节点的随机 ID
Returns

{boolean} - 如果提交成功则为 true,否则为 false

Example
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_submitHashrate",
    "params": [
        "0x0000000000000000000000000000000000000000000000000000000000500000",
        "0x59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c"
    ]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": true
}

eth_submitWork

Description

提交工作量证明解决方案

Parameters
# Type Description
1 {Data} 找到的 nonce
2 {Data} 标头的 pow-hash
3 {Data} 混合摘要
Returns

{boolean} - 如果提供的解决方案有效则为 true,否则为 false

Example
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_submitWork",
    "params": [
        "0x0000000000000001",
        "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
        "0xD1GE5700000000000000000000000000D1GE5700000000000000000000000000"
    ]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": true
}

eth_syncing

Description

返回有关此客户端网络同步状态的信息

Parameters

(无)

Returns

{boolean|object} - 如果此客户端未与网络同步,则为 false,否则为具有以下成员的对象:

  • {Quantity} currentBlock - 同步的最新区块的编号
  • {Quantity} highestBlock - 网络上最新区块的编号
  • {Quantity} startingBlock - 开始同步的区块编号
Example
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_syncing",
    "params": []
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": {
        "currentBlock": '0x386',
        "highestBlock": '0x454',
        "startingBlock": '0x384'
    }
}

eth_uninstallFilter

Description

销毁基于过滤器 ID 的过滤器

Note: 仅当不再需要过滤器及其通知时才应调用此方法。 如果在一段时间内未使用 eth_getFilterChanges 检索过滤器的通知,则也会自动在过滤器上调用此方法。

Parameters
# Type Description
1 {Quantity} 要销毁的过滤器的 ID
Returns

{boolean} - 如果找到该过滤器并成功销毁则为 true,如果未找到则为 false

Example
# Request
curl -X POST --data '{
    "id": 1337,
    "jsonrpc": "2.0",
    "method": "eth_uninstallFilter",
    "params": ["0xb"]
}' <url>

# Response
{
    "id": 1337,
    "jsonrpc": "2.0",
    "result": true
}

Rationale

以太坊作为企业级应用程序平台的有效性很大程度上取决于其提供可靠且可预测的开发者体验的能力。 由当前一代以太坊客户端创建的节点公开了具有不同方法签名的 RPC 端点; 这迫使应用程序绕过方法不一致来维持与各种以太坊 RPC 实现的兼容性。

以太坊客户端开发人员和下游 dapp 开发人员都缺少正式的以太坊 RPC 规范。 此提案以可通过传统 EIP 流程进行版本控制和修改的方式,标准化了此类规范。

Backwards compatibility

此提案通过要求任何公开的 RPC 接口都遵守此规范来影响以太坊客户端开发人员。 此提案通过要求当前在应用程序中使用的任何 RPC 调用都按照此规范进行来影响 dapp 开发人员。

Implementation

当前一代的以太坊客户端包括几个尝试公开此 RPC 规范的实现:

Client Name Language Homepage
Geth Go geth.ethereum.org
Parity Rust parity.io/ethereum
Aleth C++ cpp-ethereum.org

Copyright and related rights waived via CC0.

Citation

Please cite this document as:

Paul Bouchon <mail@bitpshr.net>, Erik Marks (@rekmarks), "EIP-1474: 远程过程调用规范 [DRAFT]," Ethereum Improvement Proposals, no. 1474, October 2018. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-1474.