掌桥专利:专业的专利平台
掌桥专利
首页

一种基于DAG结构的区块链系统及共识方法

文献发布时间:2024-04-18 19:52:40


一种基于DAG结构的区块链系统及共识方法

技术领域

本发明涉及区块链技术领域,具体涉及一种基于DAG结构的区块链系统及共识方法。

背景技术

传统的区块链系统,新生成的区块通过包含上一个区块(父区块)的哈希(hash)值从而形成线性的单链结构区块链。这种线性的单链式结构决定了区块容易分叉,而分叉的区块又被认为是无效的,大大限制了区块链系统的交易吞吐量。作为提升传统的区块链系统的一种方法,基于DAG (Directed Acyclic Graph,有向无环图)结构的区块链系统正逐渐被行业所接受。基于DAG结构的区块链系统可以并行连接多个区块,支持任意的分叉,相比单链具有更快的交易吞吐率。

但是,基于DAG结构的区块链也面临一些由于DAG结构所带来的问题。在传统的线性单链结构中,区块都是线性排列的,有明确的先后顺序。而在DAG的图状结构中,只能确定区块的偏序集(partially ordered set),无法得到总有序集(total ordered set)。由于区块链系统中在面对双花攻击、智能合约交易实现等时需要对交易的顺序有明确的确定,因此,在实际的DAG系统中往往需要对交易进行排序。在图状结构的区块账本中(一个区块包含一笔或者多笔的交易)进行交易的排序是一件效率极低的事。此外,在DAG结构的区块链中,区块的父区块的选择具有一定的随机性,可能存在部分区块无子区块的情况,或者大部分区块集中在某些区块之后,从DAG结构的角度,图中会出现大量的短链。而这些短链,根据中本聪最长链准则,短链上的区块存在被篡改的风险,从而导致系统的安全性降低。

目前已有很多基于DAG的区块链系统及共识方法。公开号CN 112202775 B “一种有向无环图结构区块链的共识机制架构及其方法”,该方法通过将最初产生的实体区块进行排序、合并形成逻辑区块,在逻辑区块层面实现共识,在达成共识之后再对区块进行拆分成普通的区块,以降低区块排序的复杂性。该方法本质上在区块的共识之前解决区块排序的问题,并没有降低排序的复杂性。公开号CN 113516557 A “一种有向无环图结构的区块链及其实现方法”、公开号CN 109214795 A“一种基于DAG算法的区块链混合共识方法”、公开号CN 113674095 A “一种基于交易DAG提高区块链吞吐量的方法”以及公开号 CN111080288 A “一种基于有向无环图的区块链共识达成方法及装置”等,均没有解决区块链交易排序的问题,也没用解决系统中存在短链而导致的安全问题。DAG区块链的交易排序效率低以及存在短链的问题主要是由区块账本的DAG结构以及对应的区块链共识方法引起的。因此,如何设计安全有效的DAG结构的区块链系统及共识方法成为亟待解决的技术问题。

发明内容

本发明的目的在于针对现有技术的不足,提供一种基于DAG结构的区块链系统及共识方法。该系统中,节点需要为发起的交易创建相应的新区块,并从更新的本地账本中选择两个先前的边缘区块作为新区块的第一父区块和第二父区块,新区块连接在父区块之后形成DAG结构的区块账本。其中,以账本中与该新区块的业务相似性最大的边缘区块作为第一父区块,以账本中高度最大的边缘区块作为第二父区块。本发明的DAG区块链系统在保留DAG结构优势的同时,针对DAG结构下交易排序低效的问题,通过业务相似性实现不同类型的交易分层,有效提升交易排序效率;同时所有的区块都连接在高度最大的区块之后,增强了区块和整个区块链系统的安全性。

本发明的目的通过如下的技术方案来实现:

一方面,本发明提供一种基于DAG结构的区块链系统,该系统由独立的节点组成,每个节点均能够发起交易、创建区块以及对外广播区块;

所述节点根据功能分为一般节点和专业节点两类;所述一般节点不需要保存区块链系统的全部账本数据,也不用参与对区块链网络中产生的每一个区块进行实时验证;所述专业节点需保存区块链系统的全部账本数据并对新生的区块进行实时验证;

所述区块的结构包括区块头和交易主体;所述区块头包括当前区块的hash值以及两个父区块的hash值,通过两个父区块的hash值,实现区块之间的连接,从而形成有向无环图结构的区块账本;两个父区块分别为第一父区块和第二父区块,其中,第一父区块为与当前区块的业务相似度值最大的边缘区块;第二父区块为区块高度值最大的区块;

所述交易主体包括业务属性结构体和交易体;每个区块的交易主体中当且仅当包含一笔交易。

第二方面,本发明提供一种基于DAG结构的区块链共识方法,该方法基于DAG结构的区块链系统来实现,该方法包括如下步骤:

S1:节点根据自身业务的需求,在发起交易前同步本地账本数据;

S2:节点创建交易对应的新区块;

S3:节点为新区块从本地账本中选择父区块;

S4:节点完成新区块的打包,发布新区块;

S5:专业节点收到新生成的区块后对其进行验证;

S6:新区块验证通过后,专业节点更新账本,将新区块写入账本中。

第三方面,本发明提供一种电子设备,包括:

一个或多个处理器;

存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述电子设备执行时,使得所述电子设备实现基于DAG结构的区块链共识方法。

第四方面,本发明提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,实现基于DAG结构的区块链共识方法。

本发明的有益效果如下:

(1)本发明通过业务的相似性为区块选择第一父区块,从而在DAG的账本结构中形成了潜在的分层业务链。由于对交易的排序只关注与该业务相关交易的排序,因此将交易的排序从无序的图状排序变成为局部的线性结构的排序,大大提升了交易排序的效率。

(2)本发明通过为区块选择高度最大的区块作为第二父区块,使得每个区块都连接在相对最长的链上,较少了系统中短链的概率。基于中本聪最长链准则,可以有效降低区块被篡改的风险,提升区块和区块链系统的安全性;同时一般节点在发起交易时会对区块进行二次验证,进一步降低了节点作恶的风险,强化了系统的安全性。

(3)本发明的方法和系统可以方便快捷部署,实现方法简单。由于一般节点在发布区块之前会对区块进行验证,因此即使无专业节点的验证,只要系统中存在交易,则区块的验证总会有节点来承担;同时,由于参与到系统中的节点都有发起交易的意愿,在发起交易的同时对系统中的区块进行验证,整个区块链系统即使在无激励的情况下,也能实现区块链系统的自我维护和自我管理。

附图说明

图1为本发明实施例的区块结构示意图。

图2为本发明实施例的区块连接示意图。

图3为本发明实施例的基于DAG的区块链系统共识方法的流程示意图。

图4为本发明实施例的节点为新区块从本地账本中选择父区块的示意图。

图5为本发明实施例的电子设备的示意图。

具体实施方式

下面根据附图和优选实施例详细描述本发明,本发明的目的和效果将变得更加明白,应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明的一种基于DAG结构的区块链系统及共识方法,该系统由独立的节点组成。所述的节点为拥有计算能力和网络通信能力的设备,通过网络可以实现节点之间的通信。节点可以是独立实体设备,也可以是区域云平台上的虚拟设备。节点具有发起交易、创建区块以及对外广播区块的权利。更进一步,所述的节点根据功能分为一般节点和专业节点。一般节点不需要保存区块链系统的全部账本数据,也不用参与对区块链网络中产生的每一个区块进行实时验证。由于区块链系统中的一般节点都有发起交易的需求,但如果因发起交易而保存整个区块链系统的全部账本数据,同时还需要参与区块的实时验证,则会导致交易成本上升,降低交易的意愿。因此一般节点的设计满足这类普通用户的需求。区块链系统的全部账本数据由所述的专业节点保存,并由所述的专业节点到对区块链网络中产生的每一个区块进行实时验证。

所述的区块链系统是一种节点准入受约束的联盟链。任何节点在加入系统之前需要经过联盟的认证,并被设置成一般节点或专业节点。节点的认证以及节点分成一般节点或专业节点不属于本专利的核心内容,本领域技术人员可以根据实际需求采用常用的认证方法和分类方法。

为了方便描述,在无明确特殊说明时,所述的节点包括了所述的一般节点和所述的专业节点。

所述的区块的结构如图1所示。一个完整的区块的结构包含区块头、交易主体。更进一步,区块头包含该区块的hash值以及区块指向的两个父区块的hash值,区块主体包括业务属性结构体和交易体。区块通过在其区块头中包含的两个父区块hash值,实现区块之间的连接,从而形成有向无环图(DAG)结构的区块账本。区块之间的连接图如图2所示,箭头表示连接关系。每一个区块指向前面两个区块,也即后一个区块是前两个区块的子区块。两个父区块分别为第一父区块和第二父区块,其中,第一父区块为与当前区块的业务相似度值最大的边缘区块;第二父区块为区块高度值最大的区块。每个区块的交易主体当且仅当包含一笔交易。相比与一个区块包含多笔交易的区块链系统而言,所述的区块的结构设计可以使交易获得更小的延迟。

为更好描述所述的一种基于DAG结构的区块链系统的共识方法,如图3所示,以新区块的生成并被写入到区块链账本为例进行描述,该共识方法包括如下步骤:

S1:节点根据自身业务的需求,在发起交易前同步本地账本数据。

作为其中一种实施方式,所述步骤S1中,在生成交易前,节点需要进行本地账本更新,以确保其本地账本数据与区块链网络中最新的区块数据保持一致。出于对节点节能的考虑,区块链系统中的一般节点并不需要实时与区块链网络进行账本同步。区块链系统的一般节点可以自行决定其与区块链网络进行同步。但在发起交易之前,节点需要进行同步账本。一方面,交易的发起需要区块链网络的最新状态;另一方面,获得当前网络的最新账本数据有利于选择合理的父区块,确保发起的交易以及对应的区块能被专业节点验证通过,并最终写入到区块链系统的账本中。由于发送交易并不需要整个区块链的账本数据,节点只需要同步最新的区块即可。

其中,具体的区块链账本同步有多种实现方式。作为其中一种实施方式,可以使用目前在区块链系统中广泛使用的Gossip 协议,通过与周围的专业节点进行账本同步;作为其中另外一种实施方式,节点可以周期与周围的专业节点进行账本同步,其中周期时间为1分钟,周围的节点数为10;同时也支持其他已经公开发表的方法,本领域技术人员也可以根据实际需求采用其他的同步方法。

S2:节点创建交易对应的新区块。

作为其中一种实施方式,所述S2通过以下子步骤来实现:

S201:节点根据业务需要创建交易体。

其中所述交易体包含交易发起者、交易接收方、交易内容等常规信息。对于交易体,本专利并不做任何其他限制,由节点根据自身业务需要设定。

S202:节点根据交易的业务特性创建交易的业务属性;所述业务属性的结构体包括对应交易的业务类型、业务指示以及序号;更进一步地,所述的业务类型表示交易的业务类型,所述的业务指示表示触发交易的原因,所述的序号指在对应业务类型和业务指示下对应的交易数的顺序号。

其中,业务类型、业务指示以及有多种实现方式。作为其中一种实施方式,业务类型用大小为16bits的二进制数表示,即最多可以表示65536种不同的业务;业务指示用大小为2bits的二进制数表示,其中00表示常规交易、01智能合约交易、10表示创世纪交易以及11表示扩展位;序号用大小为14bits的二进制数表示。

在另外一种实施方式中,业务类型用大小为32bits的二进制数表示;业务指示用大小为4bits的二进制数表示,其中最低为1表示常规交易、第二位为1表示智能合约交易、第三位为1表示系统初始交易以及最高位为1表示扩展位;序号用大小为28bits的二进制数表示。

S203:将S201创建的交易体和S202创建的交易的业务属性组成交易主体。

本领域技术人员也可以根据实际需求采用其他的类似方法,本专利并不做任何限制。

S3:节点为新区块从本地账本中选择父区块。

作为其中一种实施方式,如图4所示,所述S3通过以下子步骤来实现:

S301:从S1步骤中得到的最新账本中提取边缘区块,组成候选父区块列表。

其中所述的边缘区块为处在DAG账本的边缘点。边缘区块不包含子区块,即账本中其他区块的区块头不包含该区块的hash值。如图2所示,区块H和J是边缘区块。边缘区块被选为新区块的父区块,从DAG账本的角度意味着该边缘区块不再是边缘点,抑制了DAG的无序分叉,有助于区块链系统的安全性。

S302:对候选父区块列表中的区块进行验证,移除不合格的区块。

由于边缘区块在写入账本前已通过专业节点的验证,理论上应该是合格的区块。但由于区块链系统是无中心控制的分布式系统,虽然节点的准入有认证机制,但并不能完全保证认证通过后的节点不存在恶意或者出现系统失误的行为。因此,节点在发布区块前对边缘区块进行二次验证,可以有效降低专业节点作恶和出现系统失误而带来的风险,进一步提高区块链系统的安全性。此外,由于区块一旦被其他区块选为父区块,即意味着该子区块认可了父区块中交易,对父区块的合理性进行了背书。如果父区块存在不合理的交易,后续区块存在对子区块不认可的情况,从而导致该子区块内的交易无法被系统确认。因此,节点出于自身利益的诉求,需要对于候选父区块列表中的区块进行二次验证。对于由于专业节点恶意行为或者出现系统失误行为而产生的不合理的交易或区块,由于不能通过节点的二次验证,即使保留在账本中,但由于不存在子区块,并不会对区块链系统产生影响,因此可以抑制专业节点作恶的意愿,提升了区块链系统的安全性。此外,由于区块链系统中的节点都有发起交易的需求,在发起交易的同时也参与了对区块链系统的管理和维护,因此所述的区块链系统具有很好的自我管理和自我维护的特性。区块的具体验证见S5。

S303:分别计算候选父区块列表中的每个区块与新区块的业务相似度值,找出业务相似度值最大的边缘区块作为第一父区块。

为方便描述,这里以候选父区块

首先,对候选区块

更广泛地,由于每个区块只包含一笔交易,因此区块与区块的业务相似度值进一步描述为区块中的交易与交易之间的相似度值。

候选区块

(1)

作为其中一种实施方式,ω

当具体业务类型的区块第一次产生时,由于区块链账本数据中不存在与其业务类型相同的区块,因此该区块与候选父区块列表中的区块的业务相似度值均为0。对于这种特殊的情况,该区块的第一父区块为创世纪区块。

作为另外一种实施方式,两个区块或者说两个交易的相似度可以使用其他常见的二维相似度函数进行计算,如皮尔逊相关系数、欧几里得距离、Cosine相似度等,其中两个维度分别为业务类型与业务指示。本领域技术人员也可以根据实际需求采用其他的类似方法。

S304:对候选父区块列表中的区块进行区块高度计算,找出区块高度最大的区块作为第二父区块。

区块的高度定义为,从区块的第二父区块开始回溯,直到创世纪区块,中间经过的区块个数即为区块的高度。节点对候选父区块列表中的区块分别计算其高度值,找出高度值最大的区块,该区块即为新区块的第二父区块。边缘区块的高度在某种意义上即为DAG图中由起点(即创世纪区块)到边缘点形成的一条链的距离。如果每个新生成的区块都连接到一条最长的链之后,根据中本聪最长链准则,链被篡改的概率最低,对应区块的安全性最高。因此,新生的区块连接到具有区块高度最大的第二父区块之后,可以有效提高该区块和区块链系统安全性。

S4:节点完成新区块的打包,发布新区块。

作为其中一种实施方式,所述S4通过以下子步骤来实现:

S401:将步骤S3中得到的两个父区块的hash值写到新生成区块的hash头中;

S402:计算新生成区块的hash值,并将其写到新生成区块的hash头中;

S403:将新生成区块的hash头和步骤S2中产生的交易主体组成一个完整的区块;

S404:节点对外广播产生的新区块。为了防止恶意节点进行垃圾区块的广播,在对外广播区块之前,节点需要运行一段轻量级的PoW随机运算。通过消耗一定的算力,增加恶意广播垃圾区块的成本。其中轻量级的PoW有多种实现方式。作为其中一种实施方式,可以使用相对固定次数的随机hash计算;同时也支持其他已经公开发表的方法,本领域技术人员也可以根据实际需求采用其他的实现方法。

S5:专业节点收到新生成的区块后对其进行验证。

作为其中一种实施方式,所述步骤S5中,对区块的验证包括两方面。一方面需要验证区块的交易主体内容是否合理,另一方面需要验证区块的父区块选择是否合理。其中对区块的交易主体的验证,采用常见的区块链系统常规的交易验证方法,确保交易金额、交易内容合理;对区块的父区块选择验证,由于节点存在网络延迟,很难保证发送区块的节点和验证区块的专业节点都能获得相同的最新账本数据。特别是在发送节点同步区块之后到专业节点收到该区块之间的时间段内,区块链网络存在产生其他新区块的可能性。因此,在对新发布的区块进行验证时,专业节点只验证区块与其第一父区块的业务相似值以及区块的高度是否均大于系统设定的门限值。如果大于则验证通过,有任何一个值小于门限,则区块验证失败。作为其中一种实施方式,业务相似值门限设置为0.5,区块高度为10。作为其中另外一种实施方式,对候选父区块回溯10个父区块,分别计算其平均业务相似值和区块高度,对应的平均值作为业务相似值门限和区块高度门限。本领域技术人员也可以根据实际需求采用其他的类似方法。

S6:新区块验证通过后,专业节点更新账本,将新区块写入账本中。

作为其中一种实施方式,所述步骤S6中,对于验证通过的区块,专业节点将该区块同步到本地的账本中。由于所述DAG区块链系统中,专业节点之间并没有对新生的区块验证的结果进行协商,因此可以大幅度提升交易写入区块账本的时间。专业节点可能存在作恶行为,恶意生成非法的交易或区块。如S302中所描述的,由于每个新生的区块无子区块,也即是边缘区块,在产生子区块的同时,需要经过节点的二次验证。因此,专业节点生成的不合理的区块可以在区块的二次验证中被检测到,从而有效防止专业节点的恶意行为。同时,由于节点在同步账本时,需要从周围的专业节点同步数据,对于出现恶意行为的专业节点,节点与其进行同步的意愿会降低,进一步会抑制专业节点作恶的动机。因此,即使专业节点之间不对新生的区块验证的结果进行协商,仍然可以保证区块的安全性。

参见图5,本发明实施例还提供的一种电子设备,包括一个或多个处理器和存储装置;该存储装置用于存储一个或多个程序,当所述一个或多个程序被所述电子设备执行时,使得所述电子设备实现如上述的基于DAG结构的区块链共识方法。从硬件层面而言,除了图5所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的任意具备数据处理能力的设备通常根据该任意具备数据处理能力的设备的实际功能,还可以包括其他硬件,对此不再赘述。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

本发明实施例还提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述实施例中的基于DAG结构的区块链共识方法。

所述计算机可读存储介质可以是前述任一实施例所述的任意具备数据处理能力的设备的内部存储单元,例如硬盘或内存。所述计算机可读存储介质也可以是外部存储设备,例如所述设备上配备的插接式硬盘、智能存储卡(SmartMedia card, SMC)、SD卡、闪存卡(Flash card)等。进一步的,所述计算机可读存储介质还可以既包括任意具备数据处理能力的设备的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算仉程序以及所述任意具备数据处理能力的设备所需的其他程序和数据,还可以用于暂时地存储己经输出或者将要输出的数据。

本领域普通技术人员可以理解,以上所述仅为发明的优选实例而已,并不用于限制发明,尽管参照前述实例对发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在发明的精神和原则之内,所做的修改、等同替换等均应包含在发明的保护范围之内。

相关技术
  • 一种交易共识方法、节点及区块链系统
  • 一种基于区块链多链混合共识的方法
  • 一种基于DAG算法的区块链混合共识方法
  • 基于DAG交易存储结构的中继链共识系统及方法
技术分类

06120116331115