Alert Source Discuss
🚧 Stagnant Standards Track: ERC

ERC-2942: EthPM URI 规范

Authors Nick Gheorghita (@njgheorghita), Piper Merriam (@pipermerriam), g. nicholas d'andrea (@gnidan), Benjamin Hauser (@iamdefinitelyahuman)
Created 2020-09-04
Discussion Link https://ethereum-magicians.org/t/ethpm-v3-specification-working-group/4086/7
Requires EIP-2678

简单概要

一个自定义的 URI 方案,用于标识 EthPM 注册表、包、发布版本或发布版本中的特定合约资产。

摘要

当与 EthPM 生态系统交互时,用户和工具可以从 URI 方案中受益,以标识 EthPM 资产。能够用单个字符串指定包、注册表或发布版本,简化了安装、发布或分发 EthPM 包所需的步骤。

规范

scheme://registry_address[:chain_id][/package_name[@package_version[/json_pointer]]]

scheme

  • 必需
  • 必须是 ethpmerc1319 之一。如果未来版本的 EthPM 注册表标准通过 ERC 流程设计和发布,则这些 ERC 也将是有效的方案。

registry_address

  • 必需
  • 应该是 ENS 名称或带有 0x 前缀的校验和地址。 ENS 名称更适合底层资产的可变性可以接受并且对名称所有者有隐式信任的情况。在安全性要求更高的情况下,带有 0x 前缀的地址更可取,以避免需要信任名称的控制者。

chain_id

  • 可选
  • 表示注册表所在链的 chain id 的整数
  • 如果省略,则默认为 1(主网)。

package_name

  • 可选
  • 目标包名称的字符串

package_version

  • 可选
  • 目标包版本的字符串
  • 如果包版本包含任何 url 不安全字符,则必须对其进行安全转义
  • 由于 ethpm 规范并未严格强制执行 semver,如果从 uri 中省略 package_version,则工具应该避免在任何歧义的情况下进行猜测,并向用户提供可用版本的选择。

json_pointer

  • 可选
  • 一个路径,用于标识版本化包发布版本中的特定资产。
  • 该路径必须符合 JSON pointer 规范,并解析为包中可用的资产。

理由

EthPM 生态系统中的大多数交互都受益于 EthPM 资产的单字符串表示形式;从安装软件包到识别注册表再到分发软件包。一个可以忠实地表示主网或测试网上任何类型 EthPM 资产的单个字符串,减少了新用户的心智负担,最大限度地减少了框架的配置要求,并简化了包作者的包分发。

测试用例

用于测试各种 URI 的 JSON 文件可以在 ethpm-spec 存储库 fixtures 中找到。

实现

EthPM URI 方案已在以下库中实现:

安全注意事项

在大多数情况下,EthPM URI 指向一个不可变的资产,从而完全保证目标资产未被修改。但是,如果 EthPM URI 使用 ENS 名称作为其注册表地址,则 ENS 名称有可能已被重定向到新的注册表,在这种情况下,不再存在不可变性的保证。

版权

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

Citation

Please cite this document as:

Nick Gheorghita (@njgheorghita), Piper Merriam (@pipermerriam), g. nicholas d'andrea (@gnidan), Benjamin Hauser (@iamdefinitelyahuman), "ERC-2942: EthPM URI 规范 [DRAFT]," Ethereum Improvement Proposals, no. 2942, September 2020. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-2942.