4.2 JSON RPC API
JSON 是轻量级的数据交换格式。它可以表示数字,字符串,有序序列的值,以及名称/值对的集合。
JSON-RPC是无状态,轻量级的远程过程调用(RPC)协议。这个规范首先定义了几个数据结构及其处理规则。这是传输不可知的,因为这些概念可以在相同的过程中,通过套接字,通过HTTP或许多不同的消息传递环境中使用。它使用JSON(RFC 4627)作为数据格式。
JavaScript API
要让一个内置的JavaScript应用程序与一个ethereum节点进行通信,使用web3.js库,它为RPC方法提供了一个方便的接口。有关更多信息,请参阅JavaScript API。
JSON-RPC端点
默认JSON-RPC端点:
C++: http://localhost:8545
Go: http://localhost:8545
Py: http://localhost:4000
Go
您可以使用该--rpc
标志启动HTTP JSON-RPC
geth --rpc
更改默认端口(8545)和列表地址(localhost):
geth --rpc --rpcaddr <ip> --rpcport <portnumber>
如果从浏览器访问RPC,CORS将需要启用适当的域集。否则,JavaScript调用受同源策略的限制,请求将失败:
geth --rpc --rpccorsdomain "http://localhost:3000"
也可以使用该命令从geth控制台启动JSON RPC admin.startRPC(addr, port)
。
C++
您可以通过带-j
选项的eth应用程序来启动HTTP JSON-RPC:
./eth -j
您还可以指定JSON-RPC端口(默认为8545):
./eth -j --json-rpc-port 8079
Python
在python中,JSONRPC服务器默认启动并侦听 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 | |
---|---|---|---|
JSON-RPC 1.0 | ✓ | ||
JSON-RPC 2.0 | ✓ | ✓ | ✓ |
批量请求 | ✓ | ✓ | ✓ |
HTTP | ✓ | ✓ | ✓ |
Output HEX value 输出十六进制的值
目前有两个重要的数据类型是通过JSON传递的:未格式化的字节数组和数量。两者都使用十六进制编码传递,但对格式化有不同的要求: 当编码 QUANTITIES(整数,数字)时:编码为十六进制,前缀为“0x”,最紧凑的表示(例外:零表示为“0x0”)。例子:
- 0x41(十进制65)
- 0x400(十进制1024)
- 错误:0x(应始终至少有一个数字 - 零是“0x0”)
- 错误:0x0400(不允许前导零)
- WRONG:ff(前缀必须为0x)
当编码 UNFORMATTED DATA(字节数组,帐户地址,散列,字节码)时:编码为十六进制,前缀为“0x”,每字节两个十六进制数。例子:
- 0x41(1个字节,“A”)
- 0x004200(3个字节,“\0B\0”)
- 0x(0个字节,“”)
- 错误:0xf0f0f(必须是偶数个位数)
- 错误:004200(前缀必须是0x)
目前,cpp-ethereum 和 go-ethereum 仅通过http提供JSON-RPC通信。
默认块参数
以下方法有一个额外的默认块参数:
- eth_getBalance
- eth_getCode
- eth_getTransactionCount
- eth_getStorageAt
- eth_call
当请求作用于ethereum的状态时,最后一个默认块参数确定块的高度。 默认Block参数可以使用以下选项:
- HEX String - 整数块号
- String "earliest" 最开始的创世块
- String "latest" - 最新的开采块
- String "pending" - 待处理状态/交易
JSON RPC API参考
未翻译,具体参见:https://ethereum.gitbooks.io/frontier-guide/content/rpc.html