作者:Steven Pu
本文,我们将介绍如何运用区块DAG拓扑结构,并结合权益证明机制(PoS)来解决吞吐量和安全性的平衡问题。
要包容
单链拓扑结构的一个主要限制是网络一次只能接受一个区块,如果网络能同时接受多个区块的话会有什么效果呢?一方面它能增加处理中的交易数量,另一方面能尽可能减少在网络丢弃所有仅留一个分支时单链拓扑所浪费的资源。
有向无环图(DAG)的一个示例
为了展现这个更具包容性的方案,我们选择创建一个图表,而不是线状的链。大家可能没有意识到,虽然大部分人认为区块链是线状的,但像比特币、以太坊这种传统单链实际上是由分支构成,且看上去更接近树状,而非线状。这种类型的树状结构也是图表的一种,说的再具体些,就是一个有向无环图(DAG)。
「DAG」这个词听起来很复杂,但也就是名字比较特殊,它表现的涵义其实就是:
图表中的区块(数学里称为「顶点」)是相连的。
这些连接(数学里称为「弧」)是有方向的,比如区块A指向的是区块B。
任选一个区块并沿着所指的方向走,无论哪条路径都不会回到同一区块——也就是说图表中没有闭环。
要环保
工作量证明机制(PoW)不一定是所有单链的特征,但许多单链网络,例如比特币、以太坊,通常会将其作为共识算法的重要组成部分。在这样的机制中,节点通过解决加密难题来获得出块资格,本质上就是一种去中心化彩票。
但是,这种看似简单而优雅的方法,其实非常耗电。剑桥大学的数据显示,仅比特币网络每年就能消耗逾60太瓦时(TWh)的电力,超过了瑞士全国每年的能耗总量。Taraxa 希望能通过从PoW到PoS的转型来避免消耗这么多能源。
在PoW机制中,出块的特权来自于外部资源的投入,包括昂贵的定制硬件和大量电力。而在PoS机制中,出块资格由内部资源决定,即账户的持币量。不过两种方案的核心经济动机是相似的,投入大量资源的参与者不会做恶或者破坏网络完整度,否则网络整体价值就会降低,他们自己持有的币也会贬值,未来收益也会减少。
但没有免费的午餐
包容与环保固然重要,但天下没有免费的午餐,尤其是工程界。下面我们来谈谈做这些设计面临的一些问题。
问题 #1:排序
在单链中,两个块之间不存在相对排序的问题,因为每个区块都是线性排列且有明确的父级。而在区块DAG中,我们只能确定某个区块子集的相对排序,其他排序是不确定的。这种叫做部分排序,在区块链中,是完全不能接受的。
蓝色:清晰的相对排序;橙色:模糊的相对排序
在上图的演示中,我们可以看到蓝色区块的相对排序很清晰,因为区块都是直接或间接连接着的。如果区块A指向区块B,那就必然意味着区块A在创建时就知道区块B,因此区块B一定是在区块A之前出现。但是,在同一张图中,橙色区块的相对排序就比较模糊,因为区块之间没有直接或间接连接。
所以,最终就是有些区块有明确的相对排序,而其他没有。
我能插个队吗?
但是,为什么排序这么重要呢?因为通常情况下,在处理链上交易时,按照不同的顺序去处理交易会产生截然不同的结果。举个例子,假设A现在有一个币,然后我们来进行下面三种交易:
A发送一个币给B
A发送一个币给C
D发送一个币给A
按照不同顺序处理这三笔交易会产生不同的结果,例如:
按照顺序(1,2,3):交易1成功,交易2失败(因为A没有多余的币了),交易3成功
按照顺序(2,3,1):交易2 成功,交易3 成功,交易1 成功
区块链中,排序是需要网络达成共识的一个非常重要的属性(可参考之前撰写的区块链入门文章),所以只实现部分排序是不可接受的。
问题 #2: 随机性与延迟
放弃PoW机制也就意味着放弃所有相关功能,这里我们来重点讲下两个功能:随机性与延迟。
随机性是指PoW机制随机选择节点出块。当然这个“选择”节点的过程并非由某个中心实体完成,而是全凭运气,看哪个节点在什么时候先解决难题(在算力相当的情况下)。
为什么说随机性重要?因为区块生产者需要随机挑选,如果不是随机挑选而是在出块之前就公之于众,那他们就有可能成为攻击、行贿及其他恶意行为的对象。此外,区块生产者本身也会有很大动机去行骗或者暗中勾结,谋求私利——例如,把他们自己的交易安插在其他人之前,试图创造分支实现双花等。因此,随机性能够让网络更加公平,更加诚实。
延迟指的是解决PoW难题所花费的时间,比如比特币的平均解题时间是设置在10分钟左右。这种延迟能够控制网络出块的频率。放弃PoW机制后,我们需要寻找其他方案来制造这种延迟。
可我们为什么需要延迟呢?首先,没有哪个网络可以无限处理多个区块,因为每个节点都会耗尽带宽、存储空间、内存或者CPU,而无论哪种资源短缺都会是出现瓶颈的首要因素。其次,也没有无限数量的交易要打包到无限数量的区块中。理想情况下,网络生产的区块数量和每个区块的交易数量应该根据网络条件动态调整,但任何情况都不应该出现零延迟。
问题 #3: 区块效率
通过打包列队中待处理的交易来生成区块
当节点生成区块时,它会决定网络接下来要处理哪些交易。在任意特定时间里,网络中的每个节点都会维护一个待处理交易列表——这些交易已经发送到网络中但尚未打包到区块。新区块生成的时候,节点会查看这个待处理列表,并选择一个子集打包进区块。随着时间推移,不同网络在挑选交易时形成了不同的惯例,其中大多数是受经济激励驱动。
在任意特定时间里,如果网络或节点未出现严重问题,那所有全节点看到的待处理交易列队应该是差不多的。因为区块链系统是一个点对点网络(P2P),像交易和区块这种重要信息会不停流传(通报)到网络每个节点上的,且延迟非常短(以秒计)。因此,在任意特定两个节点中,会有一部分交易一方听说了而另一方没有;反之亦然,他们也会收到类似的一组交易信息,且创建的待处理交易列队也会差不多。
如果每个节点看到的都是差不多的待处理交易,那么要求他们生产区块的话,会生产出涵盖相似交易的区块,或者就是彼此相似的副本。显然这不是我们想要的结果,区块间的冗余交易只是在浪费精力——这一点都不环保。
标签: 区块
②文章观点仅代表原作者本人不代表本站立场,并不完全代表本站赞同其观点和对其真实性负责。
③文章版权归原作者所有,部分转载文章仅为传播更多信息、受益服务用户之目的,如信息标记有误,请联系站长修正。
④本站一律禁止以任何方式发布或转载任何违法违规的相关信息,如发现本站上有涉嫌侵权/违规及任何不妥的内容,请第一时间反馈。发送邮件到 88667178@qq.com,经核实立即修正或删除。