Alert Source Discuss
Standards Track: ERC

ERC-5219: 合约资源请求

允许从合约请求资源

Authors Gavin John (@Pandapip1)
Created 2022-07-10

摘要

此 EIP 标准化了一个接口,用于向智能合约发出资源请求并接收类似 HTTP 的响应。

动机

以太坊是构建去中心化应用程序(称为 DApp)的最成熟的区块链。因此,以太坊 DApp 生态系统非常多样化。然而,困扰 DApp 的一个问题是它们并非完全去中心化。具体来说,要连接一个“去中心化”的应用程序,首先需要访问一个中心化的网站,其中包含 DApp 的前端代码,这带来了一些问题。以下是使用中心化网站与去中心化应用程序交互的一些风险:

  • 信任最小化:需要信任的实体数量不必要地多
  • 审查:中心化网站无法抵抗审查
  • 永久性:该接口可能没有允许永久存储它的机制
  • 互操作性:智能合约无法直接与 DApp 接口交互

规范

本文档中的关键词“必须”、“禁止”、“必需”、“应”、“不应”、“应该”、“不应该”、“推荐”、“可以”和“可选”应按照 RFC 2119 中的描述进行解释。

名称解析

提出名称解析机制的 EIP 可以引用此 EIP,并且可以建议客户端支持他们的机制。 客户端也可以支持常规 DNS,如 RFC 1034 和 RFC 1035 中所定义的那样。

关注点分离

建议将应用程序逻辑与前端逻辑(实现 合约接口 中定义的接口的合约)分开。

合约接口

DApp 合约必须实现以下文件中定义的接口:合约接口

给实现者的提示

为了节省 gas 成本,建议使用 message/external-body MIME 类型,该类型允许您指向智能合约可能无法访问的数据。 例如,以下响应将告诉客户端从 IPFS 获取数据:

statusCode: 200
body: THIS IS NOT REALLY THE BODY!  # 这不是真正的 body!
headers:
  - key: Content-type
    value: message/external-body; access-type=URL; URL="ipfs://11148a173fd3e32c0fa78b90fe42d305f202244e2739"

理由

选择 request 方法设为只读,因为所有数据都应该从解析后的 DApp 发送到合约。 原因如下:

  • 提交交易以发送请求的成本很高,并且需要等待交易被挖掘,从而导致糟糕的用户体验。
  • 复杂的前端逻辑不应存储在智能合约中,因为部署成本很高,并且最好在最终用户的机器上运行。
  • 关注点分离:前端合约不必担心与后端智能合约交互。
  • 其他 EIP 可以与 307 Temporary Redirect 状态代码结合使用,以请求状态变更操作。

没有模仿完整的 HTTP 请求,而是选择了高度精简的版本,原因如下:

  • 唯一特别相关的 HTTP 方法是 GET
  • 查询参数可以编码在资源中。
  • 请求标头在很大程度上对于 GET 请求是不必要的。

向后兼容性

此 EIP 与 名称解析 部分中列出的所有标准向后兼容。

安全注意事项

访问普通 URL 的正常安全注意事项也适用于此,例如通过遵循 3XX 重定向可能导致隐私泄露。

版权

版权及相关权利通过 CC0 放弃。

Citation

Please cite this document as:

Gavin John (@Pandapip1), "ERC-5219: 合约资源请求," Ethereum Improvement Proposals, no. 5219, July 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-5219.