4.2 JSON RPC API

优质
小牛编辑
128浏览
2023-12-01

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-ethereumgo-ethereumpy-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-ethereumgo-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