Alert Source Discuss
Standards Track: ERC

ERC-190: 以太坊智能合约打包标准

Authors Piper Merriam (@pipermerriam), Tim Coulter (@tcoulter), Denis Erfurt (@mhhf), RJ Catalano (@VoR0220), Iuri Matias (@iurimatias)
Created 2017-01-10

摘要

本 ERC 提出以太坊智能合约包的规范。

该规范由以下以太坊开发框架维护者合作开发。

  • Tim Coulter (Truffle)
  • Denis Erfurt (Dapple)
  • Piper Merriam (Populus)
  • RJ Catalano (Eris PM)
  • Iuri Matias (Embark)

动机

打包是现代软件开发的核心部分,但以太坊生态系统中缺少这一环节。缺乏打包限制了开发者重用代码的能力,从而对生产力和安全性产生负面影响。

一个关键的例子是 ERC20 标准。有一些经过良好审计的可重用代币合约可用,但由于难以找到和重用现有代码,大多数开发者最终会编写自己的合约。

打包标准应该对生态系统产生以下积极影响:

  • 由于能够重用现有代码而提高整体生产力。
  • 由于能够重用常见模式(ERC20、众筹等)的现有经过良好审计的实现而提高安全性。

智能合约打包还应该对最终用户产生直接的积极影响。钱包软件将能够使用发布的包,并生成一个用于与该包中包含的任何已部署合约进行交互的界面。随着 ENS 的出现,所有部分都将到位,钱包可以使用人类可读的名称,并向用户呈现一个用于与底层应用程序交互的界面。

规范

此标准的完整规范在仓库 epm/epm-spec 中单独维护。

此 EIP 引用规范的 1.0.0 版本:https://github.com/ethpm/epm-spec/tree/v1.0.0

该规范包含一个名为 “Release Lockfile” 的单个文档的详细信息。

这些文档没有内联到此 ERC 中,以确保规范只有一个事实来源。

用例

此规范涵盖以下类型的智能合约包。

  1. 包含旨在用作基本合约的合约的包,例如常见的 owned 模式。
  2. 包含随时可用的合约的包,例如 ERC20 代币合约。
  3. 包含已部署合约的包,例如库或服务。

这些用例的完整解释和示例可以在 epm/epm-spec 仓库的 README.md 中找到。

包管理器

Release Lockfile 旨在供包管理软件使用。已特别注意确保所有以下功能都可以由包管理器实现。

确定性构建

确保包始终解析为相同的依赖项和源文件集。源文件和依赖项都通过内容寻址,以确保引用的资源不会更改。

字节码验证

包含适当的信息,供包管理器检查已部署的合约,并验证其字节码是否与包源代码的编译和链接产生的字节码匹配。

多链部署

支持跨多个链的部署,允许包在公共主网和测试网上定义地址。

受信任的包

允许排除源代码或其他验证合约字节码所需的元素的包。这允许为包管理器不执行验证的特殊情况创建最小的包。

框架支持和集成

以下项目已实施或正在实施对 ERC190 的支持:

Citation

Please cite this document as:

Piper Merriam (@pipermerriam), Tim Coulter (@tcoulter), Denis Erfurt (@mhhf), RJ Catalano (@VoR0220), Iuri Matias (@iurimatias), "ERC-190: 以太坊智能合约打包标准," Ethereum Improvement Proposals, no. 190, January 2017. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-190.