程序员

LINIX协议技术焦点— 基于有向无环图DAG的数字账本系统的偏

2019-03-26  本文已影响0人  Noah6666

原文🔗:https://medium.com/linixfoundation/linix-protocol-technical-spotlight-partial-order-in-directed-acyclic-graph-based-digital-ledger-66f81f705e02

有向无环图,简称DAG,是一种自然产生的数据结构,在数学和计算机科学中有许多应用,包括从任务调度、网络流和集成电路板设计等。

近年来,DAG被认为是一种数据结构,可代替区块链实现去中心化的数字账本系统。

DAG是不存在环路的有限的有向图。区块链实际上是一种特定的有向无环图,其中每个顶点只与另一个顶点相连,在形状上形成一条线性链;在这个意义上,DAG可以看作是区块链结构的概括。

当前状态

现有的基于DAG的数字账本的主要内容有:发出交易,参与节点必须批准之前发出的未经确认的交易。在提议新交易时,可假定参与者节点正在执行工作,验证新交易并将其与之前的交易相链接。如果节点发现某个交易与图表的历史记录冲突,则不会以任何方式(直接或间接)批准冲突交易。

然而,目前基于DAG的分类账存在着根本局限性。

LINIX 协议

我们试图通过LINIX协议提出一种全新的去中心化,去信任的框架来处理加密货币交易。该框架利用了部分DAG和规范状态矩阵链(State Matrices)的混合拓扑。这种体系结构比传统的区块链技术具有更大的可扩展性,它允许参与节点以高速率并发处理交易,仅受网络约束和计算能力的限制,同时对大多数攻击方法具有拜占庭容错。

Figure 1: Example DAG

符号和定义

在深入讨论之前,我们需要介绍一些基本的图论和集合论的概念。

图G由顶点集V(G)和边集E(V)定义。有向图(directed graph或digraph)是所有边都从一个顶点指向另一个顶点的图。

包含在一条边中的两个顶点,或由一个顶点连接的两个边称为adjacent邻边;一条边和其中包含的顶点称为incident。Incidence 和adjacency 矩阵是表示图的有效空间方法。

图的子图G是图H: V (H)⊆V (G),E (H)⊆E (G)。

图G中v的邻域是由v附近所有顶点毗连的G的子图,用N(v) = {u|uv ∈ E}表示。

v的次数是d(v) = |N(v)|。对于有向图,指向v的边的度数称为v的入度(indegree),指向外的边的度数称为出度(outdegree)。

无法获取全局状态信息.

与传统的基于区块链的分类账不同,DAG分类账中的网络参与者在任何给定的时间点上都不一定能够方便地访问整个分类账的全局视图。相反的,参与者节点只需要拥有图中一部分的状态信息就可以提出新交易。另外,了解全局状态意味着要牺牲DAG分类账相对于传统区块链在可扩展性方面的优势。

然而,如果不了解全局状态,就不可能在不造成双花攻击漏洞(double spending)的情况下对网络进行安全分片。攻击者可以轻易地在不同分片上呈现交易,由于这些分片之间没有共享试图,交易会对所有分片生效。随着DAG的不断扩展,分片之间重叠的机会会减少,问题会加剧。

可能的解决方案是在部分节点上存储全局状态的更新试图,然而,这又会带来新的问题。

权限集中. 

一些基于DAG的账本引入了集中权限,如协调者或超级节点,以绕过上述问题。尽管这利于实现正确性并且提高性能,然而却牺牲了去中心化---区块链的基本原则,使网络暴露于受到威胁的中央当局的攻击之下,远低于典型的拜占庭容错(BFT)。虽然这些集中权力机构只计划出现在网络生命周期的初始阶段,然而没有任何证据证明,网络能够在没有它们的情况下运行和保持稳定。即使假设网络可以达到成熟阶段,也总存在部分网络被破坏的可能,并将其恢复到原来的集中状态,从而再次丢失BFT。

缺少终结性. 

由于缺乏严格的交易顺序,存储在DAG分类账上的交易通常无法像区块链上那样实现经济确定性或概率性确定。在DAG分类账上产生的两个交易可能暂时不相关,只通过边缘空间连接,因此,如果竞争的历史具有较高的累积权重,或者在其他的比较中胜出,则图中较大的部分可能会被孤立或抛弃。

由于缺乏确定性,基于DAG的分类账很难转移具有实际生活价值的资产,因为交易一旦在现实生活中获得批准,通常很难逆转。对于多数可能采用加密货币的应用程序和平台来说,保证有效交易的不可逆性和确定性是至关重要的。

集合顺序

集合的一个固有属性是其中元素的顺序。集合可以大致分为以下三种类型:

全序的: 也称为简单阶或线性阶。此时集合中的每一对元素都可以根据二进制关系进行比较,其中一个可以被认为是在前面的。这类排序的例子包括字母集和自然数集。

部分排序的:半序集(也称为偏序集poset)由一个集合和一个二元关系组成,二元关系表示,对于某些元素对,其中一个元素的顺序先于另一个元素。偏序概括了总序,其中每对元素都是可比较的。偏序最直观的例子是按后裔顺序排列的家谱;有些配对会带有亲子关系,可以比较,而在此定义的顺序下,其他对将不可比较。

无序的: 不具有部分序列和完全序列的一组元素称为无序的,其中任何一对元素都不能与定义的二元关系进行比较。一袋不同类型的水果在类型的二元关系上是无序的,因为没有类型自然顺序,但是在大小的二元关系上是有序的。

两个有序集,X和Y,被认为是有序同构的,如果有一个双射函数f: X→Y,使得f和它的逆保持顺序。这样的函数保持单调性,被称为等值线isotones。

分布式账本技术的应用

但为什么顺序理论与区块链技术和分布式账本设计相关呢?主要是因为双花问题(double spending 双重支出)。双花问题可以宽泛地定义为数字货币被重复消费的潜在缺陷。这是是数字货币所特有的,因为数字信息相对容易复制。

比特币协议最大的成就之一是,它在不需要中央机构的情况下解决了双花问题,从而使加密货币成为可行的价值储存手段。比特币和其他传统的基于区块链的账本都按照其区块链的总顺序排列。新挖掘的区块通过默克尔根哈希(Merkel tree root hash)链接到现有的区块,以保持区块链的严格顺序。此顺序之所以可以抵抗潜在的双花攻击,是因为当更多新开采的区块被固定在区块链的尾端时,先前的区块很难在最长的区块链上重写,而在先前区块上所记录的交易则被认为概率性确定了。

然而,这种用于存储交易的严格单链架构给比特币和其他类似结构的账本带来了性能和可扩展性方面的问题。对于既定的链高,一次只能挖掘一个区块,而缩短超过某个临界值的区块所需的挖掘时间,会导致并行创建许多冲突区块,由于冗余计算,性能会大受影响。

为了寻求基于区块链的账本规模化的解决方案,当我们从基于一维链的数字账本转向基于DAG的数字账本时,再次出现了双花问题。因为不可能通过链结构的顺序强制交易的总顺序——而这正是导致基于区块链的账本的底层可扩展性问题的原因。

基于DAG的分布式账本中的排序类型

给定一个通用的DAG(如图1所示),有多种遍历和排序图顶点的方法,因此涉及相同地址的两个交易不能通过二进制关系严格排序。该图通过顶点的命名显示了一种任意的顺序,但是还有许多其他可能的顺序随着顶点的数量呈指数增长(给定一组n个没有其他限制的n项,可能顺序的数量等于n!)

如果交易的顶点集没有顺序,就不可能选择哪个交易应该优先处理,哪个交易在双花攻击下视为无效。这种基于DAG的分布式账本必须任意丢弃冲突的交易,从而导致网络中无法预测的状态变化。

缺乏排序在DAG也意味着整个图都必要的验证交易的有效性,因为没有全局信息,另一笔涉及相同账户地址的未知交易可能存在于图中的某个地方,它可以将涉及相同方的所有已知交易置于冲突状态。随着DAG的增长,对整个图的全局信息的需求将变得非常昂贵,更不用说让这些信息变得触手可及。

拓扑排序: 有向图的拓扑排序是顶点的线性排序,对于从顶点u到顶点v的每条有向边uv, u的顺序在v之前。当且仅当图没有有向循环时,即当它是DAG时,拓扑排序是可能的。

假设所有DAG都可以自然地进行拓扑排序,这是否足以保证在基于DAG的分布式账本中解决冲突交易的排序问题?我们再来看看图1中的样本DAG结构,图中存在多个有效的拓扑顺序,包括:

G, I, H, C, D, F, E, B, A

I, C, G, H, F, D, E, B, A

G, I, C, D, H, F, E, B, A

假设,如果冲突的交易是C和G,或者F和G,那么它们之间仍然不会有固定的顺序,并且无法以一致的方式解决冲突。因此,对于一般的DAG,拓扑顺序可能并非惟一,并且不能依赖于部分排序来一致地解决所有潜在的冲突交易。

Figure 2: Example of a Hamiltonian Path on a planar graph

求哈密顿路径的计算复杂性

事实上,DAG拓扑序是唯一的,当且仅当图上存在哈密顿路径时,它可以作为线性序。哈密顿路径(Hamiltonian path & Hamilton path),指的是位于图中两个顶点之间且只访问每个顶点一次的路径,可被追踪(traceable )。

注意图1中可能拓扑顺序中的最后三个顶点总是E, B, A,这是因为顶点集{A, B, E}诱导的子图包含一个可跟踪的哈密顿路径,因此该拓扑顺序是唯一的。

在四连通平面图、三连通三正则二部图等特定图类之外,寻找哈密顿路径是一个NP Complete问题。在计算复杂性理论中,NP Complete 类问题是在不确定多项式时间内求解的,这意味着虽然已知解可以快速得到验证,但在非指数复杂度下没有已知的求解方法。算复杂度较高,我们不能指望它的自然拓扑顺序是唯一的,因此,我们要构造一个偏序,以保证得到的图的顶点的某些子集是有序且可以比较。

实体关系模型与构造偏序

Figure 2: Example DAG with a Genealogical Partial Order

实体-关系模型(简称ER模型)描述了在特定的知识领域中有兴趣的相关事物。基本的ER模型由实体类型(对感兴趣的事物进行分类)组成,并指定这些实体类型的实例之间可能存在的关系。

通过在图的顶点集上定义一个谱系二元关系,构造了一个偏序,例如:

1. 共享接收或发送地址的顶点是相关的;

2a.相关顶点部分由系谱二元关系排序,因此任何新附加的顶点必须是事务中每个涉及地址的相关顶点的最新一代的子节点;

2b. 顶点的给定地址的生成是由它与起源顶点D(Gs)的距离定义的,在跨越其所有原始顶点的最短唯一路径中;

3. 如果一个顶点在图中没有任何或所有相关地址的现有关系,则认为它是创世纪顶点Gs的后代

4a. 给定一组地址, (a1, a2, a3, ...), 以及相应的代数元组, (GN1, GN2, GN3, ...), 定义队列集, Cohort{(a1, a2, a3, ...),(GN1, GN2, GN3, ...)}, 作为具有相同父地址元组和生成数元组的子顶点集;

4b. 同一队列中的子顶点根据二进制关系是可比较的——具有较早创建时间的子顶点被定义为具有优先级;

4c. 如果队列集中存在多个子元素,则创建时最早的元素将被视为优先级最高且有效,其他所有元素都将被视为优先级较低且可能无效;

5. 不相关的顶点在这个部分顺序下是没有顺序的.

理想属性

在DAG上构造这种偏序结构,减轻了困扰有序度较差的几个问题,并且仍然为我们提供了非线性数据结构的可扩展性。

对抗双花攻击: 通过构造关联交易的偏序,可以有效地解决双花问题。 这种偏序只对需要比较的对施加序,也就是说,如果他们共享相同的接收或发送地址,非重叠方之间的交易可以被同时处理,而不会受到双花攻击。

关系分片: 一种很自然的方法可以根据谱系关系对图进行切分,它可以划分为只包含相关顶点的非相交分区,从而同时验证和检查这些子图。

公共操作无需全局信息:由于前面的属性,图上的大多数常见操作不需要整个图的全局知识。通常只需要跟踪相关顶点的连通子图,该子图将包含用于常见操作(如顶点连接或验证)的所有必要信息。

相关子图的拓扑排序导致遵循依赖关系顺序的相关交易的排序: 计算DAG的拓扑类型有许多快速算法, 通过拓扑排序,这些可以用于计算相关交易的快速验证

关系分片算法可以总结为以下伪代码:

Input: 周期DAG, p, G(p).

Output:G(p)的一组连通子图,由相互关联的顶点划分.

Step 1: 遍历图G(p),删除并处理所有直接连接到Genesis顶点Gs的单例顶点。

Step 2: 删除Gs及其传入边缘集中的所有边缘。

Step 3: 收集G(p)的剩余子图并作为输出返回。

Figure 3: Resulting graph after Relational Sharding of Figure 2

本文介绍了一些背景知识,并概述了为什么order类型是基于DAG的分类账的一个重要内在属性,并描述从LINIX协议构造基于谱系的部分顺序,该顺序具有许多理想的属性。

LINIX技术重点报道系列的下一篇文章将关注平台的另一技术方面。请继续关注!

上一篇下一篇

猜你喜欢

热点阅读