CN115796874B - 一种操作级别的区块链交易并发执行方法 - Google Patents
一种操作级别的区块链交易并发执行方法 Download PDFInfo
- Publication number
- CN115796874B CN115796874B CN202310026559.0A CN202310026559A CN115796874B CN 115796874 B CN115796874 B CN 115796874B CN 202310026559 A CN202310026559 A CN 202310026559A CN 115796874 B CN115796874 B CN 115796874B
- Authority
- CN
- China
- Prior art keywords
- transaction
- operations
- instruction
- conflict
- blockchain
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种操作级别的区块链交易并发执行方法,包括在并发执行区块内交易的同时,动态生成操作日志,包含每条执行操作的序列号、指令码、操作数、运算结果和依赖的操作的序列号,当检测到并发执行的交易发生冲突时,基于操作日志,识别该交易内的所有冲突指令序列,并验证该指令序列满足重新执行的条件,如果满足,则根据操作日志重新执行这些冲突指令序列,从而解决该交易的冲突并提交,本方法可以有效避免传统并发执行算法在高冲突区块链环境下的频繁阻塞和中止问题,显著提升区块链***的交易处理速率。
Description
技术领域
本发明涉及计算机并行计算领域,具体涉及一种操作级别的区块链交易并发执行方法。
背景技术
区块链技术由于其去中心化和不可篡改的特点引起了广泛关注和应用。智能合约技术的引入进一步使得现代区块链***可以执行用户编写的程序。这使得区块链技术可以运用在更多的领域中,如去中心化金融等。但是,现有的区块链***的吞吐量仍然较低(例如,以太坊每秒只能处理约15个交易),这极大得限制了区块链技术的应用范围。
现有的区块链***大多采用顺序执行的方式处理每个区块内的交易。顺序执行虽然实现简单,但是无法利用现代处理器和存储设备的并行性,限制了区块链***的交易处理能力。而数据库领域的传统并发执行方法也并不能有效得提升区块链***的吞吐量。在高冲突的区块链交易环境下,传统的并发执行方法会频繁地阻塞或中止并发执行的交易,从而导致交易处理性能的下降。例如,传统的两阶段锁方法(2PL)会在并发执行时为访问的数据加锁,这导致了同时访问同一数据的多个交易之间的竞争和阻塞;而乐观控制方法(OCC)会因为并发执行的交易同时修改了同一数据而产生数据冲突问题,进而频繁得中止和重启导致冲突的交易。因此,需要一种针对区块链工作环境的高效并发执行方法,一方面利用现代计算机硬件的并行性,另一方面解决传统并发执行方法带来的交易阻塞和中止问题,以提升区块链***处理交易的速度。
发明内容
本发明的目的在于针对现有技术的不足之处作出了改进,提供了一种操作级别的区块链交易并发执行方法,通过操作级别的冲突指令识别与重新执行,实现区块链交易的高并发执行。
本发明公开了一种操作级别的区块链交易并发执行方法,交易执行包括如下几个步骤:
步骤一:并发地投机执行一个区块内的所有交易,记录每笔交易的读集、写集,并生成操作日志;
步骤二:按照交易在区块内的顺序依次校验交易的读集是否与当前区块链的全局状态匹配,若匹配,则将该交易的写集更新至区块链的全局状态并提交该交易的写集,否则,进入步骤三;
步骤三:对于未在步骤二中提交的交易,根据操作日志,识别交易内的冲突的指令序列;
步骤四:校验步骤三中的冲突的指令序列是否满足重新执行的条件,若满足,进入步骤五,否则直接进入步骤六;
步骤五:重新执行步骤三中冲突的指令序列,并更新该交易写集,然后将该交易的写集更新至区块链的全局状态并提交该交易的写集;
步骤六:对于未通过步骤二的读集和步骤四中的冲突的指令序列校验的交易,重新执行整个交易,重新记录该交易的写集,在执行结束后将该交易的写集更新至区块链的全局状态并提交该交易的写集。
作为进一步地改进,本发明所述的步骤一中,操作日志包括每个执行的操作的序列号、指令码、操作数、运算结果和依赖的操作的序列号。
作为进一步地改进,本发明所述的操作日志的生成方法是追踪栈、内存和存储中的数据流,并根据数据流中体现的指令依赖关系,得到每个操作所依赖的父操作的序列号。
作为进一步地改进,本发明所述的步骤三中的识别交易内的冲突的指令序列具体为将读取到冲突键值对的指令标记为冲突指令,并根据操作日志找到所有直接依赖或间接依赖这些冲突指令的指令,并将这些指令也标记为冲突指令。
作为进一步地改进,本发明所述的步骤四中,冲突指令序列的重新执行的条件具体为:重新执行冲突指令时不改变交易的控制流和数据流。
作为进一步地改进,本发明所述的步骤五中,重新执行步骤三中冲突的指令序列具体为按照指令序列号依次重新执行所有冲突指令,每条冲突指令根据其在操作日志中记载的依赖指令序列号,重新从依赖指令的运算结果处获取该指令的操作数的值,随后根据操作日志的指令码和新获取的操作数,重新执行该条指令,并根据运算结果更新该条指令的操作日志。
本发明的有益效果如下:
本发明针对区块链的高冲突交易环境,提供了一种操作级别的区块链交易并发执行方法,不仅利用现代计算机硬件的并行性实现了交易并发执行,还有效得缓解了传统并发执行方法在区块链环境下的阻塞和中止问题,加速了区块链***的交易处理速率。为了避免传统悲观并发控制方法(如2PL)所带来的交易阻塞问题,本发明将数据库领域的乐观并发控制方法应用于区块链领域中。进一步,为了改善传统乐观并发控制方法在区块链工作环境下的交易中止问题,本发明在步骤三中提出了操作级别的冲突识别和重新执行的概念,使得数据冲突仅会导致少部分操作被重新执行,而与数据冲突无关的大部分指令仍可以高效得并发执行。
此外,为了实现操作级别的冲突识别和重新执行,本发明在步骤一中引入了操作日志这一数据结构,实现了每笔交易的所有操作的执行环境与相互依赖的记录。同时,本发明在步骤一中还提出了一种轻量级数据追踪算法,能以较低的性能损耗,实现操作日志的生成。通过操作日志,本发明可以在步骤三中实现快速的操作级别的冲突识别和重新执行,避免了传统并发执行方法需要阻塞或中止整个交易所带来的性能下降。实验显示,对于以太坊客户端,操作级别的区块链交易并发执行方法相较于原本的顺序执行方法性能提高了4.28倍;而传统的并发执行方法,如乐观并发控制算法(OCC)只能加速2.49倍。实验证明,本方法能使得区块链***的交易处理速率得到显著的提升。
附图说明
图1是本发明的操作级别的区块链并发执行方法的流程示意图。
具体实施方式
下面结合说明书附图,通过具体优选实施例详细描述本发明,本发明的目的和效果将变得更加明白,应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1是操作级别的区块链并发执行方法的流程示意图,对交易并发执行进行了一个形象化的描述。
步骤一:并发地投机执行一个区块内的所有交易,记录每笔交易的读集、写集,并生成操作日志。其中,操作日志包括每个执行的操作的序列号、指令码、操作数、运算结果和依赖的操作的序列号,如下表所示。
操作日志生成的关键在于获取每个操作所依赖的所有操作的序列号。操作日志的生成方法是追踪栈、内存和存储中的数据流,并根据数据流中体现的指令依赖关系,得到每个操作所依赖的父操作的序列号。具体而言,本发明对交易内部的操作分为以下几类,采用不同的方式进行日志生成。
1)对于修改账户balance的操作,生成balance操作日志,记录该修改的账户地址、修改前balance和修改后的balance。
2)对于修改账户nonce的操作,生成nonce操作日志,记录该修改的账户地址、修改前nonce和修改后nonce。
3)对于访问栈的虚拟机操作,在原有的虚拟机栈之外额外设置一个影子栈,用于记录栈中每个元素的生成操作的序列号,通过这种方式,所有访问栈的操作可以从操作数对应的影子栈获取其依赖的操作的序列号,进而获取整个操作所依赖的操作。影子栈的维护与栈相似,以以太坊虚拟机为例,对于PUSH操作,虚拟机向栈中压入一个常量,向影子栈中压入NULL(表示该操作不依赖任何其他操作),对于POP操作,虚拟机从栈中弹出值,也从影子栈中弹出值,对于SWAP操作,虚拟机交换栈中元素,也交换对应影子栈中元素,对于DUP操作,虚拟机复制栈中元素,也复制对应影子栈中元素,对于其他栈操作,虚拟机从栈中弹出参数,也从影子栈中弹出参数对应的元素,如果弹出的影子栈元素都是NULL,那么不生成操作日志,否则,生成一条新的操作日志,其def.stack字段设置为影子栈中的元素。
4)对于访问内存的操作,在原有的虚拟机内存外也额外设置了一个影子内存,用于记录内存中的每个字节是由哪条操作写入的和写入时的偏移量,通过这种方式,访问内存的操作也可以从其访问的各个字节对应的影子内存中获取其所依赖的操作的序列号。以以太坊虚拟机为例,对于虚拟机内存的每一字节,都在影子内存中存储对应的(LSN,offset),其中LSN表示上一个写该内存位置的操作的序列号,offset表示该位置在上一个写该内存位置的操作的偏移量。对于访问内存的操作,其操作日志的def.memory字段由若干个(start, len, lsn, offset)元组构成,表示从start到start+len的内存地址是由序列号为lsn的操作写入的,偏移量为offset。对于读取内存的操作,其def.memory字段便可以通过影子内存来获得。
5)对于访问存储的操作,额外维护了一个映射,记录每个存储槽对所对应的最新写入的操作序列号,通过这种方式,访问存储的操作可以根据这个映射获取其访问的存储槽所依赖的操作的序列号。
6)对于可能影响控制流和数据流的操作(如以太坊中的JUMP、JUMPI、MLOAD、MSTORE等),会生成额外的条件操作日志,表示重新执行时该条件必须满足。对于控制流相关操作,条件操作日志记录了该操作的控制流转移条件和控制流转移目标,对于数据流相关操作,条件操作日志记录了该操作写入的数据的地址。
步骤二:按照交易在区块内的顺序依次校验交易的读集是否与当前区块链的全局状态匹配,若匹配,则将该交易的写集更新至区块链的全局状态并提交该交易的写集,否则,进入步骤三。具体而言,当一笔交易投机执行完成后,该交易进入校验排队状态,只有当所有排序在其之前(按照区块内的顺序)的交易提交后,该交易才会正式进入读集校验步骤。在读集校验步骤中,会比较投机执行时的读集与校验时(即所有排序在其之前的交易提交后)的全局存储是否一致。如果一致,则将投机执行得到的写集直接提交到全局存储中。否则,记录所有不匹配的读集,进入冲突操作识别步骤。
步骤三:对于未在步骤二中提交的交易,根据操作日志,识别交易内的冲突的指令序列。具体而言,在冲突识别步骤中,首先通过操作日志找到所有直接访问不匹配读集元素的操作,并将这些操作标记为源冲突操作。由于操作日志记录了操作之间的依赖关系,可以将操作日志看作有向无环图。然后,以源冲突操作作为起点,使用深度优先遍历算法或广度优先遍历算法对图进行遍历,并将所有遍历到的操作也标记为冲突操作。在遍历结束后,所有被标记的操作即为冲突操作。
步骤四:校验步骤三中的冲突的指令序列是否满足重新执行的条件,若满足,进入步骤五,否则直接进入步骤六。在步骤一中的操作日志生成时,会记录执行的控制流和数据流,还有维持该控制流和数据流的条件。而本步骤会校验,如果冲突操作的结果被修正,是否还满足这些控制流和数据流一致的条件。如果不满足,则无法进行操作级别的重新执行,只能进行交易级别的重新执行。
步骤五:重新执行步骤三中冲突的指令序列,并更新该交易写集,然后将该交易的写集更新至区块链的全局状态并提交该交易的写集。其中,冲突指令序列重新执行具体为:首先,找到所有直接访问不匹配读集元素的操作,并将这些操作的结果更新为当前全局存储中正确的值。对于其他冲突操作,根据其在操作日志中记载的依赖操作序列号,重新从依赖操作的运算结果处获取该操作的操作数的值,随后根据操作日志的指令码和新获取的操作数,重新执行该条指令,并将结果存储至该条操作的操作日志的操作结果栏中。其中,对于写存储的冲突操作(如以太坊中的SSTORE指令),将该操作的结果一并更新至该交易的写集中。重新执行完所有冲突操作后,将写集写入全局存储中,并提交该交易。
步骤六:对于未通过步骤二的读集和步骤四中的冲突的指令序列校验的交易,丢弃其在投机执行阶段的写集,在一个全新的虚拟机环境中重新执行该交易的所有操作,在交易执行过程中,记录其写集,在交易执行完成后,将写集写入全局存储中,并提交该交易。
本领域普通技术人员可以理解,以上所述仅为发明的单个实例而已,并不用于限制发明,尽管参照前述实例对发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在发明的精神和原则之内,所做的修改、等同替换等均应包含在发明的保护范围之内。
Claims (6)
1.一种操作级别的区块链交易并发执行方法,其特征在于,交易执行包括如下几个步骤:
步骤一:并发地投机执行一个区块内的所有交易,记录每笔交易的读集、写集,并生成操作日志;
步骤二:按照交易在区块内的顺序依次校验交易的读集是否与当前区块链的全局状态匹配,若匹配,则将该交易的写集更新至区块链的全局状态并提交该交易的写集,否则,进入步骤三;
步骤三:对于未在步骤二中提交的交易,根据操作日志,识别交易内的冲突的指令序列;在冲突识别步骤中,首先通过操作日志找到所有直接访问不匹配读集元素的操作,并将这些操作标记为源冲突操作,由于操作日志记录了操作之间的依赖关系,将操作日志看作有向无环图,然后以源冲突操作作为起点,使用深度优先遍历算法或广度优先遍历算法对图进行遍历,并将所有遍历到的操作也标记为冲突操作,在遍历结束后,所有被标记的操作即为冲突操作;
步骤四:校验步骤三中的冲突的指令序列是否满足重新执行的条件,若满足,进入步骤五,否则直接进入步骤六;
步骤五:重新执行步骤三中冲突的指令序列,并更新该交易写集,然后将该交易的写集更新至区块链的全局状态并提交该交易的写集;冲突指令序列重新执行具体为:首先,找到所有直接访问不匹配读集元素的操作,并将这些操作的结果更新为当前全局存储中正确的值,对于其他冲突操作,根据其在操作日志中记载的依赖操作序列号,重新从依赖操作的运算结果处获取该操作的操作数的值,随后根据操作日志的指令码和新获取的操作数,重新执行该条指令,并将结果存储至该条操作的操作日志的操作结果栏中,其中,对于写存储的冲突操作,将该操作的结果一并更新至该交易的写集中,重新执行完所有冲突操作后,将写集写入全局存储中,并提交该交易;
步骤六:对于未通过步骤二的读集和步骤四中的冲突的指令序列校验的交易,重新执行整个交易,重新记录该交易的写集,在执行结束后将该交易的写集更新至区块链的全局状态并提交该交易的写集。
2.根据权利要求1所述的操作级别的区块链交易并发执行方法,其特征在于,所述的步骤一中,操作日志包括每个执行的操作的序列号、指令码、操作数、运算结果和依赖的操作的序列号。
3.根据权利要求1所述的操作级别的区块链交易并发执行方法,其特征在于,所述的操作日志的生成方法是追踪栈、内存和存储中的数据流,并根据数据流中体现的指令依赖关系,得到每个操作所依赖的父操作的序列号。
4.根据权利要求1或2或3所述的操作级别的区块链交易并发执行方法,其特征在于,所述的步骤三中的识别交易内的冲突的指令序列具体为将读取到冲突键值对的指令标记为冲突指令,并根据操作日志找到所有直接依赖或间接依赖这些冲突指令的指令,并将这些指令也标记为冲突指令。
5.根据权利要求4所述的操作级别的区块链交易并发执行方法,其特征在于,所述的步骤四中,冲突指令序列的重新执行的条件具体为:重新执行冲突指令时不改变交易的控制流和数据流。
6.根据权利要求1或2或3或5所述的操作级别的区块链交易并发执行方法,其特征在于,所述的步骤五中,重新执行步骤三中冲突的指令序列具体为按照指令序列号依次重新执行所有冲突指令,每条冲突指令根据其在操作日志中记载的依赖指令序列号,重新从依赖指令的运算结果处获取该指令的操作数的值,随后根据操作日志的指令码和新获取的操作数,重新执行该条指令,并根据运算结果更新该条指令的操作日志。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310026559.0A CN115796874B (zh) | 2023-01-09 | 2023-01-09 | 一种操作级别的区块链交易并发执行方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310026559.0A CN115796874B (zh) | 2023-01-09 | 2023-01-09 | 一种操作级别的区块链交易并发执行方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115796874A CN115796874A (zh) | 2023-03-14 |
CN115796874B true CN115796874B (zh) | 2023-05-09 |
Family
ID=85428823
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310026559.0A Active CN115796874B (zh) | 2023-01-09 | 2023-01-09 | 一种操作级别的区块链交易并发执行方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115796874B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110517140A (zh) * | 2019-08-26 | 2019-11-29 | 华东师范大学 | 一种区块链智能合约交易并发执行方法 |
CN112837153A (zh) * | 2021-02-10 | 2021-05-25 | 北京航空航天大学 | 一种基于有向无环图的智能合约冲突检测方法 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008165370A (ja) * | 2006-12-27 | 2008-07-17 | Internatl Business Mach Corp <Ibm> | オンライントランザクション処理を分割し、分散環境で実行するための方法および装置。 |
US10225273B2 (en) * | 2017-01-27 | 2019-03-05 | International Business Machines Corporation | Secured event monitoring leveraging blockchain |
CN109559226B (zh) * | 2018-11-28 | 2021-03-02 | 连连银加信息技术有限公司 | 区块链交易执行方法、***及电子设备和存储介质 |
CA3121919C (en) * | 2018-12-04 | 2023-01-24 | Zeu Technologies, Inc. | System and method for augmenting database applications with blockchain technology |
CN110135985B (zh) * | 2019-04-04 | 2021-07-27 | 杭州抖音科技有限公司 | 一种区块链上交易的并行执行方法及*** |
CN110070445B (zh) * | 2019-04-28 | 2024-03-01 | 深圳前海微众银行股份有限公司 | 一种基于区块链***的交易处理方法及装置 |
CN112231071B (zh) * | 2020-05-20 | 2021-06-18 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、计算机设备及存储介质 |
CN112037058B (zh) * | 2020-08-28 | 2024-03-26 | 平安科技(深圳)有限公司 | 数据验证方法、装置及存储介质 |
CN112015558A (zh) * | 2020-09-03 | 2020-12-01 | 深圳壹账通智能科技有限公司 | 数据验证方法、装置及存储介质 |
CN112837163A (zh) * | 2021-03-22 | 2021-05-25 | 中国工商银行股份有限公司 | 基于区块链的批量交易上链方法及*** |
EP4307137A1 (en) * | 2021-04-06 | 2024-01-17 | Huawei Cloud Computing Technologies Co., Ltd. | Transaction processing method, distributed database system, cluster, and medium |
CN113743940B (zh) * | 2021-11-04 | 2022-08-12 | 支付宝(杭州)信息技术有限公司 | 在区块链中执行交易的方法、区块链、主节点和从节点 |
CN113743941B (zh) * | 2021-11-04 | 2022-08-26 | 支付宝(杭州)信息技术有限公司 | 一种在区块链中执行交易的方法、区块链和主节点 |
-
2023
- 2023-01-09 CN CN202310026559.0A patent/CN115796874B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110517140A (zh) * | 2019-08-26 | 2019-11-29 | 华东师范大学 | 一种区块链智能合约交易并发执行方法 |
CN112837153A (zh) * | 2021-02-10 | 2021-05-25 | 北京航空航天大学 | 一种基于有向无环图的智能合约冲突检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN115796874A (zh) | 2023-03-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8095750B2 (en) | Transactional memory system with fast processing of common conflicts | |
US8117403B2 (en) | Transactional memory system which employs thread assists using address history tables | |
US8321637B2 (en) | Computing system with optimized support for transactional memory | |
US9009452B2 (en) | Computing system with transactional memory using millicode assists | |
US8667231B2 (en) | Transactional memory system with efficient cache support | |
US8271739B2 (en) | Memory control apparatus, program, and method | |
US8095741B2 (en) | Transactional memory computing system with support for chained transactions | |
US7802136B2 (en) | Compiler technique for efficient register checkpointing to support transaction roll-back | |
US8484438B2 (en) | Hierarchical bloom filters for facilitating concurrency control | |
US9519467B2 (en) | Efficient and consistent software transactional memory | |
US6658559B1 (en) | Method and apparatus for advancing load operations | |
US6631460B1 (en) | Advanced load address table entry invalidation based on register address wraparound | |
US6505296B2 (en) | Emulated branch effected by trampoline mechanism | |
US6883086B2 (en) | Repair of mis-predicted load values | |
US8108627B2 (en) | Array comparison and swap operations | |
EP1456750A1 (en) | Collision handling apparatus and method | |
US20100058344A1 (en) | Accelerating a quiescence process of transactional memory | |
US20100057740A1 (en) | Accelerating a quiescence process of transactional memory | |
US6381691B1 (en) | Method and apparatus for reordering memory operations along multiple execution paths in a processor | |
US10664286B2 (en) | Enhanced performance for graphical processing unit transactional memory | |
US8380941B2 (en) | Dynamic nest level determination for nested transactional memory rollback | |
US6618803B1 (en) | System and method for finding and validating the most recent advance load for a given checkload | |
US6704861B1 (en) | Mechanism for executing computer instructions in parallel | |
CN115796874B (zh) | 一种操作级别的区块链交易并发执行方法 | |
US9081607B2 (en) | Conditional transaction abort and precise abort handling |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |