JSON
是一种轻量级的数据交换格式。 它可以表示数字,字符串,有序序列值以及名称/值
对的集合。
JSON-RPC
是无状态的轻量级远程过程调用(RPC)协议。 首先,本规范定义了几种数据结构及其处理规则。它与传输无关,因为可以在同一过程中,通过套接字,通过HTTP或在许多各种消息传递环境中使用这些概念。 它使用JSON(RFC 4627)作为数据格式。
要从JavaScript应用程序内部与以太坊节点通信,可以使用web3.js库,该库为RPC方法提供了便捷的接口。有关更多信息,请参见JavaScript API。
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 |
可以使用--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。
首先通过运行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中,JSONRPC服务器默认情况下启动,是在127.0.0.1:4000
上进行的侦听
你也可以通过提供config选项来更改端口和监听地址。
pyethapp -c jsonrpc.listen_port=4002 -c jsonrpc.listen_host=127.0.0.2 run
cpp-ethereum | go-ethereum | py-ethereum | parity | pantheon | ||
---|---|---|---|---|---|---|
JSON-RPC 1.0 | ✓ | |||||
JSON-RPC 2.0 | ✓ | ✓ | ✓ | ✓ | ✓ | |
Batch requests | ✓ | ✓ | ✓ | ✓ | ✓ | |
HTTP | ✓ | ✓ | ✓ | ✓ | ✓ | |
IPC | ✓ | ✓ | ✓ | |||
WS | ✓ | ✓ | ✓ |
目前有两种通过JSON传递的关键数据类型:未格式化的字节数组和数量。两者都以十六进制编码传递,但对格式要求不同:
当编码QUANTITIES(整数,数字)时:编码为十六进制,前缀为“0x”(例外:0应表示为“0x0”)。例如:
当编码为UNFORMATTED DATA(字节数组,帐户地址,散列,字节码数组)时:编码为十六进制,前缀为“0x”,每个字节两个十六进制数字。 例子:
目前,cpp-ethereum
和go-ethereum
仅通过http提供JSON-RPC通信。
以下方法具有额外的默认块参数:
当请求作用于以太坊状态时,最后一个默认的块参数决定了块的高度。
以下选项可用于defaultBlock参数: