通过占位符减少交易读写冲突的方法与装置与流程

文档序号:29696550发布日期:2022-04-16 13:11阅读:75来源:国知局
通过占位符减少交易读写冲突的方法与装置与流程

1.本发明属于区块链技术领域,具体涉及一种通过占位符减少交易读写冲突的方法与装置。


背景技术:

2.在像超级账本(hyperledger fabric)这样的先执行后共识的联盟链,对链上智能合约的调用是通过交易背书完成的。具体来说,一般包括以下步骤:用户将智能合约调用的交易发送到链上的多个背书节点请求背书;背书节点收到交易后,根据当前链的状态模拟执行交易,将交易的执行结果(读取和写入的状态)签名后返回给用户,完成背书。用户收集到足够多满足链上要求、执行结果相同的的交易背书后,将这些背书(包含执行结果)聚合起来,交由共识节点进行排序。共识节点完成排序并将这些交易背书打包成块,交给执行节点。执行节点收到块后,验证交易背书并检查执行结果的读写状态,将合法的写入状态应用到区块链的状态上。
3.检验执行结果的读写状态过程,主要是检测在背书时读取的状态在执行时是否已经被修改过了,如果已经被修改过,则交易失败不会写入链的状态中。
4.对于那些只有少量数据需要共享和修改的智能合约,在高并发下会产生大量的读写冲突:一笔交易背书、排序、执行成功,那么其它所有在这期间进行背书的交易都会因为这笔交易修改了它们背书时读取的状态而失败。失败的交易不仅在背书时浪费了背书节点的资源,在排序和执行时也会抢占其它交易的空间。如果用户在交易失败后又不断重试,那么糟糕的情况就会一直延续,多个并发的请求每次都只能有一个成功,整个系统呈现一个非常低效的状态。


技术实现要素:

5.鉴于以上存在的问题,本发明提供一种通过占位符减少交易读写冲突的方法与装置,用于通过在交易背书时将容易出现修改的值以占位符的形式替代,直到共识完成后,执行节点开始写入区块链时再读出最新的值写入,从而避免出现背书时读取的值在执行时已经出现修改的情况。
6.为解决上述技术问题,本发明采用如下的技术方案:
7.第一方面,本发明实施例提供一种通过占位符减少交易读写冲突的方法,包括:
8.背书过程,用户将交易发送给一组满足背书策略要求的背书节点,请求背书;所述背书节点将该交易模拟执行时要读取的状态使用占位符替换,生成使用占位符表达的读写集并对读写集进行签名作为背书结果返回;
9.实际执行过程,用户收到满足背书策略要求的背书节点集合给出的对读写集的签名后,将交易、读写集、背书节点的签名发送给区块链网络;区块链网络将交易排序共识后交给执行节点执行;执行节点执行时将占位符用实际状态替换,求得最终要写入状态的值,写入区块链状态。
10.第一方面的一种可能设计中,所述背书节点将该交易模拟执行时要读取的状态使用占位符替换包括:
11.背书节点提供以占位符的方式读取状态的接口;
12.背书节点在模拟执行智能合约时发现以占位符形式读取状态的接口调用时,在读取集内添加记录,所述记录包括读取的状态名和占位符,将所述占位符返回给智能合约,所述占位符支持原本读取的状态的类型的所有运算,运算结果为带占位符的表达式。
13.第一方面的一种可能设计中,执行节点执行时将占位符用实际状态替换,并执行交易包括:当执行节点在执行时发现读取集带占位符时,从当前链状态中读出最新的值,将写入集中对应的占位符用该值填充并对表达式求值,将求得的值写入相应的链状态中。
14.第一方面的一种可能设计中,对于一条联盟链,由若干个组织组成,所述联盟链上的节点分属不同组织,背书策略为要求所执行的交易至少经过每个组织里的一个背书节点背书。
15.第二方面,本发明实施例提供一种通过占位符减少交易读写冲突的装置,包括若干背书节点和执行节点,每一背书节点包括背书请求接收模块和背书结果生成模块,每一执行节点包括执行信息接收模块和交易执行模块,
16.所述背书请求接收模块用于接收用户将交易发送给一组满足背书策略要求的背书节点的请求背书的信息;
17.所述背书结果生成模块用于所述背书节点将该交易模拟执行时要读取的状态使用占位符替换,生成使用占位符表达的读写集并对读写集进行签名作为背书结果返回;
18.所述执行信息接收模块用于接收用户收到满足背书策略要求的背书节点集合给出的对读写集的签名后,将交易、读写集、背书节点的签名发送的信息;
19.所述交易执行模块用于区块链网络将交易排序共识后交给执行节点执行,执行节点执行时将占位符用实际状态替换,求得最终要写入状态的值,写入区块链状态。
20.第二方面的一种可能设计中,所述背书节点将该交易模拟执行时要读取的状态使用占位符替换包括:
21.背书节点提供以占位符的方式读取状态的接口;
22.背书节点在模拟执行智能合约时发现以占位符形式读取状态的接口调用时,在读取集内添加记录,所述记录包括读取的状态名和占位符,将所述占位符返回给智能合约,所述占位符支持原本读取的状态的类型的所有运算,运算结果为带占位符的表达式。
23.第二方面的一种可能设计中,执行节点执行时将占位符用实际状态替换,并执行交易包括:当执行节点在执行时发现读取集带占位符时,从当前链状态中读出最新的值,将写入集中对应的占位符用该值填充并对表达式求值,将求得的值写入相应的链状态中。
24.第二方面的一种可能设计中,对于一条联盟链,由若干个组织组成,所述联盟链上的节点分属不同组织,背书策略为要求所执行的交易至少经过每个组织里的一个背书节点背书。
25.第三方面,本发明实施例提供一种计算机设备,至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现如上所述的通过占位符减少交易读写冲突的方法。
26.第四方面,本发明实施例提供一种计算机可读存储介质,其特征在于,所述计算机
可读存储介质上存储有计算机程序,该程序被处理器执行实现权利要求如上任一所述的的通过占位符减少交易读写冲突的方法。
27.采用本发明具有如下的有益效果:
28.(1)通过在交易背书时将容易出现修改的值以占位符的形式替代,直到共识完成后,执行节点开始写入区块链时再读出最新的值写入,从而避免出现背书时读取的值在执行时已经出现修改的情况。
29.(2)在使用了占位符方案后,热点数据的读取会被推迟到执行阶段,即使多笔交易同时读取和修改热点数据,由于执行阶段的是依次串行执行的,下一笔交易会直接读到上一笔交易修改后的最新内容,也就不存在读写冲突,使得这样的合约能够高效地并发调用。
附图说明
30.图1为本发明一实施例的通过占位符减少交易读写冲突的方法的步骤流程图;
31.图2为本发明一实施例的通过占位符减少交易读写冲突的装置的结构示意图;
32.图3为本发明一实施例的一种计算机设备的结构示意图。
具体实施方式
33.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
34.参照图1,所示为本发明实施例的一种通过占位符减少交易读写冲突的方法的步骤流程图,包括:
35.背书过程,用户将交易发送给一组满足背书策略要求的背书节点,请求背书;所述背书节点将该交易模拟执行时要读取的状态使用占位符替换,生成使用占位符表达的读写集并对读写集进行签名作为背书结果返回;
36.实际执行过程,用户收到满足背书策略要求的背书节点集合给出的对读写集的签名后,将交易、读写集、背书节点的签名发送给区块链网络给区块链网络;区块链网络将交易排序共识后交给执行节点执行;执行节点执行时将占位符用实际状态替换,求得最终要写入状态的值,写入区块链状态。
37.通过以上技术方案实施的方法,通过在交易背书时将容易出现修改的值以占位符的形式替代,直到共识完成后,执行节点开始写入区块链时再读出最新的值写入,从而避免出现背书时读取的值在执行时已经出现修改的情况,即热点数据的读取会被推迟到执行阶段,即使多笔交易同时读取和修改热点数据,由于执行阶段的是依次串行执行的,下一笔交易会直接读到上一笔交易修改后的最新内容,也就不存在读写冲突,使得这样的合约能够高效地并发调用。
38.本发明一实施例的通过占位符减少交易读写冲突的方法中,背书节点将该交易模拟执行时要读取的状态使用占位符替换具体包括:
39.背书节点提供以占位符的方式读取状态的接口;当然也提供一般读取状态的接口供一般读写使用。
40.背书节点在模拟执行智能合约时发现以占位符形式读取状态的接口调用时,在读取集内添加记录,其中记录包括读取的状态名和占位符,将占位符返回给智能合约,占位符支持原本读取的状态的类型的所有运算,运算结果为带占位符的表达式。其中原本读取状态的类型的运算可以包括:比如数字类型,算出来的结果为例如a^2+a+1的代数表达式;布尔类型,例如b&&c||d;也可以是字符串或者更复杂的类型。
41.本发明一实施例的通过占位符减少交易读写冲突的方法中,执行节点执行时将占位符用实际状态替换,并执行交易具体包括:当执行节点在执行时发现读取集带占位符时,从当前链状态中读出最新的值,将写入集中对应的占位符用该值填充并对表达式求值,将求得的值写入相应的链状态中。
42.本发明一实施例的通过占位符减少交易读写冲突的方法中,因为超级账本是一条联盟链,对于一条联盟链,由若干个组织组成,联盟链上的节点分属不同组织,背书策略为要求所执行的交易至少经过每个组织里的一个背书节点背书。比如组织a有背书节点a1、a2,组织b有背书节点b1、b2、b3,组织c有背书节点c1。背书策略可以是要求所执行的交易至少被每个组织里的一个背书节点背书过。则满足背书策略要求的节点集合可以是{a1,b2,c1},也可以是{a1,a2,b1,c1},还可以是{a2,b1,b2,c1}。
43.通过以上实施例实现的通过占位符减少交易读写冲突的方法,应用举例如下:
44.比如一个为用户分配id的智能合约r,合约里有计数器`id`和一个方法`get_id`。当用户调用`get_id`时,合约读取当前的`id`,将`id+1`存入id并返回给用户。
45.以上合约内的计数器id非常容易出现变动,当两个用户同时发送调用get_id的交易,背书节点依照相同的链状态进行模拟背书,但最终提交到执行节点时只有排在前面的交易能够得到执行,排在后面的由于背书时读取的id值已经被前一个交易修改,发生读写冲突,交易失败。
46.如果使用占位符在背书得到的读写集中代替id,则模拟结果为:
[0047][0048]
在执行阶段执行节点会读出当前最新r合约中的id,将id+1写入r合约中,两个用户的交易都成功。
[0049]
与本发明方法实施例对应的,参见图2,本发明实施例提供一种通过占位符减少交
易读写冲突的装置,包括若干背书节点10和执行节点20,每一背书节点10包括背书请求接收模块101和背书结果生成模块102,每一执行节点包括执行信息接收模块201和交易执行模块202,其中背书请求接收模块101用于接收用户将交易发送给一组满足背书策略要求的背书节点的请求背书的信息;背书结果生成模块102用于背书节点将该交易模拟执行时要读取的状态使用占位符替换,生成使用占位符表达的读写集并对读写集进行签名作为背书结果返回;执行信息接收模块201用于接收用户收到满足背书策略要求的背书节点集合给出的对读写集的签名后,将交易、读写集、背书节点的签名发送给区块链网络的信息;交易执行模块202用于区块链网络将交易排序共识后交给执行节点执行,执行节点执行时将占位符用实际状态替换,求得最终要写入状态的值,写入区块链状态。
[0050]
本发明一实施例的一种通过占位符减少交易读写冲突的装置,背书节点将该交易模拟执行时要读取的状态使用占位符替换包括:背书节点提供以占位符的方式读取状态的接口;背书节点在模拟执行智能合约时发现以占位符形式读取状态的接口调用时,在读取集内添加记录,所述记录包括读取的状态名和占位符,将所述占位符返回给智能合约,所述占位符支持原本读取的状态的类型的所有运算,运算结果为带占位符的表达式。
[0051]
本发明一实施例的一种通过占位符减少交易读写冲突的装置,执行节点执行时将占位符用实际状态替换,并执行交易包括:当执行节点在执行时发现读取集带占位符时,从当前链状态中读出最新的值,将写入集中对应的占位符用该值填充并对表达式求值,将求得的值写入相应的链状态中。
[0052]
本发明一实施例的通过占位符减少交易读写冲突的装置中,因为超级账本是一条联盟链,对于一条联盟链,由若干个组织组成,联盟链上的节点分属不同组织,背书策略为要求所执行的交易至少经过每个组织里的一个背书节点背书。比如组织a有背书节点a1、a2,组织b有背书节点b1、b2、b3,组织c有背书节点c1。背书策略可以是要求所执行的交易至少被每个组织里的一个背书节点背书过。则满足背书策略要求的节点集合可以是{a1,b2,c1},也可以是{a1,a2,b1,c1},还可以是{a2,b1,b2,c1}。
[0053]
图3示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该计算机设备可以包括:处理器301、存储器302、输入/输出接口303、通信接口304和总线305。其中处理器301、存储器302、输入/输出接口303和通信接口304通过总线305实现彼此之间在设备内部的通信连接。
[0054]
处理器301可以采用通用的cpu(central processing unit,中央处理器)、微处理器、应用专用集成电路(application specific integrated circuit,asic)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
[0055]
存储器302可以采用rom(read only memory,只读存储器)、ram(random access memory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器302可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器302中,并由处理器301来调用执行。
[0056]
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
[0057]
为此,本技术实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,
该计算机程序能够被处理器进行加载,以执行本技术实施例所提供的任一种通过占位符减少交易读写冲突的方法中的步骤。例如,该计算机程序可以执行如下步骤:
[0058]
背书过程,用户将交易发送给一组满足背书策略要求的背书节点,请求背书;所述背书节点将该交易模拟执行时要读取的状态使用占位符替换,生成使用占位符表达的读写集并对读写集进行签名作为背书结果返回;
[0059]
实际执行过程,用户收到满足背书策略要求的背书节点集合给出的对读写集的签名后,将交易、读写集、背书节点的签名发送给区块链网络给区块链网络;区块链网络将交易排序共识后交给执行节点执行;执行节点执行时将占位符用实际状态替换,求得最终要写入状态的值,写入区块链状态。
[0060]
以上各个步骤的具体实施可参见上述的方法实施例,在此不再赘述。
[0061]
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
[0062]
由于该存储介质中所存储的计算机程序,可以执行本技术实施例所提供的任一种通过占位符减少交易读写冲突的方法中的步骤,因此,可以实现本技术实施例所提供的任一种通过占位符减少交易读写冲突的方法所能实现的有益效果,详见上述的实施例,在此不再赘述。
[0063]
应当理解,本文所述的示例性实施例是说明性的而非限制性的。尽管结合附图描述了本发明的一个或多个实施例,本领域普通技术人员应当理解,在不脱离通过所附权利要求所限定的本发明的精神和范围的情况下,可以做出各种形式和细节的改变。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1