然后,我们就非常迅速地取得了一系列重大进展。在这段时间,我们在很多不同的研究领域都有所收获:一些是围绕权益证明、希望让我们的共识层更加高效的;一些是围绕可扩展性,希望让我们的基础层共识可以分片;一些是尝试提高虚拟机效率的;还有一些是围绕账户抽象的,账户抽象可以让用户自己选择要使用哪种签名方案,这样可以获得后量子时代的安全性,并且让隐私解决方案变得更简单;还有围绕协议层经济模型的。当然所有这一切都还在生长。
Casper FFG
在 2017 年伊始的某个时间点,我们开发了一个协议,并且起了个谦虚的名字:最小罚没条件(Minimal Slashing Condition)。最小罚没条件转化了 PBFT 类型的传统拜占庭共识;在 80 年代,Lamport、Shostak 等人便创建了同类的材料,但我简化了算法并把它放到了大多数区块链的环境中。
基本的观念如下:在一条区块链上会不断产生新的区块,你可以通过连续的合并和观察来获得一种流水线版的效率:每一轮开始时你都会为本轮添加数据,而在下一轮中人们可以确认这些数据中的一部分;我们可以从中获得巨大的效率提升(译者注:此即 FFG 的核心思想,一旦在某轮中某区块获得 2/3 的验证者同意,该区块的父块便被敲定)。
一开始的最小罚没条件有 6 条,然后我减少到 4 条,而一年后,我们终止合并 prepare 和 commit,这便是 Casper Friendly Finality Gadget(FFG,友好的确定性小工具)。
分片
上一年的 Devcon 上我演示了这种新的分片设计,就是保持主链不变,然后创建分片作为某种意义上的 Layer-2 系统挂载在现有的主链上,确认足够可靠之后再升级成为 Layer-1。
Casper CBC
然后是来自 Vlad 的 Casper CBC ~ 论文。
Casper FFG POC
泰国时间 2017 年12 月 31 日 23:40,那时候我们恰好在泰国,Casper FFG 概念验证横空出世。那时候我们真的非常想确定,一种 PoW/PoS 混合共识的技术详述到底是什么样子的,而这一种混合共识会使用一部分来自 Casper FFG 中的观念,还有一部分传统拜占庭容错共识所启发的观念,并加载在现有的工作量证明链上。这会是一种可以让我们快速转向混合共识的机制,并且对现有区块链造成的冲击也最小,然后理论上我们将有可能升级为完全的权益证明。
我们同样在这条路上走了很远,我们还做了一个 Python 测试客户端,用不同的 VPS、服务器和电脑通信来做测试。
Shasper
与此同时,我们在分片上也取得了许多进展。我们不断完善分片的技术详述,最终我们在 18 年 3 月的台北组织了一次集体休整。在这里很多想法开始冒出来,如何实现一条分片区块链看起来变得明朗起来。对,看起来变得明朗起来。
在 6 月份,我们做了一个非常困难,但我个人认为从长远来看非常有价值的决定。我们发现:咦,这边我们有几支团队在实现混合权益证明,他们试图将 Casper FFG 开发为一个现有链上的智能合约,对分叉选择规则做调整;另一边,有几支完全隔离的团队,要开发一个验证者或者说管理者合约(后来被重命名为链上分片管理者合约),在这个基础上开发分片系统;他们之间是没有交流的。在分片这一边,最终变得越来越清楚的是:让分片系统的核心放在 PoS 链上会给我们带来更高的效率;变成 PoW 链上的一个合约,我们就不得不处理 EVM 的开销,应付 Gas 机制,应付不可预测的 PoW 区块时间;PoS + 分片 可以带来更快的出块时间等一系列好处。
然后我们就意识到,为什么这边有个团队在开发 PoS,那边又有一个 PoS 项目?为什么我们要做重复工作呢?然后我们决定要把两边的工作合并起来。这个决定给之前的许多工作判了死刑,但意义深远:我们会在一起工作,开发同一份技术说明,同一个协议,而我们可以同时让 Casper PoS 和分片相得益彰。
总而言之,与其这边有一个目的,那边有另一个目的,然后我们要努力分辨如何合并两边的成果,我们还不如在起点上多花一些时间,然后走向一套权益证明和分片区块链。(掌声)
其它
与此同时,我们花了不少时间讨论分叉选择规则,最终我们越来越接近也越来越深入地理解分叉选择规则;GHOST 算法虽然一开始是为工作量证明设计的,但因为一系列原因,我们重新提议用于权益证明。
Justin 开始研究可证延迟函数(Verifiable Delay Funciton,VDF),我们在斯坦福有个工作室,Justin 一直在跟那里的许多研究者合作。
关于如何实现抽象和租金,我们也形成了更多想法。因为一些理由,我们决定将存储租金重命名为存储维护费。
在研究方面,我们正在研究跨分片交易,比如 csoss-shard-yanking,我们是普遍化传统分布式系统中的一些概念,用到异步的跨分片环境中;还有资源定价的论文,包括最优化费用市场,如何收取存储维护费,不同设计之间的权衡。Casey 还写了这篇文章讨论同步假设下的跨分片交易。当然,CBC 的研究也扩展到了,分片领域,对了,这个真的不叫 Valding,Vlad 很讨厌这个词。还有开发,我们在以太坊 2.0 开发推进中使用的策略是:追求创造性的多客户端去中心化开发。这不仅仅是因为我们有去中心化的追求,这也是一套非常实用的策略,就是打赌别的团队都不会有你干得漂亮;此外,上海事件让我们醒悟,如果某个客户端出了问题而别的客户端没有,整个网络可以更好地运行;顺便,还让整个生态系统的开发更不依赖于基金会本身。基金会真正开发的客户端是 Python 客户端,Python 在性能上有内在的限制,这也给了大家激励去运行由 Prysmatic 创造的客户端、Lighthouse、Status 还有 Pegasus 以及其他如雨后春笋般冒出的团队开发的客户端。