一种高效的区块链交易验证与查询方法及系统
技术领域
本发明属于区块链技术领域,特别涉及一种高效的区块链交易验证与查询方法及系统。
背景技术
在第一代区块链技术中,客户端将交易单提交给记账节点,记账节点仅以交易单的sha256算法哈希值作为交易标识,记账节点将交易标识作为回执返回给客户端。记账节点通过交易单的时间戳等信息验证交易。只要交易单基本信息正确并且时间戳未超时则交易可被执行记录在链上,因此无法准确确认交易单会被记录在哪段区块区间内。所以当记账节点需要检验是否重复交易或检索交易记录信息时,使用交易标识必须在整个区块链账本里检索交易单,即全链检索。尽管记账节点通常会以交易标识为键值建立全链的交易索引以提高检索交易速度,但全链检索依然是个比较低效检索方案,并且随着账本的增大,检索效率随之降低。
并且,第一代区块链技术其共识算法采用POW算力证明算法,其共识算法本来就极低效和耗计算资源。所以全链检索的低效与共识算法的低效相比显得微不足道,此时,全链检索并非早期区块链技术的交易验证效率瓶颈。
随着区块链技术的发展和共识算法的进化,新的共识算法已经可以让区块链系统每秒处理交易能力提升到数千笔甚至数万笔,然而,普遍区块链系统依然采用单纯的交易哈希作为交易标识,决定了记账系统检查交易结果时必须全链检索,才达到检索交易结果目的。检索交易中对交易标识进行比较很耗计算资源,随着账本的增大比较数量随之增长,交易标识的比较消耗计算资源越多,交易检索效率越低,此时,全链检索低效的问题突出成为了交易验证效率的瓶颈。
因此,如何解决区块链技术中全链检索低效问题,提升交易验证与查询的效率,已成为本领域技术人员亟需解决的技术问题。
发明内容
鉴于上述问题,本发明提供一种至少解决上述部分技术问题的高效的区块链交易验证与查询方法方法及系统,将区块号区间加入到交易单信息中,无需全链检索,提高了区块链技术中交易验证与查询效率。
第一方面,本发明实施例提供一种高效的区块链交易验证与查询方法,该方法可以包括:
S1、客户端通过网络请求向记账节点端获取区块链的最大区间范围和最新区块号;
S2、所述客户端根据所述最大区间范围和最新区块号计算交易的区块号区间,并将其写入交易单;
S3、所述客户端将所述交易单提交到记账节点端;
S4、所述记账节点端根据所述交易单生成交易标识,并将所述交易标识作为交易回执返回给所述客户端;
S5、所述记账节点端对交易进行验证,验证通过后执行本交易,将所述交易单打包到最新区块,并将所述最新区块写入账本中;
S6、所述客户端通过所述交易回执获得交易标识,向所述记账节点端查询交易状态获得交易结果。
进一步地,所述步骤S1中,所述区块号为区块链账本中每个区块的序号,所述区块号为连续递增的整数集。
进一步地,所述步骤S2中所述客户端根据最大区间范围、最新区块号和区间计算算法,计算出交易被允许记录到区块链的区块号区间,将区块号区间写入交易单;区块区间信息由一个64位的整数n和一个8位的整数m组成,n代表区块区间的起始区块号,m代表从起始区块号开始的连续区块号个数;最大区间范围是指区块区间(n,m)的m的最大值,区块区间(n,m)表示交易只允许记录在此区间指定的区块范围;其中,
n的计算公式为:n=h+1;
m的计算公式为:m=[t/c+1];
公式中,h为最新区块号,t为交易超时值,c为区块产出周期,中括号代表取整;交易超时t和交易周期c由区块链系统初始预设定。
进一步地,所述步骤S4中,所述记账节点端根据所述交易单的内容采用sha256算法计算出256位的交易哈希值,将所述交易哈希值与所述区块区间(n,m)信息串连组成328位的交易标识;记账节点端将所述交易标识作为交易回执信息通过网络返回给所述客户端,所述客户端以所述交易标识作为后续查询交易结果的依据。
进一步地,所述步骤S5中包括:
S51、所述记账节点端先检查所述交易单基本信息的正确性,所述基本信息包括但不限于用户数字签名和账号状态;当检查到所述基本信息有误则终止本交易,无误则继续下一步验证;
S52、验证当前区块号是否在本交易指定的区块区间(n,m)对应的区块号范围;
如果当前区块号小于所述区块区间(n,m)的起始区块号,则本交易被缓存起来,等待生产下一个区块时再对本交易执行本步骤;
如果当前区块号大于所述区块区间(n,m)的最大区块号,则终止本交易;
如果当前区块号在所述区块区间(n,m)对应的区块号范围内,则继续下一步验证;
S53、根据步骤S4生成的所述交易标识验证本交易是否已经被记录到账本上;
所述记账节点端在所述区块区间(n,m)对应的区块号范围内进行检索,得到本交易是否已经记录在账本上的结果;
如果验证到本交易先前已经被记录到账本上,则终止本交易;
如果验证到本交易先前没有被记录到账本上,则执行本交易,将所述交易单打包进当前生产区块中;
当完成该区块的产出后,所述记账节点端将区块写入到账本中完成本交易记账。
进一步地,所述步骤S6中,所述客户端通过所述交易回执获得交易标识,多次向记账节点端查询交易状态获得交易结果;所述记账节点端收到客户端的交易查询指令后,根据所述客户端提供的交易标识中的区块区间(n,m)信息,计算定位到指定区块范围进行检索,并将检索结果返回给客户端。
进一步地,所述步骤S6中,所述客户端提交的查询信息包括但不限于将所述交易标识中的所述交易哈希值和区块区间(n,m)信息分离成其它数组结构传递到记账节点端。
第二方面,本发明实施例提供一种高效的区块链交易验证与查询系统,其包括:客户端和记账节点端,其中:
所述客户端用于发起交易,通过网络请求向记账节点端获取区块链的最大区间范围和最新区块号,根据所述最大区间范围和最新区块号计算出交易的区块号区间,并将其写入交易单,通过网络将所述交易单提交到记账节点端;
所述记账节点端通过网络持续收集来自所述客户端提交的交易单;将所述交易单生成交易标识,并将所述交易标识作为交易回执返回给客户端;
所述记账节点端对交易进行验证,验证通过后执行本交易,将所述交易单打包到最新区块,并将所述最新区块写入账本中;
所述客户端通过所述交易回执获得交易标识,向所述记账节点端查询交易状态获得交易结果。
与现有技术相比,本发明的有益效果至少包括:
1.本发明将区块号区间加入到交易单信息中,将区块号区间信息与交易单信息合成交易标识,记账节点仅需在区块区间验证交易标识即可检索出交易结果,无需全链检索,极大的提高了区块链技术中交易验证与查询效率。
2.采用本发明方案,区块号区间指定了有效起始区块号和块数,即使账本区块数无穷增大,检索交易时直接定位到有效起始区块号开始检索,检索效率极大提高,而且这个检索效率是不变的,与账本增长无关。
3.采用本发明方案,账本无需再为全链交易建一套以交易HASH为键,以交易单为值的交易对数据来辅助全链检索,可将账本大小缩小一半,解决了目前区块链一般一年产数十G账本数据,存贮开销巨大的问题。
4.采用本发明方案,由于交易区块区间的精确约束,对交易单的失效判断更精准;缩短了交易超时时限,避免因客户端和各记账节点之间时间难同步及时钟频率差异等因素导致超时判断分歧。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书以及附图中所特别指出的结构来实现和获得。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1为本发明提供的高效的区块链交易验证与查询方法的流程图;
图2为本发明提供的交易指定插入区块区间原理图;
图3为本发明提供的交易标识示意图;
图4为本发明提供的高效的区块链交易验证与查询系统结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
实施例一;
如图1所示,本发明实施例提供了一种高效的区块链交易验证与查询方法,至少包括以下步骤:
S1、客户端通过网络请求向记账节点端获取区块链的最大区间范围和最新区块号;
S2、所述客户端根据所述最大区间范围和最新区块号计算交易的区块号区间,并将其写入交易单;
S3、所述客户端将所述交易单提交到记账节点端;
S4、所述记账节点端根据所述交易单生成交易标识,并将所述交易标识作为交易回执返回给所述客户端;
S5、所述记账节点端对交易进行验证,验证通过后执行本交易,将所述交易单打包到最新区块,并将所述最新区块写入账本中;
S6、所述客户端通过所述交易回执获得交易标识,向所述记账节点端查询交易状态获得交易结果。
下面分别对上述各个步骤进行详细的说明,本发明实施例整体方法如下:
在步骤1中,客户端发起一笔新交易时,客户端先通过网络请求向记账节点端获取区块链的最大区间范围和最新高度(最新区块号),如附图2所示最新区块号记为h,区块号为区块链账本中每个区块的序号,区块号为连续递增的整数集;
在步骤2中,客户端根据当前区块链的最大区间范围、最新区块号和区间计算算法,计算出新发起的交易被允许记录到区块链的区块号区间,将区块区间信息写入交易单作为交易单内容的一部分;区块区间信息由两部分组成,分别是一个64位整数n,和一个8位的整数m。n代表区块区间的起始区块号,m代表从起始区块号开始的连续区块号个数;最大区间范围是指区块区间(n,m)的m的最大值,如附图2所示,区块区间(n,m)表示交易只允许记录在此区间指定的区块范围;例如区块区间(n,m)=(100,3)时,则交易只允许被记录在区块号为100,101,102的区块上。
n的计算公式为:n=h+1;
m的值与交易超时值t和区块产出周期c有关,m的计算公式为:m=[t/c+1];中括号代表取整。交易超时t和交易周期c由区块链系统初始预设定,例如交易超时t=20秒,区块产出周期c=3秒;则m=[20/3+1]=7。
在步骤3中,客户端通过网络请求将交易单提交到记账节点端。
在步骤4中,记账节点端根据交易单内容采用sha256算法计算出256位的哈希值,如附图3所示,将交易哈希值与区块区间信息(n,m)串连组成328位的交易标识;记账节点端将交易标识作为回执信息通过网络返回给客户端;客户端以此交易标识作为后续查询交易结果的依据。
在步骤5中,记账节点端验证交易单和打包进新区块记账;记账节点端先检查交易单基本信息的正确性例如用户数字签名和账号状态等,如果信息有误则终止本交易,无误则继续下一步;
验证当前生产的区块的区块号(简称“当前区块号”),是否在该交易指定的区块区间(n,m)指定的区块号范围,如果当前区块号小于区块区间的起始区块号,则该交易被缓存起来,等待生产下一个区块时再对本交易执行本步骤;如果当前区块号大于区块区间指定的最大区块号,则终止本交易,如果当前区块号在区块区间指定的区块号范围内,则继续下一步验证;
根据步骤4生成的交易标识验证交易,记账节点端根据交易标识中指定区块区间(n,m)计算得到指定的区块号范围,只需要在该区块号范围指定的区块内检索,即可得到该交易是否已经记录在账本上的结果;因为根据本发明算法的约定,该交易不可能被记录到区块区间(n,m)之外的其它区块,所以不需要全链检索达到高效验证;如果验证到本交易先前已经被记录到账本上,则终止此次交易执行,否则执行本次交易,将交易单打包进当前生产区块中;当完成该区块的产出后,记账节点将区块写入到账本中完成本交易记账。
在步骤6中,客户端通过交易回执获得交易标识,多次向记账节点端查询交易状态获得交易结果;客户端提交的查询信息包括但不限于将交易标识中的交易哈希值和区块区间(n,m)信息分离成其它数组结构传递到记账节点端;记账节点端收到客户端的交易查询指令后,根据客户端提供的交易标识中的区块区间(n,m)信息,计算定位到指定区块范围进行检索交易,并将检索结果返回给客户端;此交易查询也不需要全链检索达到高效查询目的;
至此,完成交易的高效验证记账和高效查询。
实施例二:
如图4所示,本发明实施例提供了一种高效的区块链交易验证与查询系统,至少包括:客户端和记账节点端,客户端和记账节点端通过网络相连;其中:
客户端和记账节点端可以通过诸如有线或无线网络等方式发送或接收信号;每个客户端和记账节点端可以是包括硬件、软件或内嵌逻辑组件或者两个或多个此类组件的组合的可与其他装置进行信息交换的装置,并能够执行由客户端和记账节点端实施或支持的合适的功能。例如,可以是智能手机、平板电脑、便携式电子邮件装置、电子书、手持游戏机和/或游戏控制器、笔记本电脑、上网本、手持电子装置、智能穿戴装置等等,其中包含有客户端程序和记账节点程序。
客户端用于发起交易,通过网络请求向记账节点端获取区块链的最大区间范围和最新区块号,根据最大区间范围和最新区块号计算出交易的区块号区间,并将其写入交易单,通过网络将交易单提交到记账节点端;
记账节点端通过网络持续收集来自客户端提交的交易单;将交易单生成交易标识,并将交易标识作为交易回执返回给客户端;
记账节点端对交易进行验证,验证通过后执行本交易,将交易单打包到最新区块,并将最新区块写入账本中;
客户端通过交易回执获得交易标识,向记账节点端查询交易状态获得交易结果。
本发明提供的一种高效的区块链交易验证与查询方法及系统,解决了全链检索低效的问题,提出了交易的“有效区块区间”概念,将区块号区间加入到交易单信息中,对交易严格指定可插入的区块区间,并将区块号区间信息与交易的哈希值组合成交易标识,让交易标识具备识别此交易的有效区块区间范围,记账节点仅需在有效区块区间检索交易标识即可检索出交易结果,无需全链检索,记账节点通过区块区间信息快速定位到指定的区块区间,实现以极少的检索比较次数达到高效验证和查询交易目的,提高效率是极明显的革命性的;客户端查询交易结果时,通过网络请求提供交易标识给记账节点,记账节点同样采取上述方法可快速定位检索区块区间查得交易结果返回给客户端。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。