Parity 中国工程师唐威聊以太坊 2.0 开发经验 | Parity 人物专访系列
加入 www.polkaworld.org 社区,共建 Web 3.0!
唐威(GitHub,Twitter)在线上最标志性的是他的 ID @sorpaas,这是一个逻辑语复合词,大致意思是“许多希望”。他的 ID 伴随着一个宁静的头像 —— 一座岛上矗立着一座房子和一棵树,这是宫崎骏著名的动画电影 “千与千寻” 中的一幕。
唐威从 2018 年开始在 Parity 团队工作,当时他为 Parity Ethereum 实施君士坦丁堡的改变,并参与了硬分叉过程。他还为 Parity Ethereum 制定了最初的 Casper 提案(EIP-1011),旨在使以太坊 1.x 成为混合 PoW/PoS 区块链。后来他开始在 Substrate 区块链框架之上构建以太坊 2.0 信标链实现,从而产生了当前的 Parity Shasper 客户端。
唐威的同事经常高度评价他,尤其是赞美他的产出能力。虽然唐威声称自己没有高产出的秘诀,但我很高兴收集到更多关于他对 Ethereum 2.0 的 ConstantiNOple 开发过程的看法,以及对区块链技术的期望:
你曾是 “以太坊经典” 团队的成员。你是如何参与进来的,你的经历又是怎样的?
在我大学的最后一年,我花了一些时间来编写 Rux —— 一个 Rust 编程语言的微内核。我喜欢在开源社区工作,而从 Rux 开始,我就对 Rust 非常着迷。因此,当我从朋友那里看到一个用 Rust 编写开源 EVM 实现的工作机会时,我立即申请了。我花了几个月从头开始编写 Rust EVM 实现(称为SputnikVM),进行测试,并将其集成到 Geth 中。我在那里有一个非常积极的经历,尽管与以太坊相比,那边的社区规模较小。
后来我加入 Parity 团队也是出于同样的原因 —— 我可以做使用 Rust 编写的开源项目!
您是 EIP-1283 的作者,并在 Parity Ethereum 中实施君士坦丁堡硬分叉转换。当硬分叉延期时你的体验是怎样的?
我认为重复的 bug 对于参与君士坦丁堡工作的每个人来说都是一个艰难的一课。问题是在硬分叉前 36 小时发现的,需要所有核心开发人员的快速反应,也确实给我们许多人几个不眠之夜。
我从中学到的重要的一课:仅仅考虑 EIPs 本身的健全性是不够的。整合的过程 —— 规范如何与客户端实现,与终端用户(合约开发人员)交互同样重要。在未来,我们还必须更加重视审查 EIP 的潜在向后兼容性问题 —— 我发现当大家讨论伊斯坦布尔硬分叉时,这一点还是偶尔会被忘记。
除此之外,在软件工程中,避免 bug 的一个重要方法是设计一个令其中某些类型的 bug 不会发生的框架,例如使用安全的 Rust 语言编程,这可以防止内存安全问题。对于以太坊规范而言,这意味着我们可能需要更多地考虑诸如帐户版本控制之类的更改,这完全消除了许多类型的向后兼容性问题。
遵循以太坊 2.0 规范的变化是什么感觉?
我自己感受很深,也经常听其他以太坊开发团队说到的一点是:以太坊 2.0 规范已经改变了很多。是啊,它们确实改变了很多!
我们的 “以太坊 2.0” 的第一个版本是直接在 Parity 以太坊 1.0 上做的 Casper 区块确定工具。我记得我们是最早实现它的团队之一,我们甚至还有一个测试网。遗憾的是,在现有版本之上添加 Proof-of-Stake 共识的设计复杂性,以及 EVM 性能问题,使我们完全放弃了这些努力,转而追求在一条全新的链上构建以太坊 2.0。
我们在 Parity 实现的下一个版本是 “Casper 2.0” 规范,这需要完全重写。从这一版起,我们开始基于 Substrate 区块链框架做东西。事情开始变得更加正式,下一个版本是 “Serenity 0.1”,这是另一个需要几乎完全重写的版本。我们没有赶上那个版本,当我们完成所有更改后,我们处于 “Serenity 0.4” 了。从这一点开始,规范终于开始变得更加稳定,接下来的三个版本(直到“Serenity 0.7”)实现起来变得更加容易。
我当然不会建议大家重写三次规范!但是,这不是责怪任何人或是说某些地方出错了。对于区块链行业而言,我们都没有经验 —— 我们有很多独立团队,在以太坊 2.0 上同时进行着许多不同的功能实现和许多不同的编程语言的实现。这也是我认为之前其他区块链可能没有遇到过的事情 —— 比特币使用 “以实现为中心” 的规范;启动时的以太坊只有两三种不同的实现方式;而大多数其他区块链只有一个实现方式。
我想说这对每个人来说都是一次学习经历,我想我们都已经从规范开发过程中,学到了一些可以在其他地方应用的重要经验。
确保在复审前有一些规范!允许所有相关团队审查 “粗略规范”,似乎是确保所有相关编程语言中的数据结构和特定操作都相对容易实现的最好方法。
使这些规范可执行!这证明不仅有助于确保您始终进行有效的更改,而且还有助于生成测试。
从可执行规范中生成测试,并尽早生成它们!测试是确保不同实现具有相同结果的最佳方法之一。我们越早进行测试,早期的实施团队就可以更容易发现问题。
不要重构规范。如果您想重构规范,就要做出完整的版本,并使旧版本和新版本等效!我们这样做是因为不同的实现方式使用不同的内部结构或缓存来表示事物。当我们重构规范并混合变化时,实际的真实变化在所有重构中都难以发现。有一个专门用于重构的版本,肯定会让每个人的生活更轻松,并大大提高所有实施团队的生活质量。
有没有什么你希望看到以太坊或区块链技术演进的方向?
我真正希望在以太坊社区看到的一件事,是探讨下我们是否能够找到更多技术解决方案来解决当前我们所面临的社会问题。毕竟,区块链本身就是社会问题的技术解决方案。我们的大多数核心开发人员都同意执行硬分叉是很难的。我们可以设计某种信号指令来解决方案来简化流程吗?规范审计和代码审查既困难又昂贵,我们是否可以设计模块化的客户端框架,以使任何链上 bug 变得没那么危险?我相信这两个问题的答案都是肯定的,但我们需要花些时间提高社区意识,让人们知道这是可追求的。
对于以太坊客户端,我们应该探索更多能定义更常见接口的方法,并使组件实现可交换。当我们有多个实现时,我们可以做的一件比较好的事情,就是将不同团队的组件组合在一起。例如,我们可以运行 Parity Ethereum 的状态转换功能,使用 Geth 的 JSON-RPC 端点构建,并用 Aleth 的网络堆栈包装它。除了允许用户拥有更广泛的实现选择外,这也有助于使网络更可靠。考虑到我们可以让一个客户端运行 Parity Ethereum 和 Geth 的状态转换功能,然后我们要求客户端(如果作为一个矿工运行)只出那些通过了两个状态转换功能的区块。有了这个,协议上的 bug 将会不那么危险,并且更不可能导致共识分裂。
您是否有通过区块链技术建立更美好社会的愿景?
我认为区块链是 “构建开放和去中心化的互联网” 这个更大运动的一部分。开源允许用户自由使用和修改软件,开放标准允许实现自由地符合规范,联合的和点对点的软件将数据的完全控制权返回给用户。这些都是开放和去中心化互联网的重要哲学。我从区块链技术中看到的是,它通过对开放治理、安全性和在无信任环境中工作的高要求,真正放大了这些哲学的优势。
在 Parity 团队工作是什么感觉?
与传统公司相比,在 Parity 团队工作真的感觉更像是为开源社区工作。你先了解团队当前的愿景并知悉其目标,然后您只需选择最适合您的方式来实现这一目标。管理层是扁平的,技术决策总是基于最佳的集体判断,而且您几乎总是可以自行选择当天要完成哪些工作!
请继续关注更多 “Parity 团队成员” 专栏。订阅新闻简报(https://www.parity.io/newsletter/),来了解新文章、技术发布和活动。
翻译:Jack (PolkaWorld 超级探员)
原文:https://www.parity.io/people-of-parity-wei-tang/
本文的主人公唐威(Wei Tang)将在 9 月 21 日来到杭州出席波卡中国行,快扫下面海报的二维码来和他面基呀~
点个 “好看” 让更多人看到吧!