JSON格式用于进行轻量级数据的交互,它可描述数字,字符串,有序的数以及键值对集合。

JSON-RPC是一种无状态,轻量级的远程过程调用协议(RPC)。该规范主要定义与处理过程相关的数据结构和规则,它是与传输方式无关的,可在Socket,HTTP或在各种消息传送环境内使用。它只是将JSON(RFC 4627)作为数据格式。

Geth 1.4有实验性的pub/sub支持,参看此页获取更多信息。

Parity 1.6有实验性的pub/sub支持,参考此页获取更多信息。

JavaScript API

为了在JS应用程序内的以太坊节点能使用web3.js库,这里给出了RPC接口函数,参考JS API查看更多信息。

JSON-RPC 端点

默认JSON-RPC端点:

Client URL
C++ http://localhost:8545
Go http://localhost:8545
Py http://localhost:4000
Parity http://localhost:8545

Go

可用--rpc标志来开始一个HTTP JSON-RPC

geth --rpc

改变默认端口8545和列表地址localhost如下:

geth --rpc --rpcaddr <ip> --rpcport <portnumber>

若是从浏览器访问RPC,需要通过合适的域名集来使能CORS,否则,JS调用会被同源策略限制且请求会失败:

geth --rpc --rpccorsdomain "http://localhost:3000"

JSON RPC还可使用命令admin.startRPC(addr, port)从geth console启动。

C++

可带-j项来运行eth应用程序:

./eth -j

可自定义JSON-RPC端口(默认为8545):

./eth -j --json-rpc-port 8079

Python

在Python内JSON RPC服务器默认是开启的,并且监听端口127.0.0.1:4000

可给它一个配置选项来自定义端口和监听地址:

pyethapp -c jsonrpc.listen_port=4002 -c jsonrpc.listen_host=127.0.0.2 run

JSON-RPC 支持项

  cpp-ethereum go-ethereum py-ethereum parity
JSON-RPC 1.0      
JSON-RPC 2.0
Batch requests
HTTP
IPC  
WS    

十六进制编码

当前通过JSON传输两个关键数据类型:未格式化字节数组和数量。它们都是以十六进制编码形式传输,然而有不同的格式化要求:

当编码数量QUANTITIES(整数和数量)时:以十六进制格式编码,前缀0x,这是最紧凑的一种表示方法(有个例外,就是零表示为0x0)。例子:

0x41(65的十进制)

0x400(1024的十进制)

WRONG:0x(应该至少有一个数字-零是0x0)

WRONG:0x0400(第一个位置不应为0)

WRONG:ff(必须以0x为前缀)

当编码未格式化数据时(字节数组,账户地址,哈希,字节码数组):

以十六进制编码,前缀为0x,每个字节有两个十六进制数字。例子:

0x41(大小为1,A)

0x004200(大小为3,"\0B\0")

0x(大小为0, "")

WRONG:0xf0f0f(必须时偶数的数字)

WRONG:004200(必须带前缀0x)

当前cpp-ethereum, go-ethereum和parity在http和IPC(Linux的unix socket以及Windows OSX的命名管道)上提供JSON-RPC交互。go-ethereum的1.4版本和Parity的1.6版本以上都支持websocket。

默认区块参数:

下面的方法都有一个额外的默认区块参数:

eth_getBalance

返回指定地址的账户余额

参数

1.DATA - 长度20个字节,表示要检查余额的地址

2.QUANTITY|TAG - 整数型区块数量,或字符串"latest", "earliest"或"pending",参考默认区块参数

params: ['0x407d73d8a49eeb85d32cf465507dd71d507100c1','latest'
]

返回值

QUANTITY - 当前余额的整数型,以wei为单位,后面带18个0的wei,表示1ETH。

实例:

//Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}'
// Result
{"id":1,"jsonrpc": "2.0","result": "0x0234c8a3397aab58" // 158972490234375000
}

其中jsonrpc字段表示JSON-RPC版本号,method字段表示需要调用的API方法名字,params字段表示要传送的参数,id字段用来标识消息。

eth_getCode

返回给定地址的代码

参数:

1.DATA - 长度20个字节,表示地址

2.QUANTITY|TAG - 整数型的区块数量,或字符串"latest", "earliest"或"pending",参考默认区块参数

params: ['0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b','0x2'  // 2
]

返回值:

DATA - 从指定地址获取的代码

实例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x2"],"id":1}'// Result
{"id":1,"jsonrpc": "2.0","result": "0x600160008035811a818181146012578301005b601b6001356025565b8060005260206000f25b600060078202905091905056"
}

eth_getTransactionCount

返回从一个地址发出的交易数量

参数:

1.DATA - 长度20字节,表示地址

2.QUANTITY|TAG - 整数型区块数量,或者字符串"latest","earliest"或"pending",参考默认参数

params: ['0x407d73d8a49eeb85d32cf465507dd71d507100c1','latest' // state at the latest block
]

返回值:

QUANTITY - 获取从这个地址发出的交易数量,它是一个整数形式

实例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}'// Result
{"id":1,"jsonrpc": "2.0","result": "0x1" // 1
}

eth_getStorageAt

返回一个给定地址上的一个存储位置的值

参数:

1.DATA - 长度为20个字节,表示存储的地址

2.QUANTITY - 存储的位置,它是一个整数形式

3.QUANTITY|TAG - 区块数,整数形式,或字符串"latest","earliest"或"pending",参考默认区块参数

返回值:

DATA - 获取该存储位置的值

实例:

根据要获取的存储计算正确的位置,假设下面的合约通过地址0x391694e7e0b0cce554cb130d723a9d27458f9298部署在0x295a70b2de5e3953354a6a8344e616ed314d7251

contract Storage {uint pos0;mapping(address => uint) pos1;function Storage() {pos0 = 1234;pos1[msg.sender] = 5678;}

获取pos0的值很简单:

curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:8545{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"}

而获取该map中的一个元素会更难,map内一个元素的位置使用如下方式计算得到:

keccack(LeftPad32(key, 0), LeftPad32(map position, 0))

这表示要获取位置pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"]上的存储,必须用下面的方式计算位置:

keccak(decodeHex("000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001"))

一个带web3库的geth控制台可以如下方式做这个计算:

> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001"
undefined
> web3.sha3(key, {"encoding": "hex"})
"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9"

现在就可去获取该存储位置了:

curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:8545{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"}

eth_call

没有在区块链上创建交易的情况下立即执行一个新的消息调用

参数:

1.Object - 交易调用对象

from - DATA, 长20字节 ,可选的,要发出交易的地址

to - DATA,长20字节,该交易指向的地址

gas - QUANTITY,可选的,交易执行所需的gas数,整型的。eth_call消耗0 gas,但是一些执行操作可能需要该参数。

gasPrice - QUANTITY,可选的,每个需支付gas的gasPrice数量,整形格式。

value - QUANTITY,可选的,与该交易以通发出的数值,整数型。

data - DATA,可选的,所要调用方法的签名和被编码参数的哈希值组合。详细参考Ethereum Contract ABI

2.QUANTITY|TAG - 区块数量,整数型,或字符串"latest","earliest"或"pending",参考默认区块参数。

返回值:

DATA - 执行合约的返回值

实例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}'// Result
{"id":1,"jsonrpc": "2.0","result": "0x"
}

当请求以太坊的状态信息时,最后的默认区块参数决定了区块的高度。

以下都是默认区块参数的潜在项:

HEX String - 一个整数型区块数量

String "earliest" - 最早/创世区块

String "latest" - 最近被挖矿的区块

String "pending" - 挂起状态/交易

Curl实例解析

当节点申诉内容类型时, curl选项可能返回一个应答。这是因为--data选项设置内容类型为application/x-www-form-urlencoded。若节点真的申诉,需手动在调用起始处将头部设置为-H "Content-Type:application/json"

该实例也没有包含必须给到curl类似127.0.0.1:8545的URL/IP & port组合。

JSON RPC方法

web3_clientVersion:

返回当前客户端版本号

参数:

none

返回值:

String - 当前客户端版本号

实例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}'// Result
{"id":67,"jsonrpc":"2.0","result": "Mist/v0.9.3/darwin/go1.4.1"
}

web3_sha3

返回给定数据的Keccak-256(非标准SHA3-256)

参数:

1.DATA - 要转换为SHA3哈希的数据

params: ["0x68656c6c6f20776f726c64"
]

返回值:

DATA - 给定字符串的SHA3结果

实例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}'// Result
{"id":64,"jsonrpc": "2.0","result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"
}

net_version:

返回当前网络id,每个链都拥有独一无二的ID标识。

参数:

none

返回值:

String - 当前网络id。

"1" - 标识以太坊主网

"2" - Morden测试网(已被废弃)

"3" - Ropsten测试网

"4" - Rinkby测试网

"42" - Kovan测试网

实例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}'// Result
{"id":67,"jsonrpc": "2.0","result": "3"
}

网络监听:

若客户端正在监听网络连接则返回true。

参数:

none

返回值:

Boolean - 当监听时为true,否则为false

实例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}'// Result
{"id":67,"jsonrpc":"2.0","result":true
}

net_peerCount

返回当前连接到客户端的节点数

参数

none

返回值

QUANTITY - 连接着的节点数量,整数型

实例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'// Result
{"id":74,"jsonrpc": "2.0","result": "0x2" // 2
}

eth_protocolVersion

返回当前以太坊协议版本

参数

none

返回值

String - 当前以太坊协议版本号

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}'// Result
{"id":67,"jsonrpc": "2.0","result": "54"
}

eth_syncing

返回一个对象,该对象携带同步状态的数据,反之返回false。

参数

none

返回值

Object|Boolean,一个携带同步状态数据的对象或false,当没有同步时:

startingBlock:QUANTITY - 区块在哪点开始导入(在同步到达它的头部之后,会复位)

currentBlock:QUANTITY - 当前区块,与eth_blockNumber相同

highestBlock:QUANTITY - 预估最高区块

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'// Result
{"id":1,"jsonrpc": "2.0","result": {startingBlock: '0x384',currentBlock: '0x386',highestBlock: '0x454'}
}
// Or when not syncing
{"id":1,"jsonrpc": "2.0","result": false
}

eth_coinbase

返回客户端coinbase地址

参数

none

返回值

DATA - 长20字节,当前coinbase地址

实例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}'// Result
{"id":64,"jsonrpc": "2.0","result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1"
}

eth_mining

若客户端正在挖一个新区块,则返回true

参数

none

返回值

Boolean - 若客户端正在挖矿,则返回true,反之返回false

实例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}'// Result
{"id":71,"jsonrpc": "2.0","result": true
}

eth_hashrate

返回节点正在挖矿的每秒哈希数量

参数

none

返回值

QUANTITY - 每秒的哈希数量

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}'// Result
{"id":71,"jsonrpc": "2.0","result": "0x38a"
}

eth_gasPrice

返回当前每gas的价格,以wei为单位,18个0的wei表示1个eth

参数

none

返回值

QUANTITY - 当前每gas的价格,整数型,以wei为单位

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}'// Result
{"id":73,"jsonrpc": "2.0","result": "0x09184e72a000" // 10000000000000
}

eth_accounts

返回客户端存储的地址列表

参数

none

返回值

Array of DATA - 长度为20字节,客户端所存储的地址

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}'// Result
{"id":1,"jsonrpc": "2.0","result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]
}

eth_blockNumber

返回最近区块的数量

参数

none

返回值

QUANTITY - 在客户端上的当前区块数量,整数型

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}'// Result
{"id":83,"jsonrpc": "2.0","result": "0x4b7" // 1207
}

eth_getTransactionCount

返回从一个地址发出的交易数量

参数

1.DATA - 长20字节,表示地址

2.QUANTITY|TAG - 区块数量,整数型,或字符串"latest","earliest"或"pending",参考默认区块参数

params: ['0x407d73d8a49eeb85d32cf465507dd71d507100c1','latest' // state at the latest block
]

返回值

QUANTITY - 从地址发出的交易数量,整型

实例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}'// Result
{"id":1,"jsonrpc": "2.0","result": "0x1" // 1
}

eth_getBlockTransactionCountByHash

返回一个与给定区块哈希相匹配的区块内的交易数量

参数

DATA - 长32字节,表示区块的哈希值

params: ['0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238'
]

返回值

QUANTITY - 该区块内的交易数量,整数型

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}'// Result
{"id":1,"jsonrpc": "2.0","result": "0xb" // 11
}

eth_getBlockTransactionCountByNumber

返回与给定区块号相匹配的区块内的交易数量

参数

1.QUANTITY|TAG - 区块数量,整数型。或者字符串"earliest","latest"或"pending",正如在默认区块参数所示

params: ['0xe8', // 232
]

返回值

QUANTITY - 该区块内的交易数量,整数型

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0xe8"],"id":1}'// Result
{"id":1,"jsonrpc": "2.0","result": "0xa" // 10
}

eth_getUncleCountByBlockHash

返回与给定区块哈希相匹配的区块内的叔父节点数

参数

1.DATA - 长32字节,表示区块哈希

params: ['0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238'
]

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}'// Result
{"id":1,"jsonrpc": "2.0","result": "0x1" // 1
}

eth_getUncleCountByBlockNumber

返回一个给定区块号匹配的区块的叔父数量

参数

1.QUANTITY|TAG - 区块号,整数型,或者整数型"latest","earliest"或"pending",参考默认区块参数

params: ['0xe8', // 232
]

返回值

QUANTITY - 该区块内的叔父数量,整数型

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}'// Result
{"id":1,"jsonrpc": "2.0","result": "0x1" // 1
}

eth_sign

签名函数计算一个以太坊指定的签名:

sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))

通过给一个添加了前缀的消息做签名计算,可用于识别一个以太坊的签名。这可防止恶意DApp对任意数据(比如,交易数据)进行签名以冒充受害者。

注意:要签名的地址必须先解锁。

参数

账户,信息

1.DATA - 长20字节,表示地址

2.DATA - 长N字节,表示要签名的信息

返回

DATA:签名

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}'// Result
{"id":1,"jsonrpc": "2.0","result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"
}

一个使用solidity ecrecover来验证使用eth_sign签名的方法实例可参考,该合约部署在测试网Ropsten和Rinkeby上。

eth_sendTransaction

创建新消息调用交易,或者若数据域包含代码,则创建的是一个合约

参数

1.Object - 交易对象

from: DATA - 长20字节,表示发出交易的地址

to:DATA- 长20字节,若正在创建的是一个新合约,则为可选项,交易所指向的地址

gas: QUANTITY - (可选,默认:90000)交易执行所需要的gas,整数型,其中会返回未被使用的gas

gasPrice:QUANTITY - (可选,默认:To-Be-Determined)每个被支付的gas所用的gasPrice,整型。

value:QUANTITY - (可选)该交易所携带的数值,整型

data:DATA - 一个合约的被编译的代码或者被调用函数的签名以及被编码的参数的哈希值。详细参考Ethereum Contract ABI

nonce:QUANTITY - (可选)nonce值,整型。它允许覆写使用同一nonce值的挂起交易。

params: [{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","gas": "0x76c0", // 30400"gasPrice": "0x9184e72a000", // 10000000000000"value": "0x9184e72a", // 2441406250"data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"
}]

返回值

DATA - 长32字节,表示交易哈希值,或若交易还没有使用则为zero哈希。

在合约被挖矿后,当创建一个合约时,使用函数eth_getTransactionReceipt来获取合约地址。

实例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}'// Result
{"id":1,"jsonrpc": "2.0","result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
}

eth_sendRawTransaction

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

参数

1.DATA - 被签名的交易数据

params: ["0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"]

返回值

DATA - 长32个字节,交易哈希,或若交易还没被使用,则为zero哈希

在合约被挖矿后,当创建一个合约时,使用函数eth_getTransactionReceipt来获取合约地址。

实例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}'// Result
{"id":1,"jsonrpc": "2.0","result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
}

eth_sendTransaction与eth_sendRawTransaction区别

首先一个交易在黄皮书的4.3章节有介绍,它由字段比如gasPrice,value等构成。它们被算法Recursive Length Prefix编码进一个字节序内,并最终被存储到区块链中。而这个字节序就是所谓的raw交易。一般来说一个raw交易表示的就是一个机器码格式的交易,签名是已经被添加进去了的。

所有的交易都必须被签名,否则被认为是无效交易且不会被打包进区块链中。

一个raw交易是以raw字节形式的交易,若有一个有效交易的raw字节,则可使用sendRawTransaction,否则它也可作为sendTransaction()的一部分,web3.js会自动创建签过名的交易字节。web3.js将类似JSON交易{from: ...,to:...,value:...}转换成raw字节并自动对它进行签名。

若使用类似infura.io平台,这些不会处理私钥而只会处理签过名的交易平台时,会需要使用raw字节。

eth_estimateGas

生成并返回一个预估值,该预估值是描述一个交易完成所需要的gas量。该交易不会被添加到区块链。注意预估值可能会明显多于实际交易中所使用到的gas数量,这是由各种各样原因导致的,包括EVM机制和节点行为。

参数

参考eth_call参数,不同之处就是所有属性在这都是可选的。若没有指定gas上限,则geth会使用挂起区块的gas上限。因此当执行所需gas数量高于挂起区块gas上限时,可能会导致预估值不足于支付执行call/transaction时所需的gas。

返回值

QUANTITY - gas使用数量

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}'// Result
{"id":1,"jsonrpc": "2.0","result": "0x5208" // 21000
}

eth_getBlockByHash

通过哈希值返回关于区块的信息

参数

1.DATA - 长32字节,表示区块的哈希值

2.Boolean - 若要返回完整交易对象时则设为true,若只要此哈希的交易,则设为false

params: ['0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331',true
]

返回值

Object - 一个区块对象,或当找不到区块时为null

number: QUANTITY - 表示区块号,当为挂起区块时为null

hash:DATA - 长32字节,表示区块哈希,当为挂起区块时为null

parentHash:DATA - 长32字节,表示父区块哈希值

nonce:DATA-长8个字节,表示生成的工作量证明哈希,当为挂起区块是为null

sha3Uncles:DATA - 长32个字节,表示区块内的叔父数据的SHA3

logsBloom:DATA - 长256个字节,表示区块的日志布隆过滤器,当为挂起区块时为null

transactionsRoot:DATA - 长32个字节,表示区块的交易树的根

stateRoot:DATA - 长32个字节,区块的最终状态树的根

receiptsRoot:DATA - 长32个字节,区块的收据树的根

miner:DATA-长20个字节,挖矿奖励受益人的地址

difficulty:QUANTITY - 区块难度值,整型

totalDifficulty:QUANTITY - 到当前区块位置的链的总难度值,整型

extraData:DATA - 表示本区块额外数据域

size:QUANTITY - 本区块的大小,以字节为单位,整型

gasLimit:QUANTITY - 在本区块内的允许的最大gas

gasUsed:QUANTITY - 本区块内所有交易消耗的gas

timestamp:QUANTITY - 整理区块时的unix的时间戳

transactions:Array - 交易对象的数组,或根据最后给定参数的长32字节的交易哈希值

uncles:Array - 叔父哈希数组

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", true],"id":1}'// Result
{
"id":1,
"jsonrpc":"2.0",
"result": {"number": "0x1b4", // 436"hash": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331","parentHash": "0x9646252be9520f6e71339a8df9c55e4d7619deeb018d2a3f2d21fc165dde5eb5","nonce": "0xe04d296d2460cfb8472af2c5fd05b5a214109c25688d3704aed5484f9a7792f2","sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","logsBloom": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331","transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","stateRoot": "0xd5855eb08b3387c0af375e9cdb6acfc05eb8f519e419b874b6ff2ffda7ed1dff","miner": "0x4e65fda2159562a496f9f3522f89122a3088497a","difficulty": "0x027f07", // 163591"totalDifficulty":  "0x027f07", // 163591"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000","size":  "0x027f07", // 163591"gasLimit": "0x9f759", // 653145"gasUsed": "0x9f759", // 653145"timestamp": "0x54e34e8e" // 1424182926"transactions": [{...},{ ... }] "uncles": ["0x1606e5...", "0xd5145a9..."]}

eth_getBlockByNumber

通过区块号得到区块的信息

参数

1.QUANTITY|TAG - 一个区块号,整型,或字符串"earliest","latest"或"pending",正如在默认区块参数内所描述的一样。

2.Boolean - 若要返回整个交易对象,则设为true,若只返回该交易的哈希,则设为false。

params: ['0x1b4', // 436true
]

返回值

参考eth_getBlockByHash

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}'

结果参考 eth_getBlockByHash

eth_getTransactionByHash

返回交易hash所请求的交易信息

参数

1.DATA - 长32个字节,一个交易哈希

params: ["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"
]

返回值

object - 一个交易对象,或当找不到交易时为null

hash:DATA - 长32字节,表示交易的哈希

nonce:QUANTITY - 表示前一个发送者的交易数量

blockHash:DATA - 长32个字节,表示该交易所在区块哈希,当交易挂起时为null

blockNumber:QUANTITY - 交易所在区块的区块号,当交易挂起时为null

transactionIndex:QUANTITY - 区块内的交易索引号,整型,交易挂起时为null

from:DATA-长20字节,表示发送者地址

to:DATA-20字节,表示接收者地址,当它是一个合约创建交易时为null

value:QUANTITY - 发送者提供的gas价格,以wei为单位

gasPrice:QUANTITY - 发送者提供的的gas价格,以wei为单位

gas:QUANTITY - 发送者提供的gas

input:DATA - 与交易一起发送的数据

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}'// Result
{
"id":1,
"jsonrpc":"2.0",
"result": {"hash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b","nonce":"0x","blockHash": "0xbeab0aa2411b7ab17f30a99d3cb9c6ef2fc5426d6ad6fd9e2a26a6aed1d1055b","blockNumber": "0x15df", // 5599"transactionIndex":  "0x1", // 1"from":"0x407d73d8a49eeb85d32cf465507dd71d507100c1","to":"0x85h43d8a49eeb85d32cf465507dd71d507100c1","value":"0x7f110", // 520464"gas": "0x7f110", // 520464"gasPrice":"0x09184e72a000","input":"0x603880600c6000396000f300603880600c6000396000f3603880600c6000396000f360",}
}

eth_getTransactionByBlockHashAndIndex

通过区块哈希和交易索引位置返回一个交易信息

参数

1.DATA - 长32字节,表示区块哈希

2.QUANTITY - 交易索引位置,整型

params: ['0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331','0x0' // 0
]

返回值

参考eth_getTransactionByHash

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "0x0"],"id":1}'

结果参考eth_getTransactionByHash

eth_getTransactionByBlockNumberAndIndex

通过区块号和交易索引位置返回交易信息

参数

1.QUANTITY|TAG - 一个区块号,或者字符串"earliest","latest"或"pending",正如在默认区块参数中所示一样。

2.QUANTITY - 交易索引位置

params: ['0x29c', // 668'0x0' // 0
]

返回值

参考eth_getTransactionByHash

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}'

结果参考eth_getTransactionByHash

eth_getTransactionReceipt

返回通过交易哈希得到的交易收据

注意:该收据在挂起交易中不可用

参数

1.DATA - 长32个字节,表示交易哈希

params: ['0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238'
]

返回值

Object - 一个交易收据对象,或者当找不到收据时为null

transactionHash:DATA-长32个字节,表示交易哈希

transactionIndex:QUANTITY - 区块内的交易索引位置,整数型

blockHash:DATA - 长32字节,表示交易所在的区块哈希值

blockNumber:QUANTITY - 交易所在的区块号

from:DATA-长20个字节,发送者地址

to:DATA - 长20个字节,接收者地址,当它是一个合约创建交易时为null

cumulativeGasUsed:QUANTITY - 当在区块内执行该交易时所消耗的总gas数

gasUsed:QUANTITY - 由该交易独立所消耗的gas量

contractAddress:DATA - 长20个字节,当一个合约被创建时,该合约地址被创建;否则为null

logs:Array - log对象数字,它是由该交易生成的

logsBloom:DATA - 长256字节,表示轻客户端的布隆过滤器用于快速获取相关log

它还返回如下:

root:DATA - 表示post-transaction状态根的32个字节长(每Byzantium)

status:QUANTITY - 为1(成功)或0(失败)

实例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}'// Result
{
"id":1,
"jsonrpc":"2.0",
"result": {transactionHash: '0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238',transactionIndex:  '0x1', // 1blockNumber: '0xb', // 11blockHash: '0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b',cumulativeGasUsed: '0x33bc', // 13244gasUsed: '0x4dc', // 1244contractAddress: '0xb60e8dd61c5d32be8058bb8eb970870f07233155', // or null, if none was createdlogs: [{// logs as returned by getFilterLogs, etc.}, ...],logsBloom: "0x00...0", // 256 byte bloom filterstatus: '0x1'}
}

eth_getUncleByBlockHashAndIndex

通过哈希和叔父索引位置返回一个区块的叔父信息

参数

1.DATA - 32位字节长,表示区块哈希

2.QUANTITY - 叔父的索引位置

params: ['0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b','0x0' // 0
]

返回值

参考eth_getBlockByHash

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "0x0"],"id":1}'

结果参考 eth_getBlockByHash

注意:一个叔父区块不包含个人交易。

叔父区块

在比特币中,叔父区块由于不在最长的链上,因此被认为是一个孤儿,它是一个与父区块具有相同高度的可选区块。

在以太坊中,当矿工挖一个区块时,会激励矿工去打包一系列叔父区块,这起到两个作用:

1). 仍然奖励产生旧的或孤儿区块(这些区块非大池的一部分)的矿工,以便减轻中心化激励。这是由于网络传播延迟导致的。

2).通过增加主链上的工作量来增加链的安全性。因此几乎没有,甚至非常少的工作量会耗费在旧区块上。

但是叔父区块引入额外的经济复杂性,比如挖到空叔父的奖励。详细参考文档

eth_getUncleByBlockNumberAndIndex

通过区块号和叔父索引位置返回一个叔父区块的信息。

参数

1.QUANTITY|TAG - 一个区块号,或字符串"earliest","latest"或"pending",正如在默认区块参数中所示一样。

2.QUANTITY - 叔父的索引位置

params: ['0x29c', // 668'0x0' // 0
]

返回值

参考eth_getBlockByHash

注意:一个叔父区块不包含个人交易

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}'

结果参考e th_getBlockByHash

eth_getCompilers

客户端内返回一个可用编译器列表

参数

none

返回值

Array - 可用编译器列表

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCompilers","params":[],"id":1}'// Result
{"id":1,"jsonrpc": "2.0","result": ["solidity", "lll", "serpent"]
}

eth_compileSolidity

返回已编译的solidity代码

参数

String - 源代码

params: ["contract test { function multiply(uint a) returns(uint d) {   return a * 7;   } }",
]

返回值

DATA - 已编译的源代码

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_compileSolidity","params":["contract test { function multiply(uint a) returns(uint d) {   return a * 7;   } }"],"id":1}'// Result
{"id":1,"jsonrpc": "2.0","result": {"code": "0x605880600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b603d6004803590602001506047565b8060005260206000f35b60006007820290506053565b91905056","info": {"source": "contract test {\n   function multiply(uint a) constant returns(uint d) {\n       return a * 7;\n   }\n}\n","language": "Solidity","languageVersion": "0","compilerVersion": "0.9.19","abiDefinition": [{"constant": true,"inputs": [{"name": "a","type": "uint256"}],"name": "multiply","outputs": [{"name": "d","type": "uint256"}],"type": "function"}],"userDoc": {"methods": {}},"developerDoc": {"methods": {}}}}

eth_compileLLL

返回已编译的LLL代码

参数

1.String - 源代码

params: ["(returnlll (suicide (caller)))",
]

返回值

DATA - 已编译好的源代码

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_compileLLL","params":["(returnlll (suicide (caller)))"],"id":1}'// Result
{"id":1,"jsonrpc": "2.0","result": "0x603880600c6000396000f3006001600060e060020a600035048063c6888fa114601857005b6021600435602b565b8060005260206000f35b600081600702905091905056" // the compiled source code
}

eth_compileSerpent

返回已编译的serpent代码

参数

1.String - 源码

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_compileSerpent","params":["/* some serpent */"],"id":1}'// Result
{"id":1,"jsonrpc": "2.0","result": "0x603880600c6000396000f3006001600060e060020a600035048063c6888fa114601857005b6021600435602b565b8060005260206000f35b600081600702905091905056" // the compiled source code
}

eth_newFilter

基于过滤器选项,创建一个过滤器对象,以便通知状态何时改变(logs),要检测状态是否已经改变,可调用函数eth_getFilterChanges。

指定条目过滤器的注意事项:

条目是依赖于顺序的,一个带参数[A,B]的条目log可匹配如下条目过滤器:

[] - 任何条目

[A] - A为首位置条目,其后可为任何词

[null, B] - 首位置可为任何词 且 在第二个位置必须为B,其后可以为任何词

[A, B] - 首位置必须为A 且 第二个位置必须为B,其后可为任何词

[[A, B],[A, B]] - 在首位置为A或B,第二个位置为A或B,之后可为任何词

参数

1.Object - 过滤器选项

fromBlock:QUANTITY|TAG - 可选的,默认为latest,区块号,整型,若为latest,则表示最近被挖到的区块,或若为pending,earliest表示还没有被挖到的交易

toBlock:QUANTITY|TAG - 可选的,默认latest,区块号,整型,若为latest,则表示最近被挖到的区块,或若为pending,earliest表示还没有被挖到的交易

address:DATA|Array,长20个字节 - 可选的,合约地址或地址列表,log应该从此位置开始发出。

topics:DATA的数组, 可选的,长32个字节的DATA条目数组,条目是依赖顺序的,每个条目也可能是一个DATA数组或选项。

params: [{"fromBlock": "0x1","toBlock": "0x2","address": "0x8888f1f195afa192cfee860698584c030f4c9db1","topics": ["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", null, ["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc"]]
}]

返回值

QUANTITY - 一个过滤器id

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}'// Result
{"id":1,"jsonrpc": "2.0","result": "0x1" // 1
}

eth_newBlockFilter

在节点内创建一个过滤器,以便通知一个新节点的到来,可调用eth_getFilterChanges以便检测状态改变。

参数

none

返回值

QUANTITY - 一个过滤器id

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}'// Result
{"id":1,"jsonrpc":  "2.0","result": "0x1" // 1
}

eth_newPendingTransactionFilter

在节点内创建一个过滤器,以便当新挂起交易到达时发出通知。可调用eth_getFilterChanges以便检测状态改变。

参数

none

返回值

QUANTITY - 一个过滤器id

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}'// Result
{"id":1,"jsonrpc":  "2.0","result": "0x1" // 1
}

eth_uninstallFilter

卸载一个给定id的过滤器,当不再需要监视时应该调用它。另外,在一段时间后当它们没有被函数eth_getFilterChanges请求

时,过滤器会超时。

参数

1.QUANTITY - 过滤器id

params: ["0xb" // 11
]

返回值

Boolean - 若过滤器被成功卸载,则返回true,反之返回false

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}'// Result
{"id":1,"jsonrpc": "2.0","result": true
}

eth_getFilterChanges

过滤器的一个轮询方法,它时最近轮询返回的log数组。

参数

1.QUANTITY - 过滤器id

params: ["0x16" // 22
]

返回值

Array - long对象的数组,或当最后一次轮询发现状态没有改变时它为一个空数组。

1.对使用eth_newBlockFilter函数创建的过滤器,返回值为区块哈希值(DATA,长32字节),比如:

["0x3454645634534..."]

2.对使用eth_newPendingTransactionFilter创建的过滤器,返回值为交易哈希(DATA,长32字节),比如:

["0x6345343454645..."]

3.对使用eth_newFilter创建的过滤器,其log对象携带如下参数:

removed:TAG - 当log被删除时,由于链重组,它为true,若它时一个有效log,则为false

logIndex:QUANTITY - 区块内的log索引位置,整数型,当它是挂起log时为null

transactionIndex:QUANTITY - 交易索引位置,log从该位置创建的,整型,当为挂起log时为null

transactionHash:DATA - 长32字节,交易哈希,log从该hash创建,当为挂起log时为null

blockHash:DATA - 长32字节,log所在区块的哈希,当为挂起时为null

blockNumber:QUANTITY - log所在区块号,当挂起时为null

address:DATA - 长20字节,该log原生地址

data:DATA - 包含一到多个32字节长的log非索引参数

topics:DATA的数组 - 被索引的log参数的0到4个32字节长的DATA。在solidity内:首个条目为事件签名的哈希(比如,Deposit(address, bytes32, uint256)),当声明带参数anonymous 指示器的事件除外。

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}'// Result
{"id":1,"jsonrpc":"2.0","result": [{"logIndex": "0x1", // 1"blockNumber":"0x1b4", // 436"blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d","transactionHash":  "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf","transactionIndex": "0x0", // 0"address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d","data":"0x0000000000000000000000000000000000000000000000000000000000000000","topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"]},{...}]
}

eth_getFilterLogs

返回给定过滤器id匹配的log数组

参数

1.QUANTITY - 过滤器id

params: ["0x16" // 22
]

返回值

参考eth_getFilterChanges

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}'

结果参考eth_getFilterChanges

eth_getLogs

返回一个与给定过滤器对象匹配的log数组

参数

1.Object - 过滤器项:

fromBlock:QUANTITY|TAG - 可选的,默认为latest,区块号,整型,若为latest,则表示最近被挖到的区块,或若为pending,earliest表示还没有被挖到的交易

toBlock:QUANTITY|TAG - 可选的,默认latest,区块号,整型,若为latest,则表示最近被挖到的区块,或若为pending,earliest表示还没有被挖到的交易

address:DATA|Array,长20个字节 - 可选的,合约地址或地址列表,log应该从此位置开始发出。

topics:DATA的数组, 可选的,长32个字节的DATA条目数组,条目是依赖顺序的,每个条目也可能是一个DATA数组或选项。

blockhash:DATA,长32个字节,可选的future,在EIP-234情形下,blockHash是一个新过滤项,用于限制返回到带32字节长哈希的blockHash的log。使用blockHash相当于fromBlock = toBlock = 带blockHash的区块号,若blockHash在过滤标准中出现,则fromBlock与toBlock都不会允许出现。

params: [{"topics": ["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]
}]

返回值

参考eth_getFilterChanges

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}'

结果参考eth_getFilterChanges

eth_getWork

返回当前区块的哈希,种子哈希seedHash以及边界条件要满足"target"

参数

none

返回值

Array - 数组包含以下属性:

1.DATA, 长32个字节,表示当前区块头部pow-hash

2.DATA,长32个字节,表示在DAG中使用的种子哈希

3.DATA,长32个字节,表示边界条件"target",2^256/difficulty

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getWork","params":[],"id":73}'// Result
{"id":1,"jsonrpc":"2.0","result": ["0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef","0x5EED00000000000000000000000000005EED0000000000000000000000000000","0xd1ff1c01710000000000000000000000d1ff1c01710000000000000000000000"]
}

eth_submitWork

用于提交一个工作量方案

参数

1.DATA, 8字节长,表示发现的nonce值(64位)

2.DATA,32字节长,表示头部的pow-hash(256位)

3.DATA,32字节长,表示混合消化(256位)

params: ["0x0000000000000001","0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef","0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000"
]

返回值

Boolean - 若提供的方案有效,则返回true,反之返回false

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0", "method":"eth_submitWork", "params":["0x0000000000000001", "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "0xD1GE5700000000000000000000000000D1GE5700000000000000000000000000"],"id":73}'// Result
{"id":73,"jsonrpc":"2.0","result": true
}

eth_submitHashrate

用于提交挖矿哈希率

参数

1.Hashrate,一个表示哈希率的十六进制字符串,32个字节长

2.ID,字符串,一个随机十六进制ID标识客户端 32字节长。

params: ["0x0000000000000000000000000000000000000000000000000000000000500000","0x59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c"
]

返回值

Boolean - 若提交成功,返回true,反之返回false

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0", "method":"eth_submitHashrate", "params":["0x0000000000000000000000000000000000000000000000000000000000500000", "0x59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c"],"id":73}'// Result
{"id":73,"jsonrpc":"2.0","result": true
}

db_putString

将一个字符串存储在本地数据库

注意,该函数被废弃且会在未来被删除

参数

1.String - 数据库名

2.String - 键名

3.String - 要存储的字符串

params: ["testDB","myKey","myString"
]

返回值

Boolean - 若值被存储,则返回true,反之为false

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"db_putString","params":["testDB","myKey","myString"],"id":73}'// Result
{"id":1,"jsonrpc":"2.0","result": true
}

db_getString

从本地数据库返回字符串

注意,该函数在将来被废弃删除

参数

1.String - 数据库名

2.String - 键名

params: ["testDB","myKey",
]

返回值

String - 前面所存储的字符串

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"db_getString","params":["testDB","myKey"],"id":73}'// Result
{"id":1,"jsonrpc":"2.0","result": "myString"
}

db_putHex

存储二进制数据到本地数据库

注意,将来会废弃删除该函数

参数

1.String - 数据库名

2.String - 键名

3.DATA - 要存储的数据

params: ["testDB","myKey","0x68656c6c6f20776f726c64"
]

返回值

Boolean - 若数据被存储,则返回true,反之,返回false

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"db_putHex","params":["testDB","myKey","0x68656c6c6f20776f726c64"],"id":73}'// Result
{"id":1,"jsonrpc":"2.0","result": true
}

db_getHex

从数据库读出返二进制数据

注意,该函数在将来会被废弃删除

参数

1.String - 数据库名

2.String - 键名

params: ["testDB","myKey",
]

返回值

DATA - 之前存储的数据

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"db_getHex","params":["testDB","myKey"],"id":73}'// Result
{"id":1,"jsonrpc":"2.0","result": "0x68656c6c6f20776f726c64"
}

shh_version

返回当前whisper协议版本

参数

none

返回值

String - 当前whisper协议版本

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"shh_version","params":[],"id":67}'// Result
{"id":67,"jsonrpc": "2.0","result": "2"
}

shh_post

发送一个whisper消息

参数

1.Object - whisper提交对象

from:DATA,60字节长,可选的,发送者标识符

to:DATA,60字节长,可选的,接收者标识符。若whisper对消息加密,则只有接收者能对它解密

topics:DATA数组,DATA条目数组,以便接收者辨别消息

payload:DATA - 消息负载

priority:QUANTITY - 优先级范围从...(?)开始,整型

ttl:QUANTITY - 存活时长,以秒为单位,整型

params: [{from: "0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1",to: "0x3e245533f97284d442460f2998cd41858798ddf04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a0d4d661997d3940272b717b1",topics: ["0x776869737065722d636861742d636c69656e74", "0x4d5a695276454c39425154466b61693532"],payload: "0x7b2274797065223a226d6",priority: "0x64",ttl: "0x64",
}]

返回值

Boolean - 若消息被发送出去,则返回true,反之返回false

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"shh_post","params":[{"from":"0xc931d93e97ab07fe42d923478ba2465f2..","topics": ["0x68656c6c6f20776f726c64"],"payload":"0x68656c6c6f20776f726c64","ttl":0x64,"priority":0x64}],"id":73}'// Result
{"id":1,"jsonrpc":"2.0","result": true
}

shh_newIdentity

在客户端创建新whisper

参数

none

返回值

DATA,60字节长,新标识符地址

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"shh_newIdentity","params":[],"id":73}'// Result
{"id":1,"jsonrpc": "2.0","result": "0xc931d93e97ab07fe42d923478ba2465f283f440fd6cabea4dd7a2c807108f651b7135d1d6ca9007d5b68aa497e4619ac10aa3b27726e1863c1fd9b570d99bbaf"
}

shh_hasIdentity

检测客户端是否为给定标识保存私钥

参数

1.DATA,60字节长,要检测的标识地址

params: ["0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1"
]

返回值

Boolean - 若客户端为标识保存私钥,则返回true,反之false

实例

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"shh_hasIdentity","params":["0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1"],"id":73}'// Result
{"id":1,"jsonrpc": "2.0","result": true
}

参考网址

JSON RPC API相关推荐

  1. 以太坊—JSON RPC API

    2019独角兽企业重金招聘Python工程师标准>>> Geth 使用JSON数据格式, JSON-RPC协议作为客户端和网络进行交互的方法. Geth 1.4 的 pub/sub ...

  2. EOS Chain/Wallet RPC API的PHP开发包

    2019独角兽企业重金招聘Python工程师标准>>> 介绍一个EOS Chain/Wallet RPC API的PHP开发包. 开始 你可以查看EOS的RPC API参考,但要注意 ...

  3. 人人都是 API 设计者:我对 RESTful API、GraphQL、RPC API 的思考

    有一段时间没怎么写文章了,今天提笔写一篇自己对 API 设计的思考.首先,为什么写这个话题呢?其一,我阅读了<阿里研究员谷朴:API 设计最佳实践的思考>一文后受益良多,前两天并转载了这篇 ...

  4. C语言编写的简单HTTP json RPC

    目录 0 概述 0.0 参考 0.1 HTTP 服务 0.2 JSON RPC HTTP错误码 0.3 目录结构 1 使用 1.1 接口访问示例 1.2 方法注册 1.3 修改监听端口 4 源码获取 ...

  5. ios5中apple增加了解析JSON的api——NSJSONSerialization。

    ios5中apple增加了解析JSON的api--NSJSONSerialization.网上已经有人做过测试,NSJSONSerialization在效率上完胜SBJSON.TouchJSON.YA ...

  6. php中使用json做api,JSONAPI在PHP中的应用

    现在服务端程序员的主要工作已经不再是套模版,而是编写基于 JSON 的 API 接口.可惜大家编写接口的风格往往迥异,这就给系统集成带来了很多不必要的沟通成本,如果你有类似的困扰,那么不妨关注一下 J ...

  7. .NET 6新特性试用 | 可写JSON DOM API

    前言 我们常用JSON的方式,是将类对象序列化/反序列化: var user = new User { Name = "My IO" }; var json = JsonSeria ...

  8. jsonrpc php使用,利用php怎么编写一个json rpc框架

    利用php怎么编写一个json rpc框架 发布时间:2020-12-25 15:24:41 来源:亿速云 阅读:71 作者:Leah 本篇文章为大家展示了利用php怎么编写一个json rpc框架, ...

  9. 介绍一个用于EOS区块链的RPC API接口的PHP开发包SDK

    作为我们Block Producer对社区利益的承诺的一部分,我们希望专注于构建有助于提高EOS平台采用率的工具/应用程序.与大多数大型应用程序一样,当你只有少量或过时的文档并且缺乏工具来帮助你进行入 ...

  10. jsonrpc php使用,php实现的一个简单json rpc框架实例

    json rpc 是一种以json为消息格式的远程调用服务,它是一套允许运行在不同操作系统.不同环境的程序实现基于Internet过程调用的规范和一系列的实现.这种远程过程调用可以使用http作为传输 ...

最新文章

  1. dell台式机进入安全模式_华为发布首款商用台式机,商用PC市场再掀变革?
  2. 百度地图手机和电脑不一致_如何解决电脑显色和印刷色不一致的问题
  3. jboss esb 学习笔记与html的传输,Jboss_ESB学习笔记1.doc
  4. halcon视觉框架源码_图像处理与机器视觉初学者学习路线
  5. 苹果照片库的照片,直接拖到桌面上
  6. 【心电信号】基于matlab GUI心电信号数字滤波处理【含Matlab源码 1067期】
  7. usb加密狗破解软件
  8. CHKRecovery(文件删除还原工具)v3.3.0绿色版
  9. 速成PPTC(自恢复保险丝)选型
  10. Pre-commit:如何使用 husky、lint-staged和prettier优化你的项目
  11. 公司电脑重装经验 ThinkPad E480 win7重装 电脑重装
  12. 初识Postman工具
  13. Codeforces Round #439 (Div. 2)C - The Intriguing Obsession(简单dp)
  14. leetcode5490
  15. 虚拟卡是什么?怎样申请虚拟信用卡?
  16. 【从kitti开始自动驾驶】--5. GPS资料发布
  17. 友谊随笔——你是人间四月天(竹)
  18. 最优传输传记(optimal transport)一——最优传输模型
  19. android手机清理软件推荐,最好用的手机清理app
  20. 哈利·波特考试(c/c++)

热门文章

  1. 电力系统微型计算机继电保护试题及答案,全国2010年月高等教育自学考试电力系统微型计算机继电保护试题及答案.doc...
  2. 【第三方对接】使用 永中Office 实现在线 Office 整合到 Spring 项目
  3. 面试官问如何优化慢 SQL ?(附两万字SQL面试题)
  4. 如何查看android设备是否支持Widevine DRM
  5. MYSQL数据库中导入中国各个省份编号和省份
  6. mac系统spss26软件下载及安装教程
  7. java格式化日期24小时_Java如何格式化24小时格式的时间?
  8. maven 启动项目默认tomcat6更换为tomcat7或其他版本
  9. 53-20210316华为海思Hi3516DV300的linux系统通过网口刷机(eMMC模式)
  10. 高标清上下变换器的测试评估及应用研究