首页> 中国专利> 一种用于跨链的多链消息表事务处理方法及跨链系统

一种用于跨链的多链消息表事务处理方法及跨链系统

摘要

本发明公开了一种用于跨链的多链消息表事务处理方法及跨链系统,本发明通过中继链事务合约负责将总事务Tr拆分成子事务Tri,并初始化各子事务状态si,其中中继链事务合约维护一张事务表(多链消息表),各网关G都会查询这个事务表的事务状态,一旦查询失败会超时进行业务上的回滚,各应用链子事务Tri执行成功后,通过网关更新相应中继链上的子事务状态si,当最终所有子事务执行成功,总事务才算成功,只要一个子事务失败,总事务就会失败。本发明的多链消息表事务处理方法和跨链系统通过内置的跨链事务管理合约保证跨链事务最终的一致性。

著录项

  • 公开/公告号CN112882802A

    专利类型发明专利

  • 公开/公告日2021-06-01

    原文格式PDF

  • 申请/专利权人 杭州云象网络技术有限公司;

    申请/专利号CN202110137193.5

  • 申请日2021-02-01

  • 分类号G06F9/46(20060101);G06F21/64(20130101);H04L29/08(20060101);

  • 代理机构33260 杭州五洲普华专利代理事务所(特殊普通合伙);

  • 代理人徐晶晶

  • 地址 310000 浙江省杭州市余杭区仓前街道海创科技中心2幢3层301

  • 入库时间 2023-06-19 11:11:32

说明书

技术领域

本发明属于区块链跨链技术领域,具体涉及一种用于跨链的多链消息表事务处理方法及跨链系统。

背景技术

不同的区块链平台往往采用不同的底层架构、数据结构、网络链路和技术接口。各个区块链平台拥有各自丰富的应用、数据和用户,但受限于底层架构、数据结构、网络链路和技术接口的不同,应用、数据和用户往往很难在两个不同的平台上实现转移。跨链技术作为打通不同平台之间的桥梁,起到了极其关键的作用。为了能够让不同平台上的数据能够互通,就需要解决跨链过程中多链互通的事务处理问题,以解决区块链之间因底层架构、数据结构、链路网络、接口技术等多维异构性导致无法互联互通等关键问题。通常,在跨链过程中,可采用三种常用的跨链机制:第一种是哈希锁定,第二种是公证人机制,第三种是利用中继链的机制。

但是在目前的三种跨链方法过程中,哈希锁定是一种专门用于转移数字货币的跨链方式,通过带有时限的区块链账户在链上对数字货币进行锁定,在另一条区块链中生成对应的代币,一般适用于两条区块链间的跨链,其通用性较差。见证人机制通过一个中心化、可信的见证人来进行不同区块链中数据的转移,需要跨链的区块链网络以及相关操作人员完全信任见证人,容易造成严重的单点风险问题。中继链机制通过构建链与链之间可信中继节点,对不同链上的数据进行中继转移,但其结构及其复杂,流程繁琐,效率极低,并且会引入中继链的组织管理问题,难以落地。

总之,目前实现跨链有各种方案,但其落地均十分极其困难。无论是哈希锁定、见证人机制还是中继链机制,究根其源,导致其落地困难的本质之一是在实现跨链的过程中事务处理无法高效和始终保持一致性。

因此亟需一种用于跨链的事务处理方法和系统,实现跨链事务高效的执行,以及保证执行过程中事务的最终一致性,进而实现跨链应用的落地以及高效执行。

发明内容

本发明基于上述背景和现有技术所存在的问题,拟设计一种用于跨链的多链消息表事务处理方法及跨链系统,其能够在多维(在本发明中具体为(n+1)维)中继链跨链模型下,通过内置的跨链事务管理合约保证跨链事务的最终一致性。本发明还有一个目的是通过用于多链(在本发明中具体为(n+1)条链)消息表事务处理的跨链系统,提高多维(在本发明中具体为(n+1)维)跨链事务处理的效率,同时保证事务执行的原子性,以便跨链事务安全高效执行。

为了实现本发明的这些目的和其它优点,提供了一种用于跨链的多链消息表事务处理方法及跨链系统。

一种用于跨链的多链消息表事务处理方法,应用于应用链、网关、中继链和网络网关的跨链网络中,网络网关包含若干个子网关,包括以下步骤:

第一应用链接收到客户端发起的调用请求,生成总事务,所述总事务包括总事务身份信息及总事务状态,冻结资产数据,将总事务发送至第一网关;

第一网关接收并记录总事务状态以及将总事务发送给第一中继链,并查询第一中继链中总事务状态;

第一中继链将总事务拆解成若干子事务并生成对应的子事务身份信息,将子事务及其对应的子事务状态和子事务身份信息分别存储于第二中继链的数据库消息表和第一中继链的多链消息表中,并发送至子网关;

子网关不断查询第一中继链中的总事务状态,将子事务经第二中继链发送至第二应用链;

第二应用链执行子事务,当任一子事务执行失败,则总事务执行失败,并修改对应子事务状态,子事务全部执行成功则冻结自身的资产数据,将执行成功结果反馈至第二网关;

第二网关修改子事务状态并通知第二中继链修改子事务状态;

子网关不断查询第二中继链上子事务状态并通知第一中继链修改子事务状态;

第一中继链、第一网关和子网关分别对各自存储的总事务状态进行修改,同时各网关通知各应用链提交修改。

作为一种可实施方式,所述生成总事务,具体步骤包括:

第一网关接收到客户端调用应用合约发起跨链调用;

预冻结应用合约上的资产数据;

跨链合约生成总事务;

其中,所述资产数据存储于应用合约与跨链合约的账本数据中,所述应用合约与跨链合约的账本数据存储于第一应用链的内部账本中。

作为一种可实施方式,将总事务状态表示为S,将子事务状态表示为si,总事务表示为Tr,子事务表示为Tri,为总事务状态及子事务状态的制定三种情况,具体如下:

S=si=f:表示当所有子事务中任意一个处于此状态时,则通知第一应用链回滚数据,其中,f表示事务执行失败;

S=si=p:设置超时时钟阈值,当事务长期处于p状态并时钟阈值时,将事务状态变为f,发起事务回滚,其中,p表示事务未完成执行;

S=si=s:表示当所有子事务状态处于此状态时,通知第一应用链提交数据,其中,s表示事务成功执行。

作为一种可实施方式,基于为总事务状态及子事务状态的制定三种情况,第一网关实时从多链消息表中查询总事务状态是否为S=s,则有以下操作:

当查询到总事务状态S=s后,事务执行成功,第一网关通知第一应用链提交预冻结的数据;

当查询到总事务状态S=f,事务执行失败,通知第一应用链回滚预冻结的资产数据;

当查询到总事务状态S=p,事务未完成执行,并进行超时计时;

其中,第一网关的多链消息表的内存状态存储于KV数据库中,并保持实时同步更新。

作为一种可实施方式,第一网关查询第一中继链中的事务状态时,查找中继链账本的数据结构中数据地图中对应的键值地图,通过所述键值地图找到事务状态。

作为一种可实施方式,当第一网关执行查询事务状态超时时,则第一网关将第一中继链中总事务状态设置为S=f,并且通知第一应用链进行回滚;当子事务状态为si=f或si=s后,将所有网关中对应所述子事务的条目删除。

作为一种可实施方式,在第二应用链执行子事务时,同时预冻结第二应用链上的应用合约数据后,总事务状态和子事务状态发生变化;当所有第二应用链执行子事务成功,事务状态更新,具体步骤包括:

第二应用链通知第二网关子事务执行成功;

第二网关更新内存中的子事务状态si=s,并通知第二中继链更新子事务状态si;

第二中继链更新子事务状态si=s;

子网关在不断查询第二中继链上所有的子事务状态si,当查询结果中有任一si=f,则总事务状态

通知第一中继链更新多链消息表中子事务状态si;

第一中继链获得通知后,更新多链消息表中所有子事务状态si=s,进而更新总事务状态S=s;

第一网关和子网关都在不断查询总事务的状态,查询到总事务状态S=s后,分别通知第一应用链和第二应用链,其中通知第二应用链前先通知第二中继链,解冻预冻结的资产数据,并提交资产数据。

作为一种可实施方式,所述各网关通知各应用链提交修改,包括以下步骤:

所述第一网关通知第一应用链提交修改,子网关依次通知第二中继链和第二网关,所述第二网关通知第二应用链提交修改。

一种用于跨链的多链消息表事务跨链系统,包括应用链、网关、中继链和网络网关,所述网络网关包含若干个子网关,所述应用链至少包括第一应用链和第二应用链,所述网关至少包括第一网关和第二网关,所述中继链至少包括第一中继链和第二中继链:

所述第一应用链,用于接收到客户端发起的调用请求,生成总事务,所述总事务包括总事务身份信息及总事务状态,冻结资产数据,将总事务发送至第一网关;

所述第一网关,用于接收并记录总事务状态以及将总事务发送给第一中继链,并查询第一中继链中总事务状态;

所述第一中继链,用于将总事务拆解成若干子事务并生成对应的子事务身份信息,将子事务及其对应的子事务状态和子事务身份信息分别存储于第二中继链的数据库消息表和第一中继链的多链消息表中,并发送至子网关;

所述子网关,用于不断查询第一中继链中的总事务状态,将子事务经第二中继链和第二网关发送至第二应用链,用于不断查询第二中继链上子事务状态并通知第一中继链修改子事务状态;

所述第二网关,用于修改子事务状态并通知第二中继链修改子事务状态;

所述第二中继链,用于接收子网关发送的子事务及修改子事务状态,所述第二中继链包括数据库消息表,用于存储子事务及其对应的子状态和身份信息;

所述第二应用链,用于执行子事务,当任一子事务执行失败,则总事务执行失败,并修改对应子事务的状态,子事务全部执行成功则冻结自身数据,将执行成功结果反馈至第二网关;

所述第一中继链、所述第一网关和所述子网关分别对各自存储的总事务状态进行修改。

本发明的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明的研究和实践而为本领域的技术人员所理解。本发明的有益效果至少包括:本发明通过中继链RAtr将总事务Tr拆解成子事务Tri,

附图说明

图1为本发明用于跨链的多链消息表事务处理方法的流程图;

图2为本发明2维中继链跨链模型图及其多链事务表跨链流程实现图。

具体实施方式

为了清晰地阐述本发明,使本发明实施例的目的、技术方案和优点更加清楚,下面结合了本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,以令本领域技术人员参照说明书文字能够据以实施。下面将附图结合具体实施方式对本发明的技术加以详细说明。

本发明的多维指的是(n+1)维,多链具体为(n+1)条链。其中,第一应用链包括多条应用链,表示为应用链Atr;第一网关可以包括多个子网关的形式,表示为网关GAtr;第一中继链表示为中继链RAtr;子网关表示为网关Xi,位于网关网络中,网关网络表示为网关X,Xi=X1,X2,……Xn;第二网关可以为多个网关,表示为GBi,GBi=GB1,GB2,……GBn;第二中继链可以为多条中继链,表示为RBi,RBi=RB1,RB2,……RBn;第二应用链可以为多条应用链,表示为应用链ABi,ABi=AB1,AB2,……ABn;总事务表示为总事务Tr,其对应的子事务,表示为Tri,

具体实施例1:

图1示出了根据本发明的一种实现形式,示出了本发明用于跨链的多链消息表事务处理方法的流程图,在基于应用链、网关和中继链三者的跨链网络中,多链消息表事务处理方法的具体实现流程包括:

Step1:客户端A发起调用,并将该调用请求发送到应用链Atr;

Step2:应用链Atr生成总事务Tr,并为总事务Tr生成总事务身份信息IDtr,同时设置事务执行状态为pending(未完成);所述生成总事务Tr的步骤包括:

S2.1:客户端A调用应用合约发起跨链调用;

S2.2:预冻结应用合约上的资产数据;

S2.3:跨链合约生成总事务IDtr;

其中,所述应用合约与跨链合约的账本数据存储于应用链Atr的内部账本中。

Step3:应用链Atr内部冻结数据;

Step4:应用链Atr将总事务Tr发送给客户端A的网关GAtr;

Step5:在网关GAtr的内存中记录总事务Tr状态;其中,设置所述总事务Tr及其子事务Tri的三种状态:

①S=si=f:failed(事务执行失败),当任一子事务Tri处于此状态时,无论其他子事务执行情况如何,通知应用链Atr回滚数据;

②S=si=p:pending(事务未完成执行),设置超时时钟阈值t,当事务长期处于pending状态,超过时钟阈值t,调用事务状态函数使事务状态变为failed,发起事务回滚;

③S=si=s:success(事务成功执行),当事务处于此状态时,系统通知应用链提交数据,其中:当所有子事务Tri处于此状态时,系统通知应用链Atr提交数据。

其中,各网关实时并更新查询所述三种状态的步骤包括:

S5.1:网关GAtr在将总事务Tr交付给中继链RAtr之后,会不间断地(实时)从多链消息表中查询总事务Tr的状态S是否为S=s(success);

S5.2:当查询到事务状态S=s后,网关GAtr会通知应用链Atr提交预冻结的数据;

S5.3:当查询的结果为S=f(failed),通知应用链Atr回滚预冻结的数据;

S4.4:当查询到事务状态S=p(pending,事务未完成执行),触发时钟计时器,开始超时计时。

所述网关GAtr的多链消息表(内存状态表)的内存状态存储于KV数据库(leveldb)中,并保持实时同步更新,将以防网关重启后事务丢失。

其中,当网关GAtr执行查询事务状态S超时,网关GAtr将中继链RAtr中总事务Tr的状态S设置为S=f(failed),并且通知应用链Atr进行回滚;当子事务Tri的状态为si=f(failed)或si=s(success)后,将所有网关中对应所述子事务Tri的条目删除。

Step6:网关GAtr将总事务Tr发送给中继链RAtr;

Step7:网关GAtr查询中继链RAtr中总事务Tr状态;其中,网关GAtr查询中继链RAtr中的事务状态S时,查找中继链账本的数据结构中数据地图(data map)中对应的键值(key)地图(key map),通过所述键值地图找到S。

Step8:中继链RAtr将总事务Tr拆解成子事务Tri并为事务Tri生成子事务身份信息IDtri,

Step9:将所述子事务Tri及其对应的子状态si和IDtri分别存储于中继链RBi的数据库消息表中,同时将所述子事务Tri及其对应的子状态si和IDtri存储于中继链RAtr中的数据库的多链消息表中,并发送给网关网络X中的子网关Xi,所述Xi为Xi=X1,X2,……Xn;

Step10:网关Xi同时会不断查询中继链Atr中的总事务Tr状态,所述总事务Tr状态S是多链消息表中所有子事务的对应的状态si的并集合,所述

Step11:网关Xi将子事务Tri分别发送给中继链RBi,所述RBi=RB1,RB2,……RBn;

Step12:中继链RBi将子事务Tri发送给网关GBi,所述GBi=GB1,GB2,……GBn;

Step13:网关GBi将子事务Tri发送给应用链ABi,应用链ABi执行子事务Tri;当任一ABi执行失败,总事务Tr执行失败,修改状态si=f,S={∪si}=f;其中,在应用链ABi执行子事务Tri(预冻结应用链ABi上的应用合约数据)后,总事务状态S和子事务状态si发生变化;当所有应用链ABi执行子事务Tri成功后,事务状态更新的具体实现步骤包括:

S13.1:应用链ABi通知网关GBi,子事务Tri执行成功;

S13.2:网关GBi更新内存中的子事务Tri状态si=s(success事务成功执行),并通知中继链RBi更新子事务Tri状态si;

S13.3:中继链RBi更新子事务Tri状态si=s(success);

S13.4:网关Xi在不断查询中继链RBi上所有的子事务Tri状态si,当查询结果中有任一si=f(failed事务执行失败),则

S13.5:通知中继链RAtr更新多链消息表中子事务Tri状态si;

S13.6:中继链RAtr获得通知后,更新多链消息表中所有子事务Tri状态si=s(success),进而更新总事务Tr状态S=s;

S13.7:网关GAtr和网关Xi都在不断查询总事务Tr的状态,查询到S=s后,分别通知应用链Atr和应用链ABi,其中通知所述应用链ABi前先通知中继链RBi,解冻预冻结的数据,并提交数据。

Step14:应用链ABi,所述ABi=AB1,AB2,……ABn全部执行成功,冻结自身数据,同时返回执行成功结果给网关GBi;

Step15:网关GBi修改子事务Tri状态si=s(success);

Step16:网关GBi通知中继链RBi修改子事务Tri状态si=s(success);

Step17:网关Xi不断查询中继链RBi上子事务Tri状态si;

Step18:网关Xi通知中继链RAtr修改子事务Tri状态si;

Step19:中继链RAtr修改总事务Tr状态si=s(success);

Step20:网关GAtr和网关Xi修改各自内存中总事务Tr状态S=s(success);

Step21:各网关通知各应用链提交修改:网关GAtr通知应用链Atr提交修改;网关Xi通知中继链RBi,中继链RBi通知网关GBi,网关GBi通知应用链ABi提交修改。

具体实施例2:

为了简化本发明,当n=1时,本发明为一个二维中继链模型下的2条链跨链网络,实现流程图如图2所示,其中总事务Tr为事务1,子事务Tri,此处i=1,为事务2,因为总事务1的子事务只有子事务2,因此,中继链A更新总事务1状态为success,即代表整个事务调用成功。由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

具体实施例3:

本实施例提出了一种用于多链消息表事务处理的跨链系统,其具体实现组成如图2所示,具体组成包括:

跨链调用发起模块:用于客户端A发起跨链调用并发送调用请求到应用链Atr;

事务身份信息ID生成及处理模块:用于生成事务IDtr及其子事务IDtri,i=1,2,……,n,n属于自然数;

应用链数据冻结与解冻模块:用于为应用链Atr内部冻结与解冻数据;用于Abi冻结自身数据;

事务发送处理模块:用于应用链Atr将总事务Tr发送给网关GAtr;用于将所述子事务Tri及其对应的子状态si和IDtri发送给网关Xi;用于网关Xi将子事务Tri分别发送给中继链RBi;用于中继链RBi将子事务Tri发送给网关GBi;用于网关GBi将子事务Tri发送给用于链Abi;用于在应用链Abi冻结自身数据同时返回执行成功结果给网关GBi;

事务及其状态和身份信息存储模块:用于网关GAtr的内存中记录总事务Tr状态;用于中继链RAtr的消息表及多链消息表中继记录总事务Tr状态S及其子事务Tri状态si;

事务状态查询模块:用于网关GAtr查询中继链RAtr中总事务Tr状态S;用于网关Xi不断查询中继链RAtr中的总事务Tr状态S及其子事务Tri状态si;

总事务拆解模块:用于中继链RAtr将总事务Tr拆解成子事务Tri,并同步通知事务身份信息ID生成及处理模块生成子身份信息IDtri,并同步通知事务及其状态和身份信息存储模块的多链消息表和消息表进行存储;

事务状态修改模块:用于网关GBi修改子事务Tri状态si;用于中继链RBi修改子事务Tri状态si;用于中继链RAtr修改总事务Tr状态S;用于网关GAtr和Xi修改各自内存中总事务Tr状态S;

事务消息通知模块:用于个模块之间的消息通知;用于网关GBi通知中继链RBi修改子事务Tri状态si;用于网关Xi通知中继链Atr修改子事务Tri状态si;用于各网关通知各应用链提交修改。

具体实施例4:

本实施例提出了一种用于多链消息表事务处理的跨链系统的另一种实现形式,具体组成包括应用链、网关、中继链和网络网关,所述网络网关包含若干个子网关,所述应用链至少包括第一应用链和第二应用链,所述网关至少包括第一网关和第二网关,所述中继链至少包括第一中继链和第二中继链::

所述第一应用链,用于接收到客户端发起的调用请求,生成总事务,所述总事务包括总事务身份信息及总事务状态,冻结资产数据,将总事务发送至第一网关;

所述第一网关,用于接收并记录总事务状态以及将总事务发送给第一中继链,并查询第一中继链中总事务状态;

所述第一中继链,用于将总事务拆解成若干子事务并生成对应的子事务身份信息,将子事务及其对应的子事务状态和子事务身份信息分别存储于第二中继链的数据库消息表和第一中继链的多链消息表中,并发送至子网关;

所述子网关,用于不断查询第一中继链中的总事务状态,将子事务经第二中继链和第二网关发送至第二应用链,用于不断查询第二中继链上子事务状态并通知第一中继链修改子事务状态;

所述第二中继链,用于接收子网关发送的子事务及修改子事务状态,所述第二中继链包括数据库消息表,用于存储子事务及其对应的子状态和身份信息;

所述第二网关,用于修改子事务状态并通知第二中继链修改子事务状态;所述第二应用链,用于执行子事务,当任一子事务执行失败,则总事务执行失败,并修改对应子事务的状态,子事务全部执行成功则冻结自身数据,将执行成功结果反馈至第二网关;

所述第一中继链、所述第一网关和所述子网关分别对各自存储的总事务状态进行修改。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

这里说明的模块数量和处理规模是用来简化本发明的说明的。对本发明的多维中继链跨链模型及多链消息表的应用、修改和变化对本领域的技术人员来说是显而易见的。

上述对实施例的描述是为便于本技术领域的普通技术人员能理解和应用本发明。熟悉本领域技术的人员显然可以容易地对上述实施例做出各种修改,并把在此说明的一般原理应用到其他实施例中而不必经过创造性的劳动。因此,本发明不限于上述实施例,本领域技术人员根据本发明的揭示,对于本发明做出的改进和修改都应该在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号