跨链消息可靠传递方法、装置以及电子设备转让专利

申请号 : CN202111302693.6

文献号 : CN113743944B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李志平谢家贵郭健张波刘远超朱斯语

申请人 : 中国信息通信研究院

摘要 :

本申请实施例中提供了一种跨链消息可靠传递方法、装置以及电子设备,旨在降低跨链交互期间主链的消息处理压力,并提升跨链消息的传递可靠性。其中,跨链消息可靠传递方法包括:目标链接收主链发送的跨链消息哈希值,该哈希值是源链发送给主链的;目标链根据该哈希值,从源链处获取对应的跨链消息和跨链消息对应的第一默克尔证明;目标链根据跨链消息和第一默克尔证明,计算相应的第一默克尔树的第一根哈希值,并查询主链中是否保存有与第一根哈希值相同的根哈希值;在主链中保存有与第一根哈希值相同的根哈希值的情况下,目标链处理该跨链消息。

权利要求 :

1.一种跨链消息可靠传递方法,其特征在于,应用于跨链系统,所述跨链系统包括主链和多个子链,所述方法包括:

所述主链接收源链发送的跨链消息哈希值、所述源链的第一子链标识以及目标链的第二子链标识,并根据所述第二子链标识,将所述哈希值和所述第一子链标识发送给所述第二子链标识对应的所述目标链;其中,所述源链和所述目标链是所述多个子链中的两个子链;

所述目标链根据所述第一子链标识和所述哈希值,从所述第一子链标识对应的所述源链处,获取所述跨链消息和所述跨链消息对应的第一默克尔证明;

所述目标链根据所述跨链消息和所述第一默克尔证明,计算相应的第一默克尔树的第一根哈希值,并查询所述主链中是否保存有与所述第一根哈希值相同的根哈希值;

在所述主链中保存有与所述第一根哈希值相同的根哈希值的情况下,所述目标链处理所述跨链消息;

所述方法还包括:所述多个子链中的每个子链每生成一个区块后,根据该区块中记录的跨链消息,生成第一默克尔树,并将该第一默克尔树的根哈希值发送给所述主链的主链节点进行保存;

所述方法还包括:所述主链的每个主链节点在获得每个子链发送的根哈希值后,保存所述根哈希值;所述主链的主链节点在接收到所述目标链的查询请求后,以所述查询请求携带的所述第一根哈希值为索引,查询自身是否保存有与所述第一根哈希值相同的根哈希值,并将查询结果反馈给所述目标链;

所述方法还包括:所述主链的每个主链节点在获得每个子链发送的根哈希值后,根据每个子链发送的根哈希值和每个子链的历史根哈希值,构建第二默克尔树,并将该第二默克尔树的根哈希值保存至所述主链新生成的区块中;如果所述主链的主链节点查询到与所述第一根哈希值相同的根哈希值,则该主链节点在向所述目标链反馈所述查询结果时,还将该根哈希值对应的第二默克尔证明反馈给所述目标链;所述目标链根据所述根哈希值和所述第二默克尔证明,计算相应的第二默克尔树的第二根哈希值,并查询所述主链的区块中是否保存有与所述第二根哈希值相同的根哈希值;

所述在所述主链中保存有与所述第一根哈希值相同的根哈希值的情况下,所述目标链处理所述跨链消息,包括:

在主链的主链节点中保存有与所述第一根哈希值相同的根哈希值,且所述主链的区块中保存有与所述第二根哈希值相同的根哈希值的情况下,所述目标链处理所述跨链消息。

2.一种跨链消息可靠传递方法,其特征在于,应用于跨链系统的多个子链中的任意一个子链,所述跨链系统还包括主链,所述方法包括:接收所述主链发送的跨链消息哈希值和第一子链标识,所述跨链消息哈希值是所述第一子链标识对应的子链发送给所述主链的;

根据所述第一子链标识和所述哈希值,从所述第一子链标识对应的子链处,获取所述跨链消息和所述跨链消息对应的第一默克尔证明;

根据所述跨链消息和所述第一默克尔证明,计算相应的第一默克尔树的第一根哈希值,并查询所述主链中是否保存有与所述第一根哈希值相同的根哈希值;

在所述主链中保存有与所述第一根哈希值相同的根哈希值的情况下,处理所述跨链消息;

所述方法还包括:每生成一个区块后,根据该区块中记录的跨链消息,生成第一默克尔树,并将该第一默克尔树的根哈希值发送给所述主链的主链节点进行保存;

所述跨链系统还包括多个骨干节点,每个骨干节点对应一个子链,每个骨干节点还对应所述主链中的部分主链节点,每个骨干节点用于连接对应的子链和对应的主链节点;

所述查询所述主链中是否保存有与所述第一根哈希值相同的根哈希值,包括:向对应的骨干节点发送携带有所述第一根哈希值的查询请求,使该骨干节点将所述查询请求提交给该骨干节点对应的主链节点,从而使得对应的主链节点查询自身是否保存有与所述第一根哈希值相同的根哈希值,并将查询结果反馈给该骨干节点;接收对应的骨干节点反馈的所述查询结果。

3.根据权利要求2所述的方法,其特征在于,在接收对应的骨干节点反馈的查询结果时,所述方法还包括:

接收对应的骨干节点反馈的第二默克尔证明,所述第二默克尔证明是对应的主链节点在查询到与所述第一根哈希值相同的根哈希值时,对应的主链节点为该根哈希值生成的默克尔证明;

根据所述第一根哈希值和所述第二默克尔证明,计算相应的第二默克尔树的第二根哈希值,并查询所述主链的区块中是否保存有与所述第二根哈希值相同的根哈希值;其中,所述主链用于根据每个子链发送的根哈希值和每个子链的历史根哈希值,构建第二默克尔树,并将该第二默克尔树的根哈希值保存至所述主链新生成的区块中;

所述在所述主链中保存有与所述第一根哈希值相同的根哈希值的情况下,处理所述跨链消息,包括:

在所述主链的主链节点中保存有与所述第一根哈希值相同的根哈希值,且所述主链的区块中保存有与所述第二根哈希值相同的根哈希值的情况下,处理所述跨链消息。

4.一种跨链消息可靠传递装置,其特征在于,应用于跨链系统的多个子链中的任意一个子链,所述跨链系统还包括主链,所述装置包括:哈希值接收模块,用于接收所述主链发送的跨链消息哈希值和第一子链标识,所述跨链消息哈希值是所述第一子链标识对应的子链发送给所述主链的;

跨链消息获取模块,用于根据所述第一子链标识和所述哈希值,从所述第一子链标识对应的子链处,获取所述跨链消息和所述跨链消息对应的第一默克尔证明;

第一根哈希值查询模块,用于根据所述跨链消息和所述第一默克尔证明,计算相应的第一默克尔树的第一根哈希值,并查询所述主链中是否保存有与所述第一根哈希值相同的根哈希值;

跨链消息处理模块,用于在所述主链中保存有与所述第一根哈希值相同的根哈希值的情况下,处理所述跨链消息;

根哈希值生成模块,用于每生成一个区块后,根据该区块中记录的跨链消息,生成第一默克尔树,并将该第一默克尔树的根哈希值发送给主链的主链节点进行保存;

所述跨链系统还包括多个骨干节点,每个骨干节点对应一个子链,每个骨干节点还对应所述主链中的部分主链节点,每个骨干节点用于连接对应的子链和对应的主链节点;

所述根哈希值查询模块具体用于:向对应的骨干节点发送携带有所述第一根哈希值的查询请求,使该骨干节点将所述查询请求提交给该骨干节点对应的主链节点,从而使得对应的主链节点查询自身是否保存有与所述第一根哈希值相同的根哈希值,并将查询结果反馈给该骨干节点;

所述根哈希值查询模块还用于:接收对应的骨干节点反馈的所述查询结果。

5.一种电子设备,其特征在于,所述电子设备包括:处理器、存储器以及总线,所述存储器存储有所述处理器可执行的机器可读指令,当所述电子设备运行时,所述处理器与所述存储器之间通过所述总线通信,所述机器可读指令被所述处理器执行时执行如权利要求2或3所述的方法。

说明书 :

跨链消息可靠传递方法、装置以及电子设备

技术领域

[0001] 本申请涉及区块链技术领域,具体地,涉及一种跨链消息可靠传递方法、装置以及电子设备。

背景技术

[0002] 区块链技术作为一种分布式账本技术,其技术优势主要体现于数据信息不可篡改、数据信息可溯源、分布式去中心化、无须信任系统等方面,区块链技术目前已经在金融、
健康医疗、供应链、资产管理、互联网电商等诸多领域得以应用。
[0003] 相关技术中,为了使异构区块链/同构区块链之间实现数据流转,跨链技术应运而生。在跨链技术中,为了避免参与跨链的两个区块链中的某个区块链作恶,篡改跨链交易消
息,可以在两个区块链之间设置主链,并利用主链对两个区块链之间的跨链消息进行存证。
在两个区块链日后对跨链消息产生争议时,主链存证的跨链消息可以作为解决争议的依
据。然而随着接入主链的区块链数量的增加,多个区块链中两两之间随时可能产生跨链交
互,导致主链的跨链消息处理压力增大,主链性能受到影响。

发明内容

[0004] 本申请实施例中提供了一种跨链消息可靠传递方法、装置以及电子设备,旨在降低跨链交互期间主链的消息处理压力,并提升跨链消息的传递可靠性。
[0005] 根据本申请实施例的第一个方面,提供了一种跨链消息可靠传递方法,应用于跨链系统,所述跨链系统包括主链和多个子链,所述方法包括:
[0006] 所述主链接收源链发送的跨链消息哈希值、所述源链的第一子链标识以及目标链的第二子链标识,并根据所述第二子链标识,将所述哈希值和所述第一子链标识发送给所
述第二子链标识对应的所述目标链;其中,所述源链和所述目标链是所述多个子链中的两
个子链;
[0007] 所述目标链根据所述第一子链标识和所述哈希值,从所述第一子链标识对应的所述源链处,获取所述跨链消息和所述跨链消息对应的第一默克尔证明;
[0008] 所述目标链根据所述跨链消息和所述第一默克尔证明,计算相应的第一默克尔树的第一根哈希值,并查询所述主链中是否保存有与所述第一根哈希值相同的根哈希值;
[0009] 在所述主链中保存有与所述第一根哈希值相同的根哈希值的情况下,所述目标链处理所述跨链消息。
[0010] 根据本申请实施例的第二个方面,提供了一种跨链消息可靠传递方法,应用于跨链系统的多个子链中的任意一个子链,所述跨链系统还包括主链,所述方法包括:
[0011] 接收所述主链发送的跨链消息哈希值和第一子链标识,所述跨链消息哈希值是所述第一子链标识对应的子链发送给所述主链的;
[0012] 根据所述第一子链标识和所述哈希值,从所述第一子链标识对应的子链处,获取所述跨链消息和所述跨链消息对应的第一默克尔证明;
[0013] 根据所述跨链消息和所述第一默克尔证明,计算相应的第一默克尔树的第一根哈希值,并查询所述主链中是否保存有与所述第一根哈希值相同的根哈希值;
[0014] 在所述主链中保存有与所述第一根哈希值相同的根哈希值的情况下,处理所述跨链消息。
[0015] 根据本申请实施例的第三个方面,提供了一种跨链消息可靠传递装置,应用于跨链系统的多个子链中的任意一个子链,所述跨链系统还包括主链,所述装置包括:
[0016] 哈希值接收模块,用于接收所述主链发送的跨链消息哈希值和第一子链标识,所述跨链消息哈希值是所述第一子链标识对应的子链发送给所述主链的;
[0017] 跨链消息获取模块,用于根据所述第一子链标识和所述哈希值,从所述第一子链标识对应的子链处,获取所述跨链消息和所述跨链消息对应的第一默克尔证明;
[0018] 第一根哈希值查询模块,用于根据所述跨链消息和所述第一默克尔证明,计算相应的第一默克尔树的第一根哈希值,并查询所述主链中是否保存有与所述第一根哈希值相
同的根哈希值;
[0019] 跨链消息处理模块,用于在所述主链中保存有与所述第一根哈希值相同的根哈希值的情况下,处理所述跨链消息。
[0020] 根据本申请实施例的第三个方面,提供了一种电子设备,所述电子设备包括:处理器、存储器以及总线,所述存储器存储有所述处理器可执行的机器可读指令,当所述电子设
备运行时,所述处理器与所述存储器之间通过所述总线通信,所述机器可读指令被所述处
理器执行时执行上述跨链消息可靠传递方法。
[0021] 采用本申请实施例中提供的跨链消息可靠传递方法、装置以及电子设备,源链将跨链消息的哈希值发送给主链,再由主链将哈希值路由给目标链。相比于跨链消息本身,跨
链消息的哈希值通常具有更小的数据量,因此可以降低跨链交互期间主链的消息处理压
力。此外,目标链从源链处获取跨链消息和跨链消息对应的第一默克尔证明,并根据跨链消
息和第一默克尔证明,计算相应的第一默克尔树的第一根哈希值,然后查询主链中是否保
存有相同的根哈希值。如果保存有,则说明主链记录有跨链消息对应的默克尔树的根哈希
值,而该根哈希值可以作为日后处理争议的依据,同时也说明目标链在直接从源链获取跨
链消息的过程中,跨链消息没有被篡改。在此情况下,目标链才对跨链消息进行处理。可见
本申请可以降低跨链交互期间主链的消息处理压力,并提升跨链消息的传递可靠性。

附图说明

[0022] 此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
[0023] 图1是本申请一实施例提出的跨链消息可靠传递方法的流程示意图;
[0024] 图2是本申请一实施例提出的子链生成第一默克尔树的示意图;
[0025] 图3是本申请一实施例提出的第二默克尔树的示意图;
[0026] 图4是本申请一实施例提出的跨链消息可靠传递方法的流程示意图;
[0027] 图5是本申请一实施例提出的跨链消息可靠传递装置的结构示意图;
[0028] 图6是本申请一实施例提供的电子设备的结构框图。

具体实施方式

[0029] 在实现本申请的过程中,发明人发现,在跨链技术中,为了避免参与跨链的两个区块链中的某个区块链作恶,篡改跨链交易消息,可以在两个区块链之间设置主链,并利用主
链对两个区块链之间的跨链消息进行存证。在两个区块链日后对跨链消息产生争议时,主
链存证的跨链消息可以作为解决争议的依据。然而随着接入主链的区块链数量的增加,多
个区块链中两两之间随时可能产生跨链交互,导致主链的跨链消息处理压力增大,主链性
能受到影响。
[0030] 针对上述问题,本申请实施例中提供了一种跨链消息可靠传递方法、装置以及电子设备,源链将跨链消息的哈希值发送给主链,再由主链将哈希值路由给目标链。相比于跨
链消息本身,跨链消息的哈希值通常具有更小的数据量,因此可以降低跨链交互期间主链
的消息处理压力。此外,目标链从源链处获取跨链消息和跨链消息对应的第一默克尔证明,
并根据跨链消息和第一默克尔证明,计算相应的第一默克尔树的第一根哈希值,然后查询
主链中是否保存有相同的根哈希值。如果保存有,则说明主链记录有跨链消息对应的默克
尔树的根哈希值,而该根哈希值可以作为日后处理争议的依据,同时也说明目标链在直接
从源链获取跨链消息的过程中,跨链消息没有被篡改。在此情况下,目标链才对跨链消息进
行处理。可见本申请可以降低跨链交互期间主链的消息处理压力,并提升跨链消息的传递
可靠性。
[0031] 本申请实施例中的方案可以采用各种计算机语言实现,例如,面向对象的程序设计语言Java和直译式脚本语言JavaScript等。
[0032] 为了使本申请实施例中的技术方案及优点更加清楚明白,以下结合附图对本申请的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本申请的一部分实施
例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本申请中的实施例及实
施例中的特征可以相互组合。
[0033] 参考图1,图1是本申请一实施例提出的跨链消息可靠传递方法的流程示意图,该跨链消息可靠传递方法应用于跨链系统,跨链系统包括主链和多个子链。如图1所示,该跨
链消息可靠传递方法包括以下步骤:
[0034] S110:主链接收源链发送的跨链消息哈希值、源链的第一子链标识以及目标链的第二子链标识,并根据第二子链标识,将哈希值和第一子链标识发送给第二子链标识对应
的目标链。
[0035] 其中,源链和目标链是多个子链中的两个子链。具体实现时,源链向主链发送:跨链消息的哈希值、源链标识(即第一子链标识)以及目标链的标识(即第二子链标识)。主链
接收到源链发送的上述信息后,可以根据其中的第二子链标识,从多个子链中确定出目标
链,从而将跨链消息的哈希值和源链标识(即第一子链标识)路由给目标链。
[0036] 本申请中,相比于跨链消息本身,跨链消息的哈希值通常具有更小的数据量,源链不需要路由跨链消息本身,而是路由跨链消息的哈希值,因此可以降低跨链交互期间主链
的消息处理压力。
[0037] 本申请中,跨链消息具体可以是跨链交易,也可以是单纯需要同步给目标链进行保存的数据,本申请对于跨链消息的具体形式不做限定。
[0038] 此外,在一些可选的实施方式中,跨链系统还可以包括多个骨干节点,每个骨干节点对应一个子链,每个骨干节点还对应主链中的部分主链节点,每个骨干节点用于连接对
应的子链和对应的主链节点。
[0039] 当源链接收到源链用户提交的跨链消息,并对跨链消息进行共识后,源链的预设节点(例如源链的主节点master)可以生成跨链消息的哈希值,并生成跨链请求,该跨链请
求携带:跨链消息的哈希值、源链标识以及目标链标识。源链的预设节点将跨链请求发送给
源链对应的骨干节点,骨干节点再将跨链请求转发给对应的主链节点。主链节点通过主链
的P2P网络,将跨链请求发送给每个主链节点。目标链对应的主链节点在接收到跨链请求
后,根据其中携带的目标链标识,确定该目标链标识是其对应的子链的标识,因此该主链节
点将跨链请求发送给对应的骨干节点,骨干节点再将跨链请求转发给目标链的预设节点
(例如目标链的主节点master),从而使得目标链获得跨链消息哈希值和源链标识(即第一
子链标识)。而其他主链节点在接收到跨链请求后,根据其中携带的目标链标识,确定该目
标链标识不是其对应的子链的标识,因此可以不处理该跨链请求。
[0040] S120:目标链根据第一子链标识和哈希值,从第一子链标识对应的源链处,获取跨链消息和跨链消息对应的第一默克尔证明。
[0041] 具体实现时,目标链接收到主链发送的跨链消息的哈希值和第一子链标识后,可以根据第一子链标识,从多个子链中确定出源链,从而根据哈希值向源链索取该哈希值对
应的跨链消息。
[0042] 在一些可选的实施方式中,目标链的预设节点接收到主链发送的跨链消息的哈希值和第一子链标识后,生成跨链消息获取请求,并将跨链消息获取请求发送给目标链对应
的骨干节点。该跨链消息获取请求携带跨链消息的哈希值和第一子链标识。骨干节点接收
到跨链消息获取请求后,根据其中携带的第一子链标识,从多个子链中确定出源链。然后该
骨干节点将跨链消息获取请求转发给源链对应的骨干节点。源链对应的骨干节点接收到跨
链消息获取请求后,将跨链消息获取请求发送给源链的预设节点。源链的预设节点从跨链
消息获取请求中读取出哈希值,并从保存的多个跨链消息中查询该哈希值对应的跨链消
息。在查询到对应的跨链消息后,源链的预设节点还根据该跨链消息所在的默克尔树,为该
跨链消息生成默克尔证明(即前述第一默克尔证明)。源链的预设节点再通过骨干节点,将
查询到的跨链消息和生成的默克尔证明发送给目标链的预设节点。
[0043] 在一些可选的实施方式中,多个子链中的每个子链每生成一个区块后,根据该区块中记录的跨链消息,生成第一默克尔树,并将该第一默克尔树的根哈希值发送给主链的
主链节点进行保存。
[0044] 具体实现时,当子链生成一个区块后,子链的每个节点可以根据该区块记录的跨链消息,生成一个默克尔树(即第一默克尔树)并保存。此外,子链还可以通过骨干节点,将
第一默克尔树的根哈希值发送给主链。主链的每个主链节点在获得每个子链发送的根哈希
值后,保存这些根哈希值。
[0045] 当子链的预设节点接收到跨链消息获取请求,并从保存的多个跨链消息中查询到相应跨链消息后,可以根据该跨链消息对应的默克尔树,生成该跨链消息对应的第一默克
尔证明。
[0046] 本申请中,通过将跨链消息对应的第一默克尔树的根哈希值发送给主链,使主链保存根哈希值。一方面,主链不需要保存多个跨链消息,而只需要保存多个跨链消息所形成
的第一默克尔树的根哈希值,因此可以有效节约主链的存储资源。另一方面,主链保存跨链
消息的第一默克尔树的根哈希值后,当子链与子链在日后针对跨链消息产生争议后,可以
根据争议的跨链消息重建默克尔树,并查询主链是否保存有重建的默克尔树的根哈希值,
若有,则证明争议的跨链消息是历史存在过的跨链消息,该跨链消息不是伪造的,若无,则
证明争议的跨链消息不是历史存在过的跨链消息,该跨链消息是伪造的。
[0047] S130:目标链根据跨链消息和第一默克尔证明,计算相应的第一默克尔树的第一根哈希值,并查询主链中是否保存有与第一根哈希值相同的根哈希值。
[0048] 在一些可选的实施方式中,当目标链从源链获得跨链消息和跨链消息对应的第一默克尔证明后,目标链的预设节点可以根据跨链消息及其对应的第一默克尔证明,计算出
相应的第一默克尔树的根哈希值(即第一根哈希值)。然后预设节点生成查询请求,该查询
请求携带了第一根哈希值。预设节点将查询请求发送给目标链对应的骨干节点,并通过骨
干节点将查询请求发送给对应的主链节点。
[0049] 主链节点在接收到目标链的查询请求后,以查询请求携带的第一根哈希值为索引,查询自身是否保存有与第一根哈希值相同的根哈希值,并将查询结果反馈给目标链。
[0050] 步骤S140:在主链中保存有与第一根哈希值相同的根哈希值的情况下,目标链处理跨链消息。
[0051] 在一些可选的实施方式中,如果跨链消息是一个跨链交易,则当主链中保存有与第一根哈希值相同的根哈希值时,目标链才执行跨链交易。其中,目标链在执行跨链交易
时,可以根据跨链交易携带的智能合约地址和合约方法标识,调用相应的智能合约,并执行
该智能合约中的相应合约方法。如果跨链消息单纯是需要同步给目标链进行保存的数据,
则当主链中保存有与第一根哈希值相同的根哈希值时,目标链才将该跨链消息记录至区块
保存。
[0052] 本申请中,目标链从源链处获取跨链消息和跨链消息对应的第一默克尔证明,并根据跨链消息和第一默克尔证明,计算相应的第一默克尔树的第一根哈希值,然后查询主
链中是否保存有相同的根哈希值。如果保存有,则说明主链记录有跨链消息对应的默克尔
树的根哈希值,而该根哈希值可以作为日后处理争议的依据,同时也说明目标链在直接从
源链获取跨链消息的过程中,跨链消息没有被篡改。在此情况下,目标链才对跨链消息进行
处理。可见本申请可以降低跨链交互期间主链的消息处理压力,并提升跨链消息的传递可
靠性。
[0053] 在一些可选的实施方式中,考虑到目标链依赖于某一个主链节点查询是否保存有与第一根哈希值相同的根哈希值,因此该主链节点存在作恶可能。虽然主链及主链节点通
常默认为是可信的,但是为了尽可能提升安全性,本申请中,主链的每个主链节点在获得每
个子链发送的根哈希值后,还可以根据每个子链发送的根哈希值和每个子链的历史根哈希
值,构建第二默克尔树,并将该第二默克尔树的根哈希值保存至主链新生成的区块中。
[0054] 在跨链期间,当主链节点查询到与第一根哈希值相同的根哈希值,并向目标链反馈查询结果时,主链节点还可以将该根哈希值对应的第二默克尔证明反馈给目标链。目标
链根据根哈希值和第二默克尔证明,计算相应的第二默克尔树的第二根哈希值,并查询主
链的区块中是否保存有与第二根哈希值相同的根哈希值。
[0055] 如果主链节点中保存有与第一根哈希值相同的根哈希值,且主链的区块中保存有与第二根哈希值相同的根哈希值,目标链才处理跨链消息。否则,主链节点不处理跨链消
息。
[0056] 本申请中,通过为各个子链发送的根哈希值进一步构建第二默克尔树,并将第二默克尔树的根哈希值作为区块数据,记录在主链新生成的区块中,可以防止第二默克尔树
的根哈希值被篡改。此外,目标链在根据根哈希值和第二默克尔证明,计算出第二根哈希值
后,通过查询主链的区块中是否记录有相同的根哈希值。若是,则说明主链区块中记录有第
一根哈希值对应的默克尔树的根哈希值,进而证明主链节点对第一根哈希值的查询结果是
可信的,或者也可以直接证明主链中保存有与第一根哈希值相同的根哈希值。在此情况下,
目标链才处理跨链消息,从而可以进一步提高跨链安全性。
[0057] 以上,本申请通过一些实施例提出了跨链消息可靠传递方法。以下,本申请通过另一些实施例提出跨链消息可靠传递方法的更详细实施方式。
[0058] 参考图2,图2是本申请一实施例提出的子链生成第一默克尔树的示意图。如图2所示,子链A为其他每个子链分别建立了一个跨链消息队列,每个跨链消息队列用于记录在当
前区块内包括的相应跨链消息。为便于理解,如图2所示,子链A为子链B建立的跨链消息队
列b中,包括跨链消息b1、跨链消息b2以及跨链消息b3,这三个跨链消息同时被记录在子链A
当前生成的区块中。此外,这三个跨链消息在跨链消息队列b中的排序和在当前区块中的打
包顺序一致,因此也与三个跨链消息在子链A中的处理顺序一致。
[0059] 同样地,如图2所示,子链A为子链C建立的跨链消息队列c中,包括跨链消息c1和跨链消息c2,这两个跨链消息同时被记录在子链A当前生成的区块中。此外,这两个跨链消息
在跨链消息队列c中的排序和在当前区块中的打包顺序一致,因此也与两个跨链消息在子
链A中的处理顺序一致。子链A为子链D建立的跨链消息队列d中,包括跨链消息d1、跨链消息
d2以及跨链消息d3,这三个跨链消息同时被记录在子链A当前生成的区块中。此外,这三个
跨链消息在跨链消息队列d中的排序和在当前区块中的打包顺序一致,因此也与三个跨链
消息在子链A中的处理顺序一致。
[0060] 如图2所示,子链A生成每个跨链消息的哈希值,并根据跨链消息在跨链消息队列中的排序,生成一个默克尔树,也即是前述第一默克尔树。子链A保存该第一默克尔树,并将
该第一默克尔树的根哈希值和对应区块的区块高度发送给主链保存。本申请中,子链A每生
成一个区块,就会根据该区块中的跨链消息对应生成一棵第一默克尔树。
[0061] 需要说明的是,由于子链A根据多个跨链消息在子链A中的处理顺序,为多个跨链消息生成第一默克尔树,因此第一默克尔树的根哈希值可以反映多个跨链消息在子链A中
的处理顺序。如果将来对跨链消息的执行顺序产生争议时,可以根据第一默克尔树的根哈
希值,来验证跨链消息的实际处理顺序。
[0062] 子链A在每生成一个区块以及该区块对应的第一默克尔树之后,会将该区块的区块高度和该第一默克尔树的根哈希值发送给主链保存。同样地,其他子链(例如子链B、子链
C、子链D)也会在生成区块和第一默克尔树之后,将区块高度和根哈希值发送给主链保存。
[0063] 如下表所示,下表是主链中每个主链节点保存的根哈希值列表。
[0064]
[0065] 上表中,第一行表示主链的区块高度,每一列表示主链相应高度区块具体新增了哪些子链的哪些根哈希值。以第三列为例,表示主链区块高度height等于002的区块新增了
以下根哈希值:子链A的区块高度等于002的区块所对应的第一默克尔树的根哈希值、子链B
的区块高度等于003的区块所对应的第一默克尔树的根哈希值、子链C的区块高度等003的
区块所对应的第一默克尔树的根哈希值。
[0066] 又以第四列为例,表示主链区块高度height等于3的区块新增了以下根哈希值:子链A的区块高度等于3的区块所对应的第一默克尔树的根哈希值、子链C的区块高度等于7的
区块所对应的第一默克尔树的根哈希值。
[0067] 此外,每个主链节点在生成主链的每个区块时,还会根据新增的根哈希值和历史根哈希值,形成该区块对应的第二默克尔树,并将该第二默克尔树的根哈希值记录至该区
块的区块头中,从而使得第二默克尔树的根哈希值随区块一起被共识。本申请中,通过将第
二默克尔树的根哈希值记录在区块头中,可以使得主链的轻节也能保存并记录第二默克尔
树的根哈希值。
[0068] 为便于理解,参考图3,图3是本申请一实施例提出的第二默克尔树的示意图。如图3所示,每个主链节点在为主链区块高度等于003的区块生成相应的第二默克尔树时,会根
据上表所示内容,基于新增的根哈希值(root_A height_003;root_C height_007)、以及历
史根哈希值(root_A height_001;root_A height_002;root_B height_001;root_B 
height_003;root_C height_001;root_C height_003),生成区块003对应的第二默克尔
树,进而得到该第二默克尔树的根哈希值merkle root。此外,每个主链节点会将该第二默
克尔树的根哈希值merkle root记录至区块003的区块头中,从而使得该根哈希值merkle 
root随区块003一起被共识。需要说明的是,区块003的区块头中除了包括第二默克尔树的
根哈希值merkle root,还包括主链交易的根哈希值,即区块体中记录的多个主链交易所形
成的默克尔树的根哈希值。
[0069] 当某个主链节点接收到相应子链的查询请求后,该主链节点以查询请求携带的第一根哈希值为索引,查询自身保存的根哈希值列表中,是否记录该第一根哈希值。如果记录
有,则主链节点进一步根据该根哈希值对应的主链区块高度,查询到相应主链区块对应的
第二默克尔树,从而根据该第二默克尔树,为该根哈希值生成相应的第二默克尔证明。
[0070] 为便于理解,示例性地,假设主链节点接收到子链A发送的查询请求,主链节点以查询请求携带的第一根哈希值为索引,查询到自身保存的根哈希值列表中,根哈希值root_
C height_007与第一根哈希值相同。因此主链节点进一步根据root_C height_007对应的
主链区块高度003,查询到主链区块003对应的第二默克尔树,即图3所示的默克尔树。主链
节点根据图3所示的默克尔树,为root_C height_007生成相应的第二默克尔证明。
[0071] 主链节点生成第二默克尔证明后,可以将查询结果和第二默克尔证明反馈给子链。子链接收到第二默克尔证明后,可以根据第一根哈希值和第二默克尔证明,生成相应的
第二默克尔树的第二根哈希值。子链后续可以查询主链区块的区块头中是否记录有该第二
根哈希值,从而验证主链节点的查询结果是可信。如果区块头中记录有该第二根哈希值,则
主链节点的查询结果是可信的。
[0072] 以上,本申请通过一些实施例提出了跨链消息可靠传递方法,上述跨链消息可靠传递方法应用于整个跨链系统。以下,本申请通过另一些实施例提供一种应用于子链的跨
链消息可靠传递方法。以下应用于子链的跨链消息可靠传递方法的具体实施方式,可参考
上述实施例,为避免重复,以下对应用于子链的跨链消息可靠传递方法进行简要介绍。
[0073] 参考图4,图4是本申请一实施例提出的跨链消息可靠传递方法的流程示意图,该方法应用于跨链系统的多个子链中的任意一个子链,此外跨链系统还包括主链。如图4所
示,该方法包括以下步骤:
[0074] S410:接收主链发送的跨链消息哈希值和第一子链标识,跨链消息哈希值是第一子链标识对应的子链发送给主链的。
[0075] S420:根据第一子链标识和哈希值,从第一子链标识对应的子链处,获取跨链消息和跨链消息对应的第一默克尔证明。
[0076] S430:根据跨链消息和第一默克尔证明,计算相应的第一默克尔树的第一根哈希值,并查询主链中是否保存有与第一根哈希值相同的根哈希值。
[0077] S440:在主链中保存有与第一根哈希值相同的根哈希值的情况下,处理跨链消息。
[0078] 在一些可选的实施方式中,每生成一个区块后,还根据该区块中记录的跨链消息,生成第一默克尔树,并将该第一默克尔树的根哈希值发送给主链的主链节点进行保存。
[0079] 在一些可选的实施方式中,跨链系统还包括多个骨干节点,每个骨干节点对应一个子链,每个骨干节点还对应主链中的部分主链节点,每个骨干节点用于连接对应的子链
和对应的主链节点。子链在查询主链中是否保存有与第一根哈希值相同的根哈希值期间,
具体可以向对应的骨干节点发送携带有第一根哈希值的查询请求,使该骨干节点将查询请
求提交给该骨干节点对应的主链节点,从而使得对应的主链节点查询自身是否保存有与第
一根哈希值相同的根哈希值,并将查询结果反馈给该骨干节点。然后子链接收对应的骨干
节点反馈的查询结果。
[0080] 在一些可选的实施方式中,子链在接收对应的骨干节点反馈的查询结果时,还接收对应的骨干节点反馈的第二默克尔证明,第二默克尔证明是对应的主链节点在查询到与
第一根哈希值相同的根哈希值时,对应的主链节点为该根哈希值生成的默克尔证明。
[0081] 子链还根据第一根哈希值和第二默克尔证明,计算相应的第二默克尔树的第二根哈希值,并查询主链的区块中是否保存有与第二根哈希值相同的根哈希值。本申请中,主链
还用于根据每个子链发送的根哈希值和每个子链的历史根哈希值,构建第二默克尔树,并
将该第二默克尔树的根哈希值保存至主链新生成的区块中。
[0082] 子链在执行上述步骤S440时,具体可以在主链的主链节点中保存有与第一根哈希值相同的根哈希值,且主链的区块中保存有与第二根哈希值相同的根哈希值的情况下,才
处理跨链消息。
[0083] 参考图5,图5是本申请一实施例提出的跨链消息可靠传递装置的结构示意图,该装置应用于跨链系统的多个子链中的任意一个子链,其中,跨链系统还包括主链。如图5所
示,该装置包括:
[0084] 哈希值接收模块510,用于接收主链发送的跨链消息哈希值和第一子链标识,跨链消息哈希值是第一子链标识对应的子链发送给主链的。
[0085] 跨链消息获取模块520,用于根据第一子链标识和哈希值,从第一子链标识对应的子链处,获取跨链消息和跨链消息对应的第一默克尔证明。
[0086] 第一根哈希值查询模块530,用于根据跨链消息和第一默克尔证明,计算相应的第一默克尔树的第一根哈希值,并查询主链中是否保存有与第一根哈希值相同的根哈希值。
[0087] 跨链消息处理模块540,用于在主链中保存有与第一根哈希值相同的根哈希值的情况下,处理跨链消息。
[0088] 在一些可选的实施方式中,如图5所示,该装置还包括根哈希值生成模块550。根哈希值生成模块550用于:每生成一个区块后,根据该区块中记录的跨链消息,生成第一默克
尔树,并将该第一默克尔树的根哈希值发送给主链的主链节点进行保存。
[0089] 在一些可选的实施方式中,跨链系统还包括多个骨干节点,每个骨干节点对应一个子链,每个骨干节点还对应主链中的部分主链节点,每个骨干节点用于连接对应的子链
和对应的主链节点。根哈希值查询模块530具体用于:向对应的骨干节点发送携带有第一根
哈希值的查询请求,使该骨干节点将查询请求提交给该骨干节点对应的主链节点,从而使
得对应的主链节点查询自身是否保存有与第一根哈希值相同的根哈希值,并将查询结果反
馈给该骨干节点。根哈希值查询模块530还用于接收对应的骨干节点反馈的查询结果。
[0090] 在一些可选的实施方式中,根哈希值查询模块530还用于接收对应的骨干节点反馈的第二默克尔证明,第二默克尔证明是对应的主链节点在查询到与第一根哈希值相同的
根哈希值时,对应的主链节点为该根哈希值生成的默克尔证明。
[0091] 如图5所示,该装置还包括第二根哈希值查询模块560,用于根据第一根哈希值和第二默克尔证明,计算相应的第二默克尔树的第二根哈希值,并查询主链的区块中是否保
存有与第二根哈希值相同的根哈希值。本申请中,主链还用于根据每个子链发送的根哈希
值和每个子链的历史根哈希值,构建第二默克尔树,并将该第二默克尔树的根哈希值保存
至主链新生成的区块中。
[0092] 跨链消息处理模块540具体用于:在主链的主链节点中保存有与第一根哈希值相同的根哈希值,且主链的区块中保存有与第二根哈希值相同的根哈希值的情况下,才处理
跨链消息。
[0093] 需要说明的是,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0094] 参考图6,图6是本申请一实施例提供的电子设备的结构框图,该电子设备600包括处理器610以及存储器620以及一个或多个应用程序,其中一个或多个应用程序被存储在存
储器620中并被配置为由一个或多个处理器610执行,一个或多个程序配置用于执行上述跨
链消息可靠传递方法。
[0095] 本申请中的电子设备600可以包括一个或多个如下部件:处理器610、存储器620、以及一个或多个应用程序,其中一个或多个应用程序可以被存储在存储器620中并被配置
为由一个或多个处理器610执行,一个或多个程序配置用于执行如前述方法实施例所描述
的方法。
[0096] 处理器610可以包括一个或者多个处理核。处理器610利用各种接口和线路连接整个电子设备600内的各个部分,通过运行或执行存储在存储器620内的指令、程序、代码集或
指令集,以及调用存储在存储器620内的数据,执行电子设备600的各种功能和处理数据。可
选地,处理器610可以采用数字信号处理(DigitalSignalProcessing,DSP)、现场可编程门
阵列(Field-ProgrammableGateArray,FPGA)、可编程逻辑阵列
(ProgrammableLogicArray,PLA)中的至少一种硬件形式来实现。处理器610可集成中央处
理器(CentralProcessingUnit,CPU)、图像处理器(GraphicsProcessingUnit,GPU)和调制
解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;
GPU用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述
调制解调器也可以不集成到处理器610中,单独通过一块通信芯片进行实现。
[0097] 存储器620可以包括随机存储器(RandomAccessMemory,RAM),也可以包括只读存储器(Read‑OnlyMemory)。存储器620可用于存储指令、程序、代码、代码集或指令集。存储器
620可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、
用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现
上述各个方法实施例的指令等。存储数据区还可以存储电子设备600在使用中所创建的数
据等。
[0098] 本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实
施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机
可用存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程序产
品的形式。
[0099] 本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流
程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序
指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产
生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实
现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0100] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指
令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或
多个方框中指定的功能。
[0101] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或
其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一
个方框或多个方框中指定的功能的步骤。
[0102] 尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优
选实施例以及落入本申请范围的所有变更和修改。
[0103] 显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围
之内,则本申请也意图包含这些改动和变型在内。