以太坊JSON RPC API介绍

原创
半兽人 发表于: 2018-05-17   最后更新时间: 2020-03-15 00:06:24  
{{totalSubscript}} 订阅, 13,202 游览

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-ethereumgo-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方法列表

更新于 2020-03-15

查看ethereumj更多相关的文章或提一个关于ethereumj的问题,也可以与我们一起分享文章