区块链概论
搜索文档…
第七章 智能合约开发语言
4.12 以太坊EIPs

什么是EIPs?

EIPs即以太坊改进提案(Ethereum Improvement Proposals)。根据官方定义,EIPs是以开放协作模式为以太坊平台构建各种标准(包括核心协议规范、客户端API和合约标准)的一个专业化的提案协作区。EIP应阐明相应功能的简明技术规范和基本原理。此外,EIP作者有责任就对应提案在社区内建立共识并记录异议。
以太坊核心协议规范、客户端API和合约标准的改进,有部分是属于对以太坊这条公链的改进,另外大多就是为智能合约的应用开发提供标准。如果我们把以太坊看着特斯拉,那么前者就是它为生产汽车而制订的生产标准,而后者就是为产品而制订的电池电压等等面向整个汽车行业的应用标准。
在以太坊脱颖而出之前,这一工作主要活跃于比特币社区的协作,也曾经创造出很多重要的标准。如BIP 39:Mnemonic code for generating deterministic keys(生成确定性密钥的助记词)。我们现在使用钱包的第一件事就是保存好助记词,说明我们至今还在使用其衍生方式。
我们说以太坊是当今最重要且最成功的公链,最主要的原因之一就在于应用标准暨应用的技术创新几乎全部来自于以太坊社区,也就是它首先以ETP的形式分享和落地。
六年来,以太坊社区涌现出近4千个EIP。

**举例:**ERC-165

状态:已定稿(Final)
提交记录:https://github.com/ethereum/EIPs/issues/165
标准说明:https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
ERC-165是一个标准接口检测协议。
ERC-165标准提供一个标准的接口来发布和检测智能合约方法的实现情况。此标准的提出是为了解决某些 ERC 标准对于接口实现情况查询、接口版本查询的需求。ERC-165协议中标准化了以下几条:
  • 如何识别接口;
  • 一个智能合约如何发布它执行的接口;
  • 如何检测一个智能合约是否执行了ERC-165协议;
  • 如何检测一个智能合约是否执行了一个给定的接口;
简单来说,EIP就是以太坊的发展路线图。但这份路线图不是由某一个人或机构决定的,而是由整个以太坊社区达成共识来决定的。
以太坊官网可以查阅到所有正在建设的和已经完成的提案:
https://eips.ethereum.org/all
或者在Github上也可以找到所有当前已有和草拟的EIPs的可浏览版本:
https://github.com/ethereum/EIPs/issues
我们首先应该明白一个可贵的事实:实际上全球精英都已经并将继续参与以太坊的基础建设。譬如在这你就可以一睹为快:
https://ethereum-magicians.org/
智能合约开发基地:
https://github.com/ethereum/EIPs
ERC-number是以太坊智能合约标准的名称,有点类比IEEE标准,后面都有个标准的编码。前面我们已经重点介绍了五种智能合约标准。
LES:即Light Ethereum Subprotocol,以太坊轻客户端子协议。
API:即Application Programming Interface,应用程序编程接口。
RPC:即Remote Procedure Call,远程过程调用。
ABI:即Application Binary Interface,应用程序二进制接口。
ERC:即Ethereum Request for Comments,以太坊意见征求。
URI:即Uniform Resource Identifier,统一资源标识符。

EIPs状态术语

Draft(草案)——一个开放的求关注的idea。
Accepted(已接受)——以太坊计划立即采用的一个EIP,如希望被包含在下一个硬分叉里的EIP(核心/共识层的EIP)。
Final(终案)——一个已经被以太坊采用,已被包含在此前的硬分叉中的EIP(核心/共识层的EIP)。
Deferred(延后)——已经被以太坊接纳,但不会立即部署的一个EIP。会在以后的硬分叉里部署。

EIPs的类型

EIPs被分成多个类型,每个类型都有自己的EIP列表。

Standard Track(标准追踪类EIP)

标准追踪类EIP用于描述影响大多数或所有以太坊功能执行造成影响的的任何更改,例如对网络协议的改动,区块或交易有效性规则、已提交的应用标准或公约的改动,或影响使用以太坊的应用的互操作性的任何更改或补充。而且,标准追踪类可以进一步细分为以下几种类型
  1. 1.
    Core(核心)
    核心提案是需要通过社区共识并实行一个分叉才能得以改进的提案(例如EIP5,EIP101),以及不一定是共识攸关(无需进行分叉)的变更,但是可能与“核心开发”的讨论有关(例如,EIP86的矿工或节点策略改变之2、3和4)。\
  2. 2.
    Networking(网络) 网络提案包括对devp2p (EIP8)和Light Ethereum Subprotocol(以太坊轻客户端子协议)相关的改进,以及对“whisper ”和“swarm”的网络协议规范的改进。\
  3. 3.
    Interface(接口) 接口提案包括与客户端API/RPC规范及标准相关的改进提议,也包括某些语言层面的标准,比如方法名(如EIP6)以及合约ABI。标签“接口”与接口回购协议一致,讨论应该在EIP提交给EIPs存储库之前主要在其存储库中进行。\
  4. 4.
    ERC(ERC提案) 该提案为应用级标准及惯例,包括智能合约标准,比如代币标准(ERC20),名称登记(ERC26,ERC137),库/软件包格式(EIP82)和钱包格式(EIP75,EIP85)。

Informational(信息类EIP)

信息类EIP用于描述以太坊的设计问题,或者为以太坊社区提供一般性指导意见,但并不提出新功能。信息类EIP不一定代表以太坊社区的共识或建议,因此用户和实施者可以自由选择是否忽视信息类EIP或者遵循其中的建议。

Meta(元EIP)

元EIP用于描述以太坊相关的流程,或者对这些流程进行更改的建议。这类提案包含程序步骤、指导方针、决策过程的改动,以及以太坊开发工具或环境的变动。我们也可以把元EIP看作是流程类EIP。
元EIP与标准追踪类EIP类似,但仅用于以太坊协议之外的其它领域。该提案可能是一个实施方案,但与以太坊的代码库无关;这些提案通常也需要社区共识,但与信息类EIP不同,它们不是单纯的建议,用户通常不会忽视它们。
在Github上(https://github.com/ethereum/EIPs),我们可以追踪到各个EIP的进展。

如何参与以太坊标准的建设

  1. 1.
    首先查阅EIP-1(https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1.md)里面对于EIP的流程与要求的说明。
  2. 2.
    点击右上角的“Fork”,分叉(相当于复制)其文件夹。
  3. 3.
    将你的EIP添加到刚刚分叉出的文件夹里。这里有一个EIP模板(https://github.com/ethereum/EIPs/blob/master/eip-X.md)。
  4. 4.
    最后提交一个Pull请求到Ethereum的EIPs文件夹(https://github.com/ethereum/EIPs)。
附注:
LES:即Light Ethereum Subprotocol,以太坊轻客户端子协议。
API:即Application Programming Interface,应用程序编程接口。
RPC:即Remote Procedure Call,远程过程调用。
ABI:即Application Binary Interface,应用程序二进制接口。
ERC:即Ethereum Request for comments,以太坊注释请求。
URI:即Uniform Resource Identifier,统一资源标识符。