JSON RPC API
JSON
是一种轻量级的数据交换格式。 它可以表示数字,字符串,有序序列值以及名称/值
对的集合。
JSON-RPC
是无状态的轻量级远程过程调用(RPC)协议。 首先,本规范定义了几种数据结构及其处理规则。它与传输无关,因为可以在同一过程中,通过套接字,通过HTTP或在许多各种消息传递环境中使用这些概念。 它使用JSON(RFC 4627)作为数据格式。
JavaScript API
要从JavaScript应用程序内部与以太坊节点通信,可以使用web3.js库,该库为RPC方法提供了便捷的接口。有关更多信息,请参见JavaScript API。
JSON-RPC Endpoint
Default JSON-RPC endpoints:
Client | URL |
---|---|
C++ | http://localhost:8545 |
Go | http://localhost:8545 |
Py | http://localhost:4000 |
Parity | http://localhost:8545 |
Pantheon | http://localhost:8545 |
Java | http://localhost:8545 |
Go
可以使用--rpc标志启动HTTP JSON-RPC
geth --rpc
使用以下命令更改默认端口(8545)和列表地址(localhost):
geth --rpc --rpcaddr <ip> --rpcport <portnumber>
如果从浏览器访问RPC,则需要启用CORS。否则,JavaScript调用将受到同源策略的限制,请求将失败:
geth --rpc --rpccorsdomain "http://localhost:3000"
也可以使用admin.startRPC(addr,port)
命令从geth控制台启动JSON RPC。
C++
首先通过运行aleth应用程序启动节点:
build/aleth/aleth
然后启动JSON-RPC代理(默认为'〜/.ethereum/geth.ipc'和'http://127.0.0.1:8545'):
scripts/jsonrpcproxy.py
如果你不是默认的IPC路径或JSON-RPC选项,则可以指定:
scripts/jsonrpcproxy.py <path to your node's geth.ipc> <URL for this proxy server>
Python
在python中,JSONRPC服务器默认情况下启动,是在127.0.0.1:4000
上进行的侦听
你也可以通过提供config选项来更改端口和监听地址。
pyethapp -c jsonrpc.listen_port=4002 -c jsonrpc.listen_host=127.0.0.2 run
JSON-RPC的支持
cpp-ethereum | go-ethereum | py-ethereum | parity | pantheon | ||
---|---|---|---|---|---|---|
JSON-RPC 1.0 | ✓ | |||||
JSON-RPC 2.0 | ✓ | ✓ | ✓ | ✓ | ✓ | |
Batch requests | ✓ | ✓ | ✓ | ✓ | ✓ | |
HTTP | ✓ | ✓ | ✓ | ✓ | ✓ | |
IPC | ✓ | ✓ | ✓ | |||
WS | ✓ | ✓ | ✓ |
Output HEX values (输出十六进制值)
目前有两种通过JSON传递的关键数据类型:未格式化的字节数组和数量。两者都以十六进制编码传递,但对格式要求不同:
当编码QUANTITIES(整数,数字)时:编码为十六进制,前缀为“0x”(例外:0应表示为“0x0”)。例如:
- 0x41 (对应十进制的65)
- 0x400 (对应十进制的1024)
- WRONG: 0x (应始终至少有一个数字 - 0为“0x0”)
- WRONG: 0x0400 (不允许前导为0)
- WRONG: ff (必须加前缀0x)
当编码为UNFORMATTED DATA(字节数组,帐户地址,散列,字节码数组)时:编码为十六进制,前缀为“0x”,每个字节两个十六进制数字。 例子:
- 0x41 (size 1, 表示 "A")
- 0x004200 (size 3, "\0B\0")
- 0x (size 0, "")
- WRONG: 0xf0f0f (必须是偶数位数)
- WRONG: 004200 (必须有前缀0x)
目前,cpp-ethereum
和go-ethereum
仅通过http提供JSON-RPC通信。
默认区块参数
以下方法具有额外的默认块参数:
- eth_getBalance
- eth_getCode
- eth_getTransactionCount
- eth_getStorageAt
- eth_call
当请求作用于以太坊状态时,最后一个默认的块参数决定了块的高度。
以下选项可用于defaultBlock参数:
- HEX String - 区块号
- String "earliest" 为最早/起源块
- String "latest" - 为最新的挖掘的块
- String "pending" - 为pending状态/交易
JSON-RPC方法列表
- web3_clientVersion
- web3_sha3
- net_version
- net_peerCount
- net_listening
- eth_protocolVersion
- eth_syncing
- eth_coinbase
- eth_mining
- eth_hashrate
- eth_gasPrice
- eth_accounts
- eth_blockNumber
- eth_getBalance
- eth_getStorageAt
- eth_getTransactionCount
- eth_getBlockTransactionCountByHash
- eth_getBlockTransactionCountByNumber
- eth_getUncleCountByBlockHash
- eth_getUncleCountByBlockNumber
- eth_getCode
- eth_sign
- eth_sendTransaction
- eth_sendRawTransaction
- eth_call
- eth_estimateGas
- eth_getBlockByHash
- eth_getBlockByNumber
- eth_getTransactionByHash
- eth_getTransactionByBlockHashAndIndex
- eth_getTransactionByBlockNumberAndIndex
- eth_getTransactionReceipt
- eth_getUncleByBlockHashAndIndex
- eth_getUncleByBlockNumberAndIndex
- eth_getCompilers
- eth_compileLLL
- eth_compileSolidity
- eth_compileSerpent
- eth_newFilter
- eth_newBlockFilter
- eth_newPendingTransactionFilter
- eth_uninstallFilter
- eth_getFilterChanges
- eth_getFilterLogs
- eth_getLogs
- eth_getWork
- eth_submitWork
- eth_submitHashrate
- db_putString
- db_getString
- db_putHex
- db_getHex
- shh_post
- shh_version
- shh_newIdentity
- shh_hasIdentity
- shh_newGroup
- shh_addToGroup
- shh_newFilter
- shh_uninstallFilter
- shh_getFilterChanges
- shh_getMessages