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 文档的结构:
JSON-RPC API 可以通过实现一种服务发现方法来支持 OpenRPC 规范,该方法将返回 JSON-RPC API 的 OpenRPC 文档。 该方法必须命名为 rpc.discover
。 rpc.
前缀是 JSON-RPC 2.0 规范 系统扩展保留的方法前缀。
用例
这是 OpenRPC 用例的愿景,以及它与像 multi-geth 这样的客户端实现的关系:
理由
为什么我们要这样做?
服务需要弄清楚如何相互通信。 如果我们真的想构建下一代自动化,那么拥有最新的库、记录完善的 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 的文档:
生成的客户端
客户端 是从本 EIP 中概述的 OpenRPC 文档 openrpc.json 生成的,可以用作 web3.js 或 ethers.js 的替代方案,但适用于各种语言:
模拟服务器
OpenRPC 模拟服务器 为任何给定的 OpenRPC 文档提供了一个模拟服务器,允许在不启动真实网络的情况下进行测试。
资源
- Multi-Geth OpenRPC 发现
- 关于 OpenRPC 和 JSON-RPC 工具的未来的 EDCON 2019 演讲
- etclabscore/ethereum-json-rpc-specification
- open-rpc.org
版权
在 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.