写点什么

前浪的经验:区块链软件,一定也要去中心化

用户头像
Michael Yuan
关注
发布于: 2020 年 05 月 14 日

区块链的唯一只存在于共识。区块链软件没有唯一,遍地开花才更安全。





2016年,中国上海,DevCon2,以太坊刚刚起步。这一年的 DevCon 在以太坊历史上留下了重墨浓彩的一笔。就在热火朝天地开着技术大会之时,大会之外的以太坊公链,大量共识节点突然遭到黑客攻击而下线,所有运行以太坊基金会官方的 Geth 软件的节点都受到了影响。



一次攻击正在向以太坊袭来。



这次攻击来势汹汹,搞垮了大量的 Geth 节点,但最终给以太坊带来的实际伤害并不大。因为以太坊并不只有 Geth 一个节点软件,在基金会之外,由非官方的 Garvin Wood 博士主导开发的 Parity 节点软件,其架构与 Geth 不同,没有被攻击者利用的 Geth 软件漏洞,因此没有下线。这使得以太坊没有因此被硬分叉。这件事情史称“上海攻击”。



不过这件事,用句时髦的话讲,只有以太坊社区的前浪才知道来龙去脉。



前浪深知,区块链世界,从来不能只指望一个“供货商”。既然要去中心化,打前排的就是软件的去中心化。换句话说,哪怕有一天项目方跑路,区块链也能正常运行。唯一做到这一点的就是今天的无冕之王-比特币。



当时 Garwin Wood 是用 Rust 编写的 Parity 客户端。几年之后,Rust 也成为区块链社区备受追捧的编程语言。Polkadot、Oasis Labs、Near、CyberMiles 等都在或计划着拥抱 Rust 社区。



现在以太坊采用 WebAssembly 虚拟机,其中一个主要目的就是想借助 WebAssembly 吸纳 Solidity 之外的开发者来编写智能合约,这其中也包括网红 Rust 语言。



为了实现这个目标,以太坊基金会官方选定了 YUL 作为中间语言。Solidity 编译器 solc 未来将全面支持 YUL 作为一种中间语言编译器。



YUL 只适用于以太坊,这是以太坊的独特想法,之前没有在其他编译器中实现过。



solc 与 YUL 的开发进展并不顺利。solc 目前还不能编译一个完整的 Ewasm 智能合约,但这并不影响 ETH 2.0 Stake 功能的正常上线,尽管虚拟机与编译器被视为关键的区块链基础设施。按照路线图, ETH 2.0 是分阶段执行的,Ewasm 到2021年才能正式上线,在此之前, ETH 2.0 上没有智能合约与Dapp。



一个健康的区块链社区,不能只有官方的 solc 编译器,要给社区提供多种选择。就像以太坊的客户端也不能只有 Geth 一个。关键时刻,是看似“多余的” Parity 客户端拯救了以太坊。



活跃的社区



2019年,日本大阪,DevCon5,以太坊面临着史上最难的考试。这是宣布从 PoW 机制转向 PoS 机制的第一次开发者大会,以太坊社区交出的考卷万众期待。来自社区的编译器 SOLL 率先完成了将 solidity 源代码编译成 Ewasm 字节码的任务,这比以太坊官方的 solc 的进展要快得多。





(Second State 团队正在给以太坊团队 demo SOLL )



“项目方”团队之外的社区力量,让我们看到了不一样的编译路径:从 Solidity 源代码到 LLVM,再到 Ewasm 字节码。



LLVM,被认为是编译器的宠儿。Apple 的 swift 语言使用 LLVM 作为编译器框架,Rust 使用 LLVM 作为工具链的核心组件,C++ 编译器Clang 是一个基于 LLVM 的项目,Kotlin 也使用了LLVM 的原生代码。



但这样备受主流语言喜爱的 LLVM 框架入不了以太坊基金会的法眼 — Not invented here 是一种病。对于以太官方来说,YUL 才是真爱,即便速度会慢一点。



开源社区为以太坊的ETH 2.0 大考交上了不同的答卷,这答卷绕开了标准答案 YUL 与 Solc,但包含了主流的 LLVM。



前文提及的SOLL 编译器就是其中一个答卷。DevCon 5,SOLL 编译器就完成了 solidity 源代码到 LLVM 再到Ewasm 的编译路径。与当年救了以太坊的 Parity 一样,这个路径并非以太坊官方团队的设想,但实现了目标:将 solidity 源代码编译成 Ewasm 合约。



SOLL 交上来的作业论证清晰,还是第一个上交答卷的,但这解题过程却有些偏离正确答案。



4月底,第一次开门迎客的 Solidity 峰会上,SOLL 在 LLVM 框架的基础上,又一次交出了自己答卷,发布了 0.1.0 版本。SOLL 编译器通过了 YUL 的绝大部分标准测试用例(test cases),支持将 YUL 源代码编译成 Ewasm 字节码,并部署到 Ewasm 虚拟机上。





这是 SOLL 编译器为了得到认可做出的折中方案。YUL 与 LLVM 并驾齐驱,既保留了自己对 LLVM 的坚持,又贴近了以太坊的官方标准答案。



但LLVM 这条路从来不缺对手,Solang 编译器也正在用 LLVM 实现从 solidity 到 ewasm 的编译路径。



ETH2.0 何时正式上线不可知,可预料的是,相较 ETH 1.0 时代,在 ETH2.0 时代,以太坊社区起码在编译器这道题上将面临着多选题,而不是唯一的标准答案Solc。



区块链世界是万万不能择一而终的,选择越多,越让人放心。



发布于: 2020 年 05 月 14 日阅读数: 54
用户头像

Michael Yuan

关注

软件正在吃掉世界 2018.12.27 加入

服务端的 Rust 与 WebAssembly

评论

发布
暂无评论
前浪的经验:区块链软件,一定也要去中心化