乐读窝

区块链浪潮:连接技术与应用

乐读窝 > 科普学习 > 区块链浪潮:连接技术与应用

第3章 数据结构

书籍名:《区块链浪潮:连接技术与应用》    作者:贾英昊



3.1  分布式账本


在传统的账本系统中,所有用户的交易信息都写在同一个账本上,由此来保证用户之间不出现冲突的交易信息。而这个账本的记录、检索一般交由可信任的第三方机构进行(如银行)。在这类系统中,所有用户向第三方机构支付信任费用,由机构保证账本不被恶意篡改。这是一种中心化的体系,好处是机构可以集中处理大量交易信息,但同时所有交易行为都不得不经过机构的处理,用户在一定程度上将受到机构的控制。

而区块链技术则提出一种分布式账本的架构,把第三方机构从系统中剔除,让人与人之间可以直接进行交易。区块链的解决思路是让所有用户都拥有一个账本,所有用户都参与到记账的过程中。然而这样也带来一个问题:如何确保所有用户拥有的是同一个账本?如何保证账本信息的一致性?

在区块链中,交易信息是向全网络广播的,每个节点都能接收到交易信息。由此,账本信息的一致性问题,实际上变成一种“唯一性”问题,只要设计一种规则,确保只有唯一一种交易信息能通过筛选保留下来,即可保证各个用户记录下来的是同一种信息。

而“区块”和“链”就是实现这种唯一性的数据结构。



3.2  区块和链


区块存储的是一段时间内的交易信息,实际上是对交易信息的一种封装;在比特币里,一个区块可存储约3000笔交易信息。一旦这个区块被确认,3000笔交易就一同被确认了。如果不对交易信息进行封装,每次确认一笔交易,则需要高频的确认操作,效率较低。

每个区块包含指向上个区块的地址信息,如此环环相扣,形成从最新区块到创世区块的一条“链”。不同的共识机制,提供不同的方案来产生新的区块;有时候,同一时段内有可能产生  2  个(或更多)内容不同的区块,这就是“分叉”(图3-1)。不同的区块之后,各自又会产生新的区块,而使各个链条有所延长。但一般而言,链条延长的速度是不同的。绝大部分区块链项目都遵循“选最长链作为主链”的规则,这一规则可保证即便出现分叉,在一定时间后,总能有一条链条是公认的“主链”(图3-1)。

图3-1  分叉示意图

由于最长链是唯一的,所有用户都将把同一链条记录在本地数据库上,这就保证了账本的唯一性,也就解决了账本一致性的问题。

此外,链式结构还带来一个好处。所有的区块都通过“链”连接在一起,形成了一个紧密的整体。如果黑客想要篡改历史上的某笔交易内容,则需要篡改交易所在的区块;黑客无法创造一个新的区块并直接进行替换,而需要把从这一区块直至最新区块的整个链条都重新替换(在比特币中,也就是从需要修改的区块开始重新挖矿,连续挖出此后的所有区块,并在进度上最终超过其他所有矿工,创造一条新的最长链),代价高昂。由此可避免篡改交易等攻击。

然而这种数据结构仍然存在问题:数据处理能力较低。在区块链中,为了避免存在冲突的交易信息(不允许持续分叉),也为了保证账本的一致性(需选出唯一的链),区块链采用的是最长单链结构。由于每次只能新增一个区块,在P2P  网络中,区块信息的传播、确认需要时间,而区块的容量有限,这就使得一段时间内,能记录的交易信息存在上限。可见,“数据处理能力低”实际上是满足一致性要求而付出的代价。目前比特币区块链平均一秒只能处理约  7  笔交易,与中心化的电子支付系统存在较大差距。



3.3  并行处理的探索


为解决数据处理能力低(交易吞吐量小)的问题,一个重要的思路是让多笔交易同时并行处理。侧链技术通过对主链上的款项进行锁定、解锁的操作,可把不同的区块链进行连接(图3-2),扩充了交易处理的空间。而分片的思路则是把用户划分为不同的片区,每个片区里的交易可以独立验证、并行进行,而跨片区之间的交易则需进行额外处理(图3-3)。在侧链、分片技术中仍存在主链,两者均是通过限制交易的灵活性(如款项被冻结、交易的对象受限等),在保障安全的前提下,满足账本的一致性。

图3-2  侧链示意图

图3-3  分片技术示意图

而另一方面,DAG(Directed  Acyclic  Graph,有向无环图)则是对另一种数据结构形式的探索。在一般的区块链项目中,所有节点保存的信息都是相同的;而采用DAG技术的项目,则允许各个节点保存不同的信息。在DAG中,区块可以随时产生,而一个区块与多个父区块进行连接(图3-4)。这样一来,所有人可以随时记账,交易信息的记录速度大为提高。

图3-4  DAG示意图

然而由于多个区块同时产生,且均有效,DAG  无法以“唯一最长链”来保证一致性。在这方面,有的项目以“历时性”来保证  DAG  上账本的一致性。具体而言,在  DAG  中一个新区块将随机选择两个次新的区块进行连接,同时对与之相连的所有区块进行交易信息的验证。经历了多次验证的区块,其交易内容存在冲突的可能性很低,可被认为是已确认的交易信息。这一方案里,一致性的验证依赖于区块网络的延伸和增长。

其他项目则以“全连接”来保证账本一致,即每个新的区块都与之前所有区块相连,并验证此前的所有交易信息。还有的项目以“次序”来保证一致性,由区块递归投票来确认新的区块等。

DAG  带来吞吐量的提高,然而“一致性”始终是个有待解决的复杂问题,目前问题的解决都需要付出一些代价:可能是交易信息的确切验证时间有所延误;也可能是节点与节点之间需要进行大量的网络通信,使得实际交易速度仍有待观察。

归根到底,分布式账本的“一致性”问题,是一个平衡的问题。不妨说“一致性”是一个系统目标,而达成这一目标需要付出相应的资源,因此或牺牲交易速度,或限制交易的灵活性,或延后确认时间,或提高对全网的传输要求,都是不同系统条件下进行的适应性选择。相信上述提及的不同技术,将在不同的应用场景下,得到进一步的探索和验证。