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 |
Table of Contents
简单总结
此提案定义了以太坊节点应实现的一组标准远程过程调用方法。
摘要
当前这一代以太坊客户端创建的节点公开了不一致且不兼容的远程过程调用(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 } |
由此哈希唯一标识的区块。blockNumber 和 blockHash 属性是互斥的;必须设置其中一个。 |
requireCanonical |
{boolean } |
(可选)如果区块不在规范链中,是否引发错误,如下所述。仅允许与 blockHash 标签结合使用。默认为 false 。 |
如果未找到该块,则被调用者应该引发 JSON-RPC 错误(建议的错误代码是 -32001: Resource not found
。如果标签是 blockHash
并且 requireCanonical
是 true
,则如果该块不在规范链中,则被调用者还应该引发 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
,则不允许或不考虑 fromBlock
或 toBlock
。
返回
{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
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.