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
若是从浏览器访问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', // 436
true
]
返回值
参考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', // 1
blockNumber: '0xb', // 11
blockHash: '0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b',
cumulativeGasUsed: '0x33bc', // 13244
gasUsed: '0x4dc', // 1244
contractAddress: '0xb60e8dd61c5d32be8058bb8eb970870f07233155', // or null, if none was created
logs: [{
// logs as returned by getFilterLogs, etc.
}, ...],
logsBloom: "0x00...0", // 256 byte bloom filter
status: '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
}
参考网址