Alert Source Discuss
🚧 Stagnant Standards Track: Interface

EIP-1901: 向 JSON-RPC 服务添加 OpenRPC 服务发现

Authors Shane Jonas (@shanejonas), Zachary Belford (@belfordz)
Created 2019-02-25
Discussion Link https://github.com/ethereum/EIPs/issues/1902

摘要

这是什么?

这是一个通过向项目的 JSON-RPC API 添加方法 rpc.discover 来为现有和未来的 JSON-RPC 服务添加 OpenRPC 支持的提案,从而实现自动化和工具化。

指定基于 EVM 的区块链应实现的所有方法的 OpenRPC 文档和生成的文档可以在这里找到。

这最初是在 这里作为一个 ECIP 提出,但这种工具的好处在 Bitcoin、Ethereum Classic、Ethereum 和其他可通过 JSON-RPC 访问的区块链中显而易见。

动机

尽管 EIP-1474 概述了一个 JSON-RPC 规范。 以太坊仍然缺乏机器可读的 JSON-RPC 规范,该规范可用作工具化的行业标准。 本提案试图以一种可版本化且人机可读的方式标准化这样的规范。

以太坊客户端可能会公开具有不同方法签名的 RPC 端点,并导致客户端之间的兼容性问题。

开发人员需要可靠的开发人员体验,以及描述以太坊 JSON-RPC 2.0 API 的行业标准方法。

规范

什么是 OpenRPC?

OpenRPC 规范定义了 JSON-RPC 2.0 API 的标准、编程语言无关的接口描述,它允许人类和计算机发现和理解服务的功能,而无需访问源代码、其他文档或检查网络流量。 当通过 OpenRPC 正确定义时,消费者可以用最少的实现逻辑理解远程服务并与之交互,并在用例中共享这些逻辑模式。 类似于接口描述对较低级别编程所做的事情,OpenRPC 规范消除了调用服务时的猜测。

结构

这是 OpenRPC 文档的结构:

openrpc-spec-structure

JSON-RPC API 可以通过实现一种服务发现方法来支持 OpenRPC 规范,该方法将返回 JSON-RPC API 的 OpenRPC 文档。 该方法必须命名为 rpc.discoverrpc. 前缀是 JSON-RPC 2.0 规范 系统扩展保留的方法前缀。

用例

这是 OpenRPC 用例的愿景,以及它与像 multi-geth 这样的客户端实现的关系:

MultGethRpc-usecase

理由

为什么我们要这样做?

服务需要弄清楚如何相互通信。 如果我们真的想构建下一代自动化,那么拥有最新的库、记录完善的 API 和现代工具将提供简单的发现、入门,并支持最终用户和开发人员的交互。

机器可读的 JSON-RPC 2.0 API 定义文档的用例包括但不限于:

  • 通用的词汇表和文档将使开发人员、测试人员、架构师和技术文档编写人员保持同步。
  • 以多种语言生成的服务器存根/框架
  • 以多种语言生成的客户端
  • 以多种语言生成的模拟服务器
  • 以多种语言生成的测试
  • 文档生成

替代方案

OpenRPC 文档仅描述 JSON-RPC API 服务,并以 JSON 格式表示。 这些文档可以静态生成和服务,也可以从应用程序动态生成并通过 rpc.discover 方法返回。 这使项目和社区有机会采用 etclabscore/ethereum-json-rpc-specification 中概述的工具、文档和客户端,然后再为特定客户端实现 rpc.discover 方法。

实现

工具

交互式文档 Playground

您可以在这里查看交互式文档。

或者

使用通过 multi-geth 的 rpc.discover,Playground 可以发现并显示以太坊 JSON-RPC API 的文档:

eth-playground-openrpc

生成的客户端

客户端 是从本 EIP 中概述的 OpenRPC 文档 openrpc.json 生成的,可以用作 web3.js 或 ethers.js 的替代方案,但适用于各种语言:

eth-generated-client-openrpc

模拟服务器

OpenRPC 模拟服务器 为任何给定的 OpenRPC 文档提供了一个模拟服务器,允许在不启动真实网络的情况下进行测试。

inspector-mock-server-openrpc

资源

版权

CC0 下放弃版权及相关权利。

Citation

Please cite this document as:

Shane Jonas (@shanejonas), Zachary Belford (@belfordz), "EIP-1901: 向 JSON-RPC 服务添加 OpenRPC 服务发现 [DRAFT]," Ethereum Improvement Proposals, no. 1901, February 2019. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-1901.