查看原文
其他

风潮思想沙龙 | 姚翔:公共协议的升级——你所不知道的以太坊治理

风潮 WaveC 风潮 WaveC 2022-04-19

今天的主题是以太坊的治理,所以首先我们需要知道以太坊是什么。


参考 etheurem.orgethereumfoundation.org 两个网站的说法:


@ etheurem.org

以太坊是社区驱动的技术,为以太坊 (ETH) 和成千上万的去中心化应用程序提供动力。

@ ethereumfoundation.org

以太坊是允许用户掌控自己数据的可编程货币,是去中心化应用的全球开源平台。

这两种说法很有趣:社区网站称,以太坊是一个技术,用于保障一些应用的运行;基金会网站则称,以太坊是一个允许用户掌控数据的开源平台,它反而是从一个技术的视角去供应的。深入点讲,以太坊实际上就是一套用技术语言描述的共识协议。


关于这一点,可以查阅两个文档:

(1) GitHub上的可执行规范,即execution-specs(specs - speculations);

🔗 Link:https://github.com/ethereum/execution-specs

(2) 它的更新历史,即history。

(最好看英文版,其他语言版本可能存在滞后期)

🔗 Link:https://ethereum.org/en/history/


当前的以太坊共识是通过启动时的技术规范(黄皮书)与历次更新时的增量定义的。增量中的最小更新单位由以太坊改善提案(Ethereum Improvement Proposal,EIP)承载。


黄皮书描述了以太坊的技术定义,比如,"地址是怎么生成的?""虚拟机如何执行指令?""转账的时候要消耗的gas是多少?"等等。


从2015年7月30号上线起,它历经了多次升级,所以现在的规范并没有一个整体表述,但可以根据每一次的增量变化达成当前版本的共识。那么就要说到增量当中最小的单位,即 EIP,并不是所有被认可的 EIP 都会被放在共识更新里。EIP 分为很多种类型,只有一种名为 Core 的特殊类型,即核心层面的 EIP,才会被放到共识中。


升级到底是升什么级?简单而言,就是代码修改,增加一些新功能,或者说修复一些错误。从2015年7月31号到现在正好6年半,期间一共有13次更新,其中功能性更新8次,安全性更新5次(下图打虚线处对应一次升级)

功能性升级指增加一些新特性,或修改网络的一些执行方法。用蓝色标出的就是8次功能性升级,红色标出的则是5次安全性升级


我们来看一下这几次安全性升级是什么情况。其中,有两次是难度炸弹。为什么说难度炸弹是一个安全性升级?是因为如果你不去应对它的话,网络出块时间就会受到影响,这件事情在什么时候发生过?如果看数据的话,可以发现大概在2017年,有一段时间出块接近30秒,而以太坊设计的出块时间大概是13秒。原因是什么?就是代码参数的一个难度炸弹——到了一定程度后,出块难度会越来越大,甚至是一种指数级的增长,所以网络会越来越不好用。


还有比如说 DAO Fork。DAO Fork 当时就出了一个比较大的事件,然后大家决定要代码分管,还产生了社区分裂。另外几次是因为当时网络遭受了非常大的攻击——DDOS攻击。你可以理解成有一个操作,它非常消耗计算机的资源,但是它的gas费非常低,所以攻击者可以去大量去调用,即花很少的钱就让你的所有节点都要运行消耗大量资源的代码。这件事情发生在2016年,恰好以太坊核心开发者在上海参加万向区块链周,即以太坊 Devcon 2。他们在酒店会议室里紧急修代码,很有历史意义。那次攻击叫上海 DDOS。


所以要说以太坊这么多年在干啥,其实可以不去看上面的应用,只要看协议层,就是这13次协议更新。13次耗费6年半,频率基本上是半年一次。早期会比较密集,如果把前面6次去掉,差不多就是一年一次的频率。



关于命名,部分命名规则以白皮书为依据。第一阶段叫 Frontier,第二阶段叫 Homestead,第三阶段叫 Metropolis,第四阶段叫 Serenity。


在实际过程中,Frontier 分成两个阶段;Homestead 执行了,但那三次是未计划的,不在计划线上;Metropolis 拆成了三次来做,因为太复杂。如果你去看拜占庭的那次升级,里面的东西特别多。开发者都认为,如果一次升级包含太多的东西,很容易导致不可预料的问题,而且出了问题你追溯不到源头,所以拜占庭、君士坦丁堡/圣彼得堡、伊斯坦布尔,这三次其实是人类历史上很重要的三个时间点。


在 Serenity 之后,因为当时要启动以太坊 2.0,就启用了新的命名规则。为什么命名为柏林、伦敦?因为柏林、伦敦分别是以太坊开发者大会 Devcon 前两次(Devcon 0/1)的举办地,所以下一次升级会叫上海,接下来是坎昆、布拉格、大阪,即以历史上举办开发者大会的城市为命名规则。但如果这些名字用完了,怎么办?针对这一问题还在讨论,其实这是一个很严肃的议题。


然后穆尔冰川和箭形冰川是解除难度炸弹,体现到代码上就是改两三行。



伊斯坦布尔升级

伊斯坦布尔升级有专门的EIP,即 EIP-1679。这里面截取了它的所有内容。

🔗 Link:  EIPs/eip-1679.md at master · ethereum/EIPs · GitHub

摘要中主要描述了这一次硬分叉的变化,硬分叉的名字叫伊斯坦布尔,它是怎么做呢?


主网会在 block number 是 9069000 时激活。然后下面是四个测试网:Ropsten; Kovan; Rinkeby; Görli。针对这四个测试网,我稍微展开讲一下。测试网的升级是有严格的顺序的,原因是每个测试网的稳定性不一样,所以上面的应用也不不同。比如,有些应用甚至会在Görli上跑自己非常完善的测试环境。如果你自己开发 dapp 就会知道,比较成熟的阶段应该会放在Görli上。


接下来,是这里面包含的EIP:


EIP-152 增加了一个 Blake2 的操作码的预编译,Blake2 是一个哈希函数;

EIP-1344增加了一个Chain ID opcode;

EIP-1884 是一个很重要的提案,当时因为状态爆炸问题已经很严重,这个提案是重新给与状态大小相关的 opcode 定价,在此之后存数据的成本差不多是此前的4倍,减少链上状态数据的增长速率,EIP-1184 很值得大家一读,写得非常好;

EIP-2028主要内容是Calldata 的 gas 费降低;

EIP-2200 跟 EIP-1884其实是一起用的,也是把 SSTORE 和 SLOAD 这两个操作码的成本提高。


伊斯坦布尔升级基本上围绕着价格展开,这6个EIP全部在说如何改动价格。要么把一些东西变便宜,要么把这些东西变贵。这些决策最终在All Core Devs Call#68,即第68次会议上敲定,达成共识。


柏林升级

我们再看很近的一次硬分叉。今年其实有三次,分别是柏林、伦敦、箭形冰川。柏林是今年(2021年)4月14号。

🔗 Link:  execution-specs/berlin.md at master · 

ethereum/execution-specs · GitHub

柏林干了什么,首先你会发现写法就不一样,结构也有很大的不同。接下来我会说为什么会有这个变化?


首先它有4个EIP:EIP-2565EIP-2718EIP-2929EIP-2930(细节略)。


除 EIP 之外,这里还有些任务。第一个任务是客户端的集成测试,先部署后集成,然后做冒烟测试和选择升级的区块高度,但你会发现写的比之前的更严谨对不对?


因为你看这里面写了一个数字,每一个数字后面都有一个链接,链接相当于一个普通的提案。再接下来,是哪些客户端会去部署,这里列出了五个客户端。之前伊斯坦布尔升级中没有写这件事情。客户端部署完后再确认升级的时间,因为理论上,如果假设测试出了问题,可以往后推迟升级。客户端团队需要确认已经完成了相关 EIP 的开发,交给测试团队进行单元测试和联调测试。


两次升级的区别

这两次升级间区别很大,柏林前的升级是存在问题的,主要有四点:

◼ 耗费大把时间做决定

柏林前的流程是——先选一个升级时间,再去选将哪些 EIP 包进去,所以大家会不停讨论哪些 EIP 可以放进去。同时,升级时间很可能因为 EIP 没有按时开发完或测试出问题而出现延迟。大量时间都耗散了。


◼ 缺乏完整的测试


◼ 缺乏跨客户端的测试


◼ 总体进度被个体影响

如果任何一个团队出现问题,整体进度都会受影响。

所以,在2019年8月8号,Martin Holst Swende 提出以 EIP 为中心的升级,最终形成了一个规范。这个规范就是我们今天说的治理流程。



EIP 为中心的升级

第零阶段:写一个 EIP 草稿;


第一阶段:开发者的"祝福"。若你想推进一个 EIP,首先需要上会,上会没有一个很明确的规则。如果仔细考察开会流程,他们开会的时候会有议程,说我们想讨论哪些东西。议程大概会提前两周发出,会询问是否有其它想讨论的问题。可能有人想讨论 EIP-1234,如果大家都觉得有必要可能就会讨论。当然,也有可能协调人说这次议程太满了,或者说相似话题已经讨论过了。这相当于会前协商的过程,只要 EIP 上了 ACD (All Core Devs) 的会议,ACD 给了积极反馈,大家同意了,那你就可以去实现;


第二阶段:实现。只要 ACD 定下来,客户端团队就得无条件地去开发。当然,客户端团队成员也会参与讨论,但只要定了,就没有什么讨价还价的;


第三阶段:测试。测试分为测试用例和安全审核。其中,安全审核非常关键。如果代码改动很小,可能不需要做安全审核。但如果改动很大,就需要请外部专业的安全团队来做审计;


第四阶段:接受。实现好了,测试完了没问题,我们就接受 EIP;


第五阶段:last call。比如,我们决定在某个时间升级,在 last call 上我们决定包含哪些EIP。但是否纳入并不影响 EIP 的状态,已经接受的 EIP 可以在下一次升级再纳入;


第六阶段:主网发布。


可以看出,这里面发生了很大的变化。为什么2019年才有这样一个转变?如果你去听之前的会议,会发现当时一些以太坊核心开发者也被流程搞得有点PTSD。新的流程则试图避免这些状况的发生。



新流程启用后的首次升级——柏林升级——的时候还出现了一个很有趣的事情,就是 EIP-2315 的紧急刹车。


我写过一篇文章,细节可以看《移除EIP-2315:以太坊柏林升级前的紧急刹车》。简单介绍这个事情过程。EIP-2315 是一个非常底层的技术问题,没几个人搞得明白。重点是,在2月19号确定柏林升级包含的 EIP 时,EIP-2315 被纳入其中,但在柏林的时候并不包含 2315。

点击图片 查看文章

lightclient,应该是一个美国小哥,在3月3日发帖认为  EIP-2315 应该移除,理由是它不能带来什么好处。但提案的提出者认为流程已经确定,不能再对实质内容提出反驳,这样破坏规矩是很不好的。


但 lightclient 居然仅用两天时间就逆转了局势。他发现这个提案历史上就没有被接受过,也就是说后来不知道怎么就混水摸鱼通过了。


3月4号,他写了帖子回顾整个事件。在3月5号,ACD 107 上决定撤除 2315。他整理的时间线中发现 2315 的第一次讨论是在 ACD 80,最后一次讨论是 ACD 96,但最终并没有结论,但竟然被纳入了升级列表。


2315 的提出者 gcolvin:我们已投身于一个目前市值 1730 亿美元的网络的研究、开发和管理。我不知道有多少业务在这个网络上运行,也不知道它支持了多少人的生活。我们必须学会像专业人员一样操作。其中存在一些严重的问题:

◼ ACD 98 和 ACD 100 缺少会议记录,lightclient 重听录音后确定未讨论限制跳转的问题;


◼ 冗长的会议让 Solidity 团队极少参与 ACD。尽管他们提出了很多反对,但仅让 2315 出现在搁置列表,而问题并未解决。其他人也不能清楚知道 2315 的状态;


◼ 在有人质疑为什么 2315 的状态是 Draft 时,文档维护者解释说是 paperwork 没有做好,发起更改 PR。



我们刚才提到了很多词,例如ACD。它到底是什么?以上列出了以太坊治理相关的九个模块。

EIP

EIP,根据我自己定义,就是治理的最小单元,是不可拆分的一个单元。它描述了以太坊平台的标准,这些标准包括核心协议规范、客户端API、合约标准。比如,我们经常说的 ERC-721 也是一个EIP,只是它是一个代币标准,所以名为 ERC。不过,合约标准不涉及共识的变更,所以不会列入升级流程。


如果你去读一下 EIP,就会知道 EIP-1叫 EIP 的目标和指引。它受到了 RFC-2119 协议的启发,借鉴了 BIP-0001 和 PEP-0001。


谁能提出 EIP?这个问题也很好,其实是任何人。反过来说,因为任何人都可以写EIP,这件事情并没有很多的限制,你只要按照规则去写作即可。


ACD

ACD 全称为 All Core Devs Meeting。这个词在 2017 年之后改成了 Ethereum Core Devs Meeting。这个词最早由 Gavin Wood 提出,沿袭至今。


这个组织是以太坊的最高权力机关。主要讨论路线图的变更,决定 EIP 是否采纳,决定路线图变更等重大事项。近来也用于讨论以太坊的合并事项。


需要补充的是,以太坊 2.0 的开发者暂时不叫 ACD,他们现在还叫 2.0 的研究员,现在是两条平行的线。Jameson Hudson(ACD 协调人 2015-2020)指出,以太坊核心开发者是目前为以太坊底层协议发展做出重大贡献的人。


其次,什么人可以受邀参加这个会?其实,任何人都有权利进入这个 Zoom 会议室。主要与会人员有底层协议开发者、客户端开发者、核心的研究者,部分议题可能会邀请其他专家。比如,我们讨论经济学问题的话,可能会邀请一些经济学家。其他人怎么办?议程是公开的,笔记也是公开的,同时 YouTube 直播,也有回放,你可以随时去看。会议两周一次,时间定在周五晚北京时间10点。


那么,谁来决定谁是核心开发者?可以看下面这篇文章。他的说法是没有人,但引用的例子有点 tricky。他说要借鉴比特币核心维护者的定义,说谁是就是,以你的贡献和声誉为依据。如果你自己说你是,大家不认没有用。目前为止,没有发现过冒牌情况,没有一个机制来公开说明谁不是。

🔗 Link:  https://hudsonjameson.com/2020-06-22-what-is-an-ethereum-core-developer/


Ethereum Foundation

🔗 Link: https://ethereum.foundation/about/

基金会其实是一个注册在瑞士的非营利组织。基金会自己的说法是,专注于支持以太坊及其相关技术的非营利组织。但网站也展开说了,它不是公司,更不是传统的非营利组织。“我们不控制以太坊,我们也不是资助以太坊发展的唯一机构”。


简单说就是,以太坊是依赖更多力量来建设的,他们只是支持以太坊的机构、个人、公司的大生态系统中的一员。


他们主要的工作,一个是 DevCon,这是一个开发者会议,每年会举办,但2020年和2021年因为疫情都没有办,2022年10月份暂定在哥伦比亚的波哥大。另一个是ESP,就是以太坊的生态支持计划,社区可以申请基金会的支持,帮助自己的发展。


Ethereum Research

🔗 Link: https://ethresear.ch/

这是一个论坛,一个半开放的社区。它面向的是一些前沿问题,或者说这上面讨论的东西有可能在3到5年内不太会有应用。比如,密码学的前沿、分片、经济学、Casper、zkRollup 等等。这个论坛很小众,对大众来说没有什么吸引力。


Ethereum Magicians

🔗 Link: https://ethereum-magicians.org/

这个网站主要就是讨论EIP,围绕一个 EIP 不断讨论。它是一个开放式平台,任何人都可以进去,任何人都可以发言。如果这个 EIP 有很大争议,在上面的讨论会非常激烈,可能大家都会给出自己的观点和凭据。


你看界面是按阅读量排行的。第一个是"A rollup-centic ethereum roadmap",当时他在上面说我们要改路线图,时间是去年的11月;第二篇围绕 EIP-1559,EIP-1559 涉及到经济模型,每一个帖子都是一篇小作文,这个帖子有将近 400 篇小作文。我觉得如果你想了解 EIP-1559 到底是什么,你只要读完就这个帖就可以了。


Ethereum Cat Herders

其使命是提升以太坊的项目管理能力,主要做4件事:


第一,以太坊网络历次升级的展示;

第二,一些开发者会议支持,如会议协调、录像、笔记;

第三,EIP资源。一个叫 peep an EIP,是什么呢?就是像 EIP-2315 这样的技术提案。他们会邀请专家通过视频来给大家讲这个 EIP 到底干了啥,就是讲解性的科普推广。另一个叫 EIPIP,即如何把EIP的流程变得更好。

第四,调研。比如 EIP-1559,他们会给一些人发问卷询问支不支持,或询问用户开发者使用以太坊开发是否有什么问题。


这个社区在以太坊治理上的主要工作其实在于 EIPIP上,有责任把 EIP 的流程变得更加合理。


Reddit / ethereum

🔗Link: https://www.reddit.com/r/ethereum/comments/o4unlp/ama_we_are_the_efs_research_team_pt_6_23_june_2021/


Reddit 上,大家一般会讨论一般性问题。ACD 这种形式很明显是由精英治理的,用户没什么权利。另外就是,重要的事情其实ACD一般不进行投票,一件事情要么就大家达成一致,要么就搁置下次再聊。


Reddit和治理的关系是什么?就是以太坊基金会在上面做 AMA,解答社区对于以太坊的疑惑,这已经做了6次。最近的一次 AMA 是在今年 (2020年) 6月23号,2020年有三次,2019年两次。


AMA 一般发生在重要事件前夕。比如,我们看2020年11月份那一次,有两个原因。一个是2.0的质押功能上线,基金会需要解决社区的疑惑,另一个是当时以太坊的路线图发生了改变,即以rollup为中心的路线图。


Eth R&D

这是一个 Discord 服务器,大家都可以加进去。里面频道很多,如果你不是一个每个礼拜要花 100 个小时研究以太坊的人,我觉得不必要看,因为频道里东西特别多。


比如,有 general 频道,有讨论 merge 的,讨论执行的,讨论规范的,讨论教育的,讨论 EIP 流程的,颗粒度很小。


频道里任何人都是可以发言的,有些会议的 Zoom 也会贴到这里。比如,开发者要开个会,但不会公开会议链接,而是在这里贴出来。


Ethereum Clients

以太坊客户端,也就是所谓真实的以太坊。这是以太坊的客户端开发团队,用不同的开发语言进行开发。




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存