分片技术能否破解以太坊寒冬之危?
摘要: 总体来看,Shasper(Sharding+Casper)方案的实现难度是很高的,目前也还有很多的技术细节没有最终确定,可能会有一些变数,包括经济模型的设计(各个参与方的奖励比例、具体的惩罚机制、PoW 链奖励的削减方案等等)。
“以太坊之年”驳议
有人认为今年以太坊的分布式应用 DApps 将主要解决扩展规模障碍,2018年将是“以太坊”之年。但醉心以太坊技术的“老程序员”杨镇表示并不同意这种说法:
以太坊目前的版本拜占庭(BYZANTIUM)在 2017 年 9 月就已经上线。2018 年里以太坊没有任何大的修改或者增强,Solidity 编译器有小版本升级,但没有太大区别。
以太坊从诞生开始就可以认为是一个理想主义的实验性的平台:不过多地人为干预,让生态中的参与者自发地去进化;重大决策过程也会考虑普通参与者的意见;以太坊社区对理想的坚持,应该得到尊重和赞许。以太坊是世界上第一个智能合约平台,也是目前对开发者最友好的、生态最健全的智能合约平台,所以它的地位,短时间内依然不会被撼动。
不过以太坊团队自身工程能力的欠缺也已经不是什么秘密了;从 2016 年 Gavin Wood 博士的离开开始,以太坊早期的核心开发团队绝大多数已经离开了以太坊社区。而把所有计算都放到一个单线程(单进程)的“世界计算机”上是不是一个正确的、有效的方法,恐怕也已经早有定论(从软硬件工程的角度,分层架构是必然选择,这也已经是业内共识)。只是以太坊已经成为一个成熟的生态,要修改它,代价过高,所以需要格外谨慎。
杨镇认为 V 神对于以太坊的坚守大概是外界看好它的最主要的原因,而以太坊的 research 团队的水平也是可以期待的。这也让我们有理由相信以太坊社区在未来一两年之内能拿出真正革命性的主链扩容方案,但工程实践上的表现仍然有待观察。
以太坊的问题及解决方案
以太坊发展至今,已经暴露出一系列的问题和矛盾,主要存在着性能不足、治理结构不全面、存储空间剧增等方面的问题,对此杨镇基于对以太坊的深入研究给我们做出了解答。
(1)性能方面的不足,是基础技术决定的。一个分布式全球共识系统,一个单线程的“世界计算机”,性能当然不可能与成熟的中心化技术相比;但就目前的整体计算量和应用普及程度来讲,大概也还并不是致命伤。不过这个性能问题也是目前以太坊社区在主要解决的 layer1 扩容问题,具体地说,就是指正在设计中的 Shasper(Casper+Sharding)协议的实施。
(2)治理方面,一般可以分为链上治理(on-chain governance)和链外治理(off-chain governance)。以太坊社区的风格是不过多地人为干预,除了 EIP(Ethereum Improvement Proposal)之外,并没有成体系链外治理设计。而链上治理,目前以太坊是没有这样的技术机制的;未来基于 PoS 的共识协议(Shasper)实施之后,就可能有一些相应的技术方案来支持所谓的链上治理,但目前这还是未知数。区块链治理的问题也可以看作是一种权衡,我们要选择更相信技术还是更相信人性。
(3)节点数据存储方面。基于区块链系统本身的技术特性,像以太坊这样基于账户模型所构建的基础数据结构,所有账户状态和合约状态都必须要保存在所有矿工节点和全节点上,并通过在网络间传输的区块数据进行验证以达成全网共识,这种设计造成的极度冗余的数据存储方式是必然的,也是必须的;其中确实存在全节点的存储压力问题,而这在最新的轻节点协议中已有相关设计。
未来以太坊在处理大量的历史数据时,会采取一种混合方案。一方面,允许全节点对历史数据(超过 1 年以上的交易/区块数据)进行随机丢弃,具体的算法将保证时间越近的数据被丢弃的几率越低;从全网状态来看,时间越久远的数据才有更大的几率在所有节点上都找不到;以此来降低全节点存储的压力,同时会给予全节点一定的奖励以鼓励它们保留历史数据(这个设计在目前是没有的)。
另一方面,也允许用户向全节点“租用”存储空间以保存与用户指定的账户相关的历史数据;即用户可以定期向全节点支付数据存储费用以保证自己账户的历史数据不被丢弃,这可以很简单的通过智能合约实现。通过这样的一种混合方案,以太坊网络将可以逐渐降低/稳定全节点的存储压力。这个方案目前也还只是 draft 阶段,计划中它将会根据 Shasper(Casper+Sharding)协议的实施情况具体排定上线时间。
以太坊社区始终在致力于解决这些已知的问题,但实际进展确实不尽如人意;对此,杨镇也认为应该对社区保持信心和耐心,改进方案的最终结果也值得我们共同期待。
“分片时代到来”,分片技术原理
以太坊性能问题一直为人所诟病,而就在2018年4月,V神发布了一个新的概念验证,演示了如何把分片扩展解决方案“栓在”以太坊主链上,并在Twitter发帖称“分片即将到来”,将大幅提升以太坊交易处理能力。以太坊分片技术意味着区块链技术现在发展得更加多元,其可扩展性带宽问题可以在2020年之前得到解决。
有人称“分片”是智能合约发明以来的最大突破。对此,杨镇也做了技术性的解读。
所谓分片,是指以太坊主网扩容的技术方案,英文是 Sharding。请注意这是主网扩容,也就是 layer1 扩容。
目前的以太坊主网,其实是相当于一个单线程(单进程)的在所有矿工和全节点上都会运行来达成共识的一个“世界计算机”,它目前的平均 TPS(Transactions Per Second)大概是在 10 这个量级。
分片(sharding)就是把这个单线程的计算机,扩展为多线程(目前的设定为 1024 个线程)计算机,也就是同时可以有 1024 个 shard 链来处理交易;当然,地址/账户状态也就将会分别保存在这 1024 个 shard 链上。
这样做之后,就会产生一个很明显的问题:因为地址/账户已经分散到不同的 shard 链上了,那么不同的 shard 链上的地址之间如何进行交易呢?(这里需要理解的是:Sharding 方案中的某一个用户的账户/地址仅会存在于某一个 shard 链上,而并不是把目前的所有账户/地址拷贝 1024 份)。
目前是设计了一种叫做 CrossLink(可以译为“交叉链接”)的数据结构来把 shard 链的状态变动通知 PoS 主链 beacon 链(大概可以译为“信标链”)。Beacon 链是所有 shard 链的公共主链,同时也是一个基于 PoS 算法的与目前的 PoW 主链协同工作的新主链;而 beacon 链,就是基于大名鼎鼎的 Casper 协议设计实现的。
Casper 有两个版本,一个是 V 神和 Virgil Griffith 做的 Casper the Friendly Finality Gadget,简称 Casper FFG,它是一个 PoW+PoS 的混合共识算法,也是从目前的 PoW 主链向 PoS 主链的过渡时期会采用的技术方案;另一个是 Vlad Zamfir 做的 Casper the Friendly GHOST: Correct-by-Construction,简称 Casper CBC,这大概是未来以太坊最终会实施的链上治理方案(包含了经济模型的重新设计)。
Casper 和 Sharing(分片)在很长一段时间内都是两个独立的项目,由不同的团队在进行研究。在今年 7 月份,以太坊社区做了一个重大决定:将 Casper 和 Sharding 项目合二为一。这是因为在研究的过程中,开发者们逐渐发现它们的相关性其实是非常强的,很多技术细节需要一并考虑设计,所以最终做出了这个决定。这样,以太坊的 layer1 扩容方案,就变成了所谓的 Shasper(Sharding+Casper)协议。
Shasper 协议是一个非常大的改进(创新),本身的技术难度也非常高。目前,其协议设计仅完成了大概 70% 左右,很多技术细节也还没有最终确定。
Shasper 协议目前的设计,已经与原始的 Casper FFG 协议有了一些差别;对此,杨镇也做了概念性的解读。
首先要介绍的是在 Shasper 协议中的一些关键角色和术语,比如validator(验证者)、active validator set(活跃验证者集合)、committee(委员会、活跃验证者集合的一个伪随机子集)、proposer(提案者、生成区块的 validator)、attester(证明人、签发区块的 validator)以及 slot(一个 8 秒的时间周期,供提案者和证明人签发一个区块)、dynasty transition(朝代更迭、即更新验证者集合)、dynasty(朝代、自创世区块开始的朝代更迭次数、也就是朝代序号)、cycle(周期、所有验证者都有机会做出一个证明的的区块跨度)、finalized(定稿)、justified(确定)等等。
Shasper 协议需要在目前的 PoW 主链上创建一个用于锁定 validator 的权益和管理 validator(比如挑选 committee、进行 dynasty transition 等等)的 casper 合约,这是唯一必须的对目前既有主链的修改。
然后,希望成为 validator 的用户,可以从自己的账户向这个 Casper 合约发送 32 Eth 来“注册”,这是个相对民主化的设计(也就是每个地址仅允许、且最多允许用 32 Eth 来进行注册,而不是像最初的设计那样不限制这个权益数额,会使某些拥有大量 Eth 的地址有过大的收益)。之后 Casper 合约会把这些“注册的”地址作为备选 validator 保存,作为当前 dynasty 的验证者集合。当然,Casper 合约里锁定的这部分权益,也可能会基于一定的规则进行扣减,也就是协议级的惩罚机制,比如被证明在“作恶/造假”或者长时间“离线/不做签名”等等。
Casper 合约会为每个 shard 链选择一个 committee 用来在这个 shard 链上签发区块,由 shard 链上的区块所导致的状态变动会通过 crossLink 记录到 beacon 链上。
显然,因为所有 shard 链是并行工作的,它们会各自生成自己的区块来记录交易数据和状态变动;当交易双方的地址不在同一个shard 链上的时候,这个交易就将影响两个 shard 链的状态,而因为它们是并行处理的,交易的打包顺序并不确定,所以与它们关联的 beacon 链上的区块就一定会“分叉”(即在同一时间产生多个 parentHash 一样的区块)。
这里可能不太容易理解,不过我们可以参考目前的 PoW 主链末端的抖动问题:在 PoW 算法里,因为所有矿工是并行进行挖矿运算的,那么由于网络延迟的原因,在一个区块时间(16 秒)内就很有可能会产生多个 parentHash 相同的“合法区块”;在分片的情况下也是类似的,1024 个 shard 链是并行进行交易执行/打包的,目前设定的 slot(也就是区块时间)是 8 秒,所以因为网络延迟的原因,必然会在它们的公共主链 beacon 链上产生 parentHash 相同的合法区块。
Casper 协议,本质上是一个“提案算法(proposal mechanism)”,是用来在同时发生的多个提案所组成的区块树中选择主分支或者“权威链(canoncial chain)”的一种共识算法,它也是一种对 BFT(拜占庭容错)算法的改进。当然,实际的算法比这里描述的要复杂的多,其中的技术细节同样也非常多。
总体来看,Shasper(Sharding+Casper)方案的实现难度是很高的,目前也还有很多的技术细节没有最终确定,可能会有一些变数,包括经济模型的设计(各个参与方的奖励比例、具体的惩罚机制、PoW 链奖励的削减方案等等)。按照目前的计划,该方案将于 2020 年上主网,但两年的时间可能会发生很多事情,社区的工程能力也是令人担心的。另外这个方案本身的实际效果如何,大概也只能等到上线之后才能进行评估。
(作者:矩阵数字经济智库,内容来自链得得内容开放平台“得得号”;本文仅代表作者观点,不代表链得得官方立场)
评论(0)
Oh! no
您是否确认要删除该条评论吗?