本发明涉及区块链跨链通信技术,尤其涉及一种链路由及实现区块链跨链通信的系统。
背景技术:
狭义上的区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。广义上的区块链是指利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。区块链技术通过去中心化、去信任的方式集体维护一个可靠数据库,解决交易的信任和安全问题。
区块链技术并不是一种单一的技术,而是多种技术整合的结果,这些技术以新的结构组合在一起,形成了一种新的数据记录、存储和表达的方式,主要涉及以下四种技术:
一、分布式账本。即交易记账由分布在不同地方的多个节点共同完成,而且每一个节点都记录的是完整的账目,因此它们都可以参与监督交易合法性,同时也可以共同为其作证。不同于传统的中心化记账方案,没有任何一个节点可以单独记录账目,从而避免了单一记账人被控制或者被贿赂而记假账的可能性。另一方面,由于记账节点足够多,理论上讲除非所有的节点被破坏,否则账目就不会丢失,从而保证了账目数据的安全性。
二、非对称加密和授权技术。存储在区块链上的交易信息是公开的,但是账户身份信息是高度加密的,只有在数据拥有者授权的情况下才能访问到,从而保证了数据的安全和个人的隐私。
三、共识机制。即所有记账节点之间如何达成共识,去认定一个记录的有效性,这既是认定的手段,也是防止篡改的手段。
四、智能合约。智能合约是基于可信的不可篡改的数据,可以自动化地执行一些预先定义好的规则和条款。
目前阶段区块链的网络属性仅仅被发挥到类似局域网的程度,不同的区块链之间不仅无法联通,更无信任可言。此外,对一条区块链而言,我们也饱受其能力不足的困扰,全局共识机制在提供安全性的同时也大大限制了区块链系统的发展,我们无法通过增加节点的方式提高交易的处理能力。
技术实现要素:
本发明的目的之一是提供一种链路由,通过其可实现区块链之间的通信,从而使得不同区块链之间可以互信互通,还可以通过增加节点的方式提高交易的处理能力。
根据上述目的,本发明提出了一种链路由,所述链路由为实现通信包接收和转发的第一区块链,所述链路由与不能实现通信包转发的第二区块链或其他链路由连接,用以实现各第二区块链之间的通信,所述通信包内包括交易,所述交易对应对数据库状态的改变。
针对区块链发展所面临的前述问题,发明人提出“链路由”的概念。这样做主要有两个目的:其一,增强区块链系统对交易的处理能力,实现区块链交易处理能力的水平扩展;其二,打通区块链之间的通信壁垒,实现区块链之间的互联,互通,互信。
现有的一些区块链,如比特币,以太坊等,是先于所述链路由存在的,而且在设计之初这些现有的区块链也不具有与其它区块链通信的功能。而链路由则要像路由器一样能够接纳一切区块链,因此发明人考虑设计所述链路由的同时,基于链路由制定一套区块链之间的通信协议,符合这套协议的区块链系统可以轻松接入链路由。对于先于所述链路由存在的区块链系统,在不改变其本身设计的基础上,可以额外设计一套适配系统来辅助其与所述链路由之间的通信。
本发明中,所述第一区块链和所述第二区块链作广义上的区块链理解,即包括区块链数据结构的、基于区块链技术实现的、具备区块链数据库维护功能的架构,该架构包括相应的计算范式,可以在计算机上实现。
本发明中,所述链路由提供了区块链之间的联通与分发的功能。通常基于链路由制定一套区块链之间的通信协议,使不同的区块链之间可以像网络中的各种设备一样相互通信,从而使得不同区块链之间可以互信互通,还可以通过增加第二区块链节点的方式提高交易的处理能力。
本发明基于区块链技术设计所述链路由,将所述链路由本身设计为第一区块链,基于区块链的交易和数据库技术以及通信技术实现所述第一区块链与所述第二区块链之间安全、可靠的通信,以及实现区块链交易处理能力的水平扩展。
进一步地,本发明所述的链路由中,所述链路由包括:路由信息管理模块、通信包处理器和分发器,所述路由信息管理模块内存储有路由表,所述通信包处理器将接收的通信包进行解析,然后根据路由表将通信包经由分发器转发出去。
上述方案中,所述路由信息管理模块内存储有路由表是指:所述路由表中的信息由信息管理模块管理,但通常所述路由表中的信息是存在链路由的数据库中。
上述方案中,所述路由信息管理模块、通信包处理器和分发器可以基于链间通信协议(crossblockchaincommunicationprotocol,缩写为cbcp)实现。
更进一步地,上述链路由中,所述路由表为动态更新的路由表。
进一步地,本发明所述的链路由中,所述链路由采用代理权益拜占庭容错算法对所述交易进行验证,所述链路由具有若干个节点,所述节点包括具有验证账号的验证节点和不具有验证账号的非验证节点,所述非验证节点将权益委托给验证节点,以使验证节点代理非验证节点进行投票以进行验证。
上述方案中,由于所述链路由本身就是一条区块链,因此通常具有若干节点。理论上一个节点的区块链是可以正常运行的,但实际上,分布式账本和拜占庭容错共识算法的作用要在多个节点上才能体现出来,在使用的共识算法中,建议节点数至少为4个。
上述方案中,所述链路由采用代理权益拜占庭容错算法对所述交易进行验证,其设计思路如下:
工作量证明算法(pow)是被应用在比特币和以太坊上的一种拜占庭容错(bft)共识算法。自比特币开始发行至今,工作量证明算法已经证明了其可靠性,但其对资源的浪费也是有目共睹。权益证明算法(pos)是一种为了解决工作量证明算法资源浪费问题而提出的共识算法,通过投票人在投票权益池中的权益比重来代替矿工在挖矿时贡献的算力,配以相应的处罚机制,确保投票人的诚信。然而,算力和权益之间还是有很大区别的,最重要的一点区别就是在于算力是不能分散的,一个算力固定的矿工不可以同时在两条链上挖矿且保持总算力翻倍,但是拥有一定权益的投票人却可以对每一个可能的区块投票,只要任何一个区块成为了将来的胜出者就可以保证自己的权益不受损。但这样做是有很大的安全隐患的,因为这样大大降低了作恶者所需要的作恶成本。
raft作为一种常用的高效共识算法,其最大的弊病在于不能防止拜占庭节点,一个拥有强大网络配置的拜占庭领导者节点会给raft算法的共识带来毁灭性打击。在拜占庭容错共识算法的发展历程中,一些结合raft和bft的算法被提出来。以pbft(practicalbyzantinefaulttolerance,实用拜占庭容错算法)为例,一部分可靠的节点被称为验证人,验证人具有成为领导者的机会,在每一轮区块链生成的过程中,都会有一个新的验证人会默认成为该轮的领导者,领导者负责打包新的区块,并将一个自己认为合理的区块广播给所有验证人。经过两轮超过2/3的全部验证人的投票确认,新的区块才会被共识。这种共识方式大大提升了出块速度,而且只要保证小于1/3的验证人不是拜占庭节点,区块就可以被持续生产。
不可否认的是,pbft中所使用的拜占庭节点容错算法对于保证1/3以下拜占庭节点的网络的安全是可靠的。但是,在实际应用中,尤其是当与经济利益相关时,即使验证人是经过挑选的可靠节点,发明人考虑也不能单纯的依赖没有处罚机制的1/3的安全,保证安全必须要做到赏务速而后有劝,罚务速而后有惩。而其中的赏与罚必须是与经济利益直接关联的。因此,发明人对原有的共识机制进行了修改,使验证人投票的权重与其所抵押的链上代币权益相对应。这样一来,原本需要超过2/3投票人才能确认生成区块的机制被修改成超过2/3的总权益。此外,在pbft共识算法中,普通节点只是在同步来自领导节点发来的新区块,并不参与共识,导致其共识算法的安全性仅依赖于验证节点的数量,普通节点的数量增加并不能提升拜占庭容错的安全性。新的共识机制中增加了非验证节点的参与性。一个验证节点对应一个验证人账号,非验证人可以通过将权益委托给验证人,通过验证人代理投票的方式赚取属于自己的利益。因为利益的关系,非验证人会慎重选择代理验证人,从而做到了所有人都参与到共识中,而又没有所有节点参与共识而带来的效率降低的缺陷。这样的共识算法发明人称之为代理权益拜占庭容错算法(ds-pbft)。
上述方案中,所述链路由使用通过验证人投票实现的代理权益拜占庭容错算法作为共识算法,使得所有节点都参与到链路由的共识中,而又没有所有节点参与共识而带来的效率降低的缺陷。
上述方案还有个好处是为打造轻量级的客户端奠定了基础。现阶段区块链的客户端通常都为全节点,即需要存储区块链的所有数据。轻量级客户端,也称轻客户端,只存储少量区块链数据,但是同样可以验证区块链中的数据的真实性,更适合手机等移动、轻型终端的使用。上述方案的共识算法是一种更适合轻客户端使用的算法,因此为轻客户端的诞生奠定了基础。
发明人注意到,普通的区块链客户端需要同步区块链中的所有区块才可以验证交易,这样的客户端虽然功能强大,但是由于需要存储的数据太多导致其本身过重,在实际应用中往往有着诸多不便。
轻客户端中只需要实时同步某条区块链上的最新验证人组,就可以对该区块链上的一些信息进行验证。如,轻客户端只需要连续同步某区块链的区块头并更新验证人信息,就可以实时跟进并验证该区块链上的最新的区块高度,世界状态等信息。当然,相较于全节点客户端,轻客户端能实现的功能是有限的,但是这样的客户端更适合被使用在硬盘空间不够大的移动端或物联网行业,帮助其获取重要的状态。
进一步地,本发明所述的链路由中,所述链路由具有数量不断增加的若干个区块,其中每一个区块均包括区块头部分和数据部分。
上述方案中,由于链路由本身也是区块链,其状态信息以区块的形式保存和更新。所述状态信息通常包含于所述数据库中。
更进一步地,上述链路由中,其中所述区块头部分至少包括:链标识、区块高度、时间、世界状态的哈希值、与该区块紧邻的前一个区块的区块头部分的哈希值、与该区块紧邻的前一个区块的分块、验证人哈希值、数据部分的哈希值的至少其中之一。
更进一步地,上述链路由中,所述数据部分至少包括该区块内的所有交易。
上述方案中,一个交易是指对数据库的状态进行了一次改变。
本发明的另一目的是提供一种实现区块链跨链通信的系统,其可实现区块链之间的通信,从而使得不同区块链之间可以互信互通,还可以通过增加节点的方式提高交易的处理能力。
根据上述目的,本发明提出了一种实现区块链跨链通信的系统,其包括多个上述链路由以及与该多个链路由连接的多个第二区块链。
本发明所述的实现区块链跨链通信的系统中,所述多个链路由之间以某种连接结构通信连接,所述多个第二区块链与所述多个链路由之间以某种连接结构通信连接。其中,一个链路由可以连接一个或多个第二区块链。所述第二区块链通过其连接的链路由与其它第二区块链通信,或者通过其连接的链路由与其它第二区块链连接的链路由通信,从而与所述其它第二区块链通信,从而使得不同区块链之间可以互信互通,还可以通过增加第二区块链节点的方式提高交易的处理能力。
通常在所述系统中,一些链路由可以起到类似路由器的功能,根据通信协议将通信请求解析并转发,动态维护所述系统的网络拓扑结构。
在理想状况下,所述多个链路由之间以链状结构连接,所有第二区块链通过该链状结构进行通信,这样的好处是通信速度快。但是随着新的第二区块链的不断增加,通信量也会增加,链路由的存储和计算负担将以平方级增加,因此链路由通常需要采用分层结构。
这里将问题简化,假设所述多个链路由只包括底层链和上层链两层结构:底层链负责连通上层链,负责维护上层链之间的通信。即,如果目标链在同一个上层链中,那么就直接通过上层链通信。如果目标链不在同一个上层链中,则需要通过底层链通信。在实际应用中,所述多个链路由将不止两层,最底层构成路由主干。
进一步地,本发明所述的实现区块链跨链通信的系统中,所述多个链路由呈树状结构分布或呈网状结构分布。
上述方案中,所述树状结构是指每个节点的父节点是唯一的拓扑结构,所述网状结构是指每个节点的父节点不是唯一的拓扑结构,该拓扑结构形成分层结构,其拓扑关系对应分层关系。
进一步地,本发明所述的实现区块链跨链通信的系统中,所述多个链路由呈树状结构和网状结构结合的形式分布。
上述方案中,所述树状结构是指每个节点的父节点是唯一的拓扑结构,所述网状结构是指每个节点的父节点不是唯一的拓扑结构,该拓扑结构形成分层结构,其拓扑关系对应分层关系。
链路由网络的最终结构受诸多因素影响,其中,最主要的影响因素就是需要通信的区块链的数量。随着接入链网络的区块链逐渐增多,接入一个链路由中的区块链会不断增多,当多到一定的程度超过一个链路由的负载,可以采用增加链路由的方式来分摊压力。对于位于同一层的链路由来讲,它们既可以通过相互间建立连接完成通信传递,也可以接入同一个上层链路由,并通过共同的链路由来实现通信传递。所以树形结构是可能存在的,当然,网状结构也是可能存在的。也可能是在最上层的链路由中使用类似bgp的规则,在其下的每个分域内采用树形、网状、树形和网状的结构。
本发明所述的链路由,通过其可实现区块链之间的通信,从而使得不同区块链之间可以互信互通,还可以通过增加节点的方式提高交易的处理能力。
本发明所述的实现区块链跨链通信的系统,其同样具有上述效果,同时还扩大了节点容量。
附图说明
图1为本发明所述的链路由在一种实施方式下的结构示意图。
图2为本发明所述的链路由在一种实施方式下的代理权益拜占庭容错算法的流程示意图。
图3为本发明所述的链路由在一种实施方式下的区块的结构示意图。
具体实施方式
下面将结合说明书附图和具体的实施例来对本发明所述的链路由和实现区块链跨链通信的系统进行进一步地详细说明,但是该详细说明不构成对本发明的限制。
图1显示了本发明所述的链路由在一种实施方式下的结构。
如图1所示,该实施方式下的链路由为实现通信包接收和转发的第一区块链,链路由与不能实现通信包转发的作为第二区块链的子链(本具体实施方式中,将第二区块链称为子链,其挂接的链路由称为相应的母链)连接,用以实现各第二区块链之间的通信,通信包内包括交易,交易对应对数据库状态的改变。
在其它实施方式中,链路由还可以与其他链路由连接,用以实现各子链之间的通信。
该实施方式下的链路由包括:路由信息管理模块、通信包处理器和分发器,路由信息管理模块内存储有路由表,通信包处理器将接收的通信包进行解析,然后根据路由表将通信包经由分发器转发出去。该路由表为动态更新的路由表。路由信息管理模块、通信包处理器和分发器基于链间通信协议(cbcp)实现。
该实施方式中,不同于传统区块链系统的机构,链路由中的共识算法和p2p网络通信模块是与账本逻辑分离开的,将链路由分割为两个部分。其中共识算法与p2p网络通信模块负责交易的广播,共识等,其可以替代诸多区块链系统中的共识及p2p网络通信模块部分。账本部分负责验证,查询等逻辑。二者之间通过套接字协议被结合在一起。链路由使用通讯包处理器解析通信包,然后跟据其动态维护的路由表,通过链间通信协议将消息转发给子链。
该实施方式下的链路由采用代理权益拜占庭容错算法对交易进行验证,链路由具有若干个节点,节点包括具有验证账号的验证节点和不具有验证账号的非验证节点,非验证节点将权益委托给验证节点,以使验证节点代理非验证节点进行投票以进行验证。
图2显示了本发明所述的链路由在一种实施方式下的代理权益拜占庭容错算法的流程。
如图2所示,该实施方式下的链路由的代理权益拜占庭容错算法(ds-pbft)在流程上与pbft算法的流程类似。pbft算法是目前比较成熟的拜占庭容错共识算法。pbft算法中,一部分可靠的节点被称为验证人,验证人具有成为领导者的机会,在每一轮区块链生成的过程中,都会有一个新的验证人会默认成为该轮的领导者,领导者负责打包新的区块,并将一个自己认为合理的区块广播给所有验证人。经过两轮超过2/3的全部验证人的投票确认,新的区块才会被共识。ds-pbft算法与pbft算法的不同之处在于,ds-pbft算法中,验证人投票的权重与其所抵押的链上代币权益相对应,即pbft算法中需要超过2/3投票人才能确认生成区块的机制在ds-pbft算法中被修改成超过2/3的总权益。此外,在pbft算法中,普通节点只是在同步来自领导节点发来的新区块,并不参与共识。ds-pbft算法中增加了非验证节点的参与性,一个验证节点对应一个验证人账号,非验证人可以通过将权益委托给验证人,通过验证人代理投票的方式赚取属于自己的利益。ds-pbft算法与pbft算法的区别主要体现在设定上,包括ds-pbft算法中拥有权益的人可以将权益抵押给验证人,并通过验证人诚实投票帮助验证人和权益拥有者获利。
图3显示了本发明所述的链路由在一种实施方式下的区块的结构。
链路由本身也是区块链,状态信息以区块的形式保存和更新。该状态信息包含于数据库中。由于该实施方式下的链路由采用了代理权益拜占庭容错算法作为共识算法,其区块的结构与比特币、以太坊等区块链系统的区块的组成有很大不同。
如图3所示,该实施方式下的链路由具有数量不断增加的若干个区块,其中每一个区块均包括区块头部分(header)、数据部分(data)以及起到认证上一个区块的投票部分(lastcommit)。
区块头部分包括:链标识(chainid)、区块高度(hight)、时间(time)、世界状态的哈希值(apphash)、与该区块紧邻的前一个区块的区块头部分的哈希值(lastheaderhash)、与该区块紧邻的前一个区块的分块(lastblockparts)、验证人哈希值(validatorshash)、数据部分的哈希值(datahash)、投票部分的哈希值(lastcommithash)。其中,后两部分是对本区块整体性的检查。
数据部分包括该区块内的所有交易。其中,一个交易是指对数据库的状态进行了一次改变。
比较不同的是投票部分,这个部分的目的是建立新的区块与上一个区块之间的链接。
之前我们提到过,区块的共识需要两轮超过2/3验证节点权益的投票。其中第二轮的全部2/3验证节点投票(commit)会被暂时保存起来,等到下一个区块被提议时,被放在该区块的投票的部分(lastcommit)。所以一个区块的投票部分包括了上一轮投票中超过2/3验证人的投票。
本实施方式下的实现区块链跨链通信的系统包括多个上述链路由以及与该多个链路由连接的多个子链。在该系统中,一些链路由起到类似路由器的功能,根据通信协议将通信请求解析并转发,动态维护该系统的网络拓扑结构。
某些实施方式中,上述多个链路由呈树状结构分布或呈网状结构分布。
某些实施方式中,上述多个链路由呈树状结构和网状结构结合的形式分布。
上述实施方式中,树状结构是指每个节点的父节点是唯一的拓扑结构,网状结构是指每个节点的父节点不是唯一的拓扑结构,该拓扑结构形成分层结构,其拓扑关系对应分层关系。
上述实施方式中,底层链负责连通上层链,负责维护上层链之间的通信。即,如果目标链在同一个上层链中,那么就直接通过上层链通信。如果目标链不在同一个上层链中,则需要通过底层链通信。最底层构成链路由主干。
下面进一步说明该实施方式下的链路由和实现区块链跨链通信的系统的信息传输流程、状态维护以及动态扩容。
(1)信息传输流程。
假设子链a需要给子链b发送一条消息m,那么需要经过以下流程:
通过共识,子链a将以下包含以下信息的交易写入区块链
[消息内容:m,消息接收链:b];
链路由监测到子链a上需要传输的信息的请求,一旦发现需要转发的消息,便把包含以下信息的交易写入区块链
[消息内容:m,消息接收链:b,消息发送链:a];
子链b检测到链路由上有需要接收的消息,就将包含以下信息的交易写入区块链
[消息内容:m,消息来源:a]。
(2)状态维护。
作为不同子链之间沟通的桥梁,链路由要负责维护关于子链的一些状态。
首先,子链若希望与链路由进行通信,则必须在链路由上进行注册。包括子链的身份标识(chainid),子链上验证节点的信息,子链上资产的种类等。以此来帮助链路由能够在接收到通信请求的时候解析出对应的子链,完成转发操作。
其次,链路由需要实时接收子链的最新区块信息和对最新区块的投票(commit),以此来满足对子链基本状态的维护,帮助轻客户端的用户实时查询子链高度,状态,验证从子链发来的交易等等。
此外,因为验证节点的身份是实时变更的,链路由还需要维护所有子链上的动态验证节点信息,以此来验证一笔来自子链的交易是否为合法。
同理,子链上也需要维护关于链路由上的相应信息,以此来确定一笔交易确实是由链路由发来的。包括链路由的身份标识,链路由上的验证节点信息,链路由上的最新区块及投票等。
(3)动态扩容。
前文提到,链路由机制的一个重大意义在于实现区块链系统的水平扩展。因此,我们可以在现有链路由系统交易处理能力接近饱和之前在链路由上加入新的子链,降低每条链上所承载的交易数量。为了让新加入链路由的子链可以迅速分摊压力,我们制定了能够实时反应的动态路由规则。
首先,链路由会维护一个关于注册在其上的子链列表,在子链加入到链路由之前,子链列表会先行更新。轻客户端会效仿分布式配置管理机制,不定时向母链读取当前的最新子链数量。轻客户端每次会在0.5至1秒之间随机选取一个时间,倒计时触发向链路由子链数量的查询,并存储在本地文件中。若查询结果与本地存储数字不同,则向其他轻客户端广播最新子链数量及时间戳。收到消息的其他轻客户端对比本地文件,数量若一致,则重置倒计时;若数量不一致且时间戳晚于本地数值写入时间,则向链路由发起关于子链数量的查询,写入新数据之后,重启倒计时;若数量不一致但时间戳早于本地写入时间,则忽略消息。此外,我们还可以设定一个屏蔽机制,若一个轻客户端收到来自另一个轻客户端的广播,然后触发了向母链的查询,但是发现数量与本地储存的子链数量一致。这时可能是因为两次查询中,母链上的子链增减数量相同,广播者没有撒谎;或者广播者撒谎。但是这个轻客户端可以主动选择屏蔽接受来自对方的消息,每次的屏蔽时间随受欺骗次数增加。
通过以上方法,我们保证了轻客户端中存储的子链数量与母链中所存的保持实时一致。每当一笔请求从轻客户端发起时,轻客户端需要指定交易的触发链,轻客户端计算应用标识的哈希值,并对本地储存的子链数量取模,所得值即为该请求的目标链的编号。
需要注意的是,以上列举的仅为本发明的具体实施例,显然本发明不限于以上实施例,随之有着许多的类似变化。本领域的技术人员如果从本发明公开的内容直接导出或联想到的所有变形,均应属于本发明的保护范围。