CN111429140B - 一种实现多层级智能合约栈的原子性的方法和装置 - Google Patents
一种实现多层级智能合约栈的原子性的方法和装置 Download PDFInfo
- Publication number
- CN111429140B CN111429140B CN202010233754.7A CN202010233754A CN111429140B CN 111429140 B CN111429140 B CN 111429140B CN 202010233754 A CN202010233754 A CN 202010233754A CN 111429140 B CN111429140 B CN 111429140B
- Authority
- CN
- China
- Prior art keywords
- data area
- intelligent contract
- executed
- transaction
- address
- 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
- G06Q20/389—Keeping log of transactions for guaranteeing non-repudiation of a transaction
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Business, Economics & Management (AREA)
- General Engineering & Computer Science (AREA)
- Accounting & Taxation (AREA)
- Software Systems (AREA)
- General Business, Economics & Management (AREA)
- Finance (AREA)
- Computer Security & Cryptography (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Strategic Management (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请的目的是提供一种实现多层级智能合约栈的原子性的方法和装置,在多层级智能合约栈的前一层的第一智能合约执行过程中,按调用顺序依次调用执行后一层中与第一智能合约相关联的至少一个第二智能合约;在每次调用执行过程中,为第二智能合约创建对应的第二事务容器,将第一智能合约对应的第一事务容器内缓存数据区的地址保存为第二事务容器内提交数据区的地址;根据前述方式逐层调用执行多层级智能合约栈的每一层中的智能合约,直至全部智能合约被调用执行成功,以实现所述多层级智能合约栈的原子性,大大节省时间和资源开销;若其中某个智能合约调用执行失败,将已执行成功的智能合约对应的事务容器全部丢弃。
Description
技术领域
本申请涉及区块链技术领域,尤其涉及一种实现多层级智能合约栈的原子性的技术。
背景技术
事务容器,是为了保障批量操作能被原子性执行的容器,即将多个操作打包在一起批量执行,这批操作要么全部执行成功,要么全部执行失败,不存在部分成功的情况。这在区块链内的各项应用场景中有重要作用。
常规操作中,实现事务性的方法是,如果该批次操作全部执行成功,则一起提交。如果某个操作执行失败时,则逐个回滚之前已经执行成功的操作,直到所有执行成功的操作全部被回滚,数据恢复到未执行任何操作前的最初状态。
但是,这种方式存在很多问题,当批量执行失败时,逐个回滚已成功的操作,首先比较消耗计算资源,且耗时较长;再者,也不能保证回滚能完全成功,即回滚的过程中同样可能出现某个操作回滚失败的情况。这个问题在区块链中当多个智能合约需要联调的情况下尤其重要。
因此,如何快速、节能、灵活地实现多层级智能合约栈的原子性,成为本领域技术人员亟需解决的技术问题之一。
发明内容
本申请的目的是提供一种实现多层级智能合约栈的原子性的方法和装置。
根据本申请的一个方面,提供了一种实现多层级智能合约栈的原子性的方法,其中,该方法包括以下步骤:
a在多层级智能合约栈的前一层的第一智能合约执行过程中,按调用顺序依次调用执行后一层中与所述第一智能合约相关联的至少一个第二智能合约;
b在每次调用执行过程中,为所述第二智能合约创建对应的第二事务容器,将所述第一智能合约对应的第一事务容器内缓存数据区的地址保存为所述第二事务容器内提交数据区的地址,其中,每一事务容器中包括缓存数据区的地址与提交数据区的地址,所述缓存数据区与所述提交数据区中存储有数据对应的地址;
c根据步骤a和步骤b中的方式逐层调用执行所述多层级智能合约栈的每一层中的智能合约,直至全部智能合约被调用执行成功,以实现所述多层级智能合约栈的原子性。
根据本申请的另一个方面,还提供了一种实现多层级智能合约栈的原子性的装置,其中,该装置包括:
执行装置,用于在多层级智能合约栈的前一层的第一智能合约执行过程中,按调用顺序依次调用执行后一层中与所述第一智能合约相关联的至少一个第二智能合约;
创建装置,用于在每次调用执行过程中,为所述第二智能合约创建对应的第二事务容器,将所述第一智能合约对应的第一事务容器内缓存数据区的地址保存为所述第二事务容器内提交数据区的地址,其中,每一事务容器中包括缓存数据区的地址与提交数据区的地址,所述缓存数据区与所述提交数据区中存储有数据对应的地址;
调用装置,用于调用所述执行装置与所述创建装置来逐层调用执行所述多层级智能合约栈的每一层中的智能合约,直至全部智能合约被调用执行成功,以实现所述多层级智能合约栈的原子性。
根据本申请的又一个方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机代码,当所述计算机代码被执行时,如前任一项所述的方法被执行。
根据本申请的再一个方面,还提供了一种计算机程序产品,当所述计算机程序产品被计算机设备执行时,如前任一项所述的方法被执行。
根据本申请的再一个方面,还提供了一种计算机设备,所述计算机设备包括:
一个或多个处理器;
存储器,用于存储一个或多个计算机程序;
当所述一个或多个计算机程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如前任一项所述的方法。
与现有技术相比,本申请在多层级智能合约栈的前一层的第一智能合约执行过程中,按调用顺序依次调用执行后一层中与所述第一智能合约相关联的至少一个第二智能合约;在每次调用执行过程中,为所述第二智能合约创建对应的第二事务容器,将所述第一智能合约对应的第一事务容器内缓存数据区的地址保存为所述第二事务容器内提交数据区的地址,其中,每一事务容器中包括缓存数据区的地址与提交数据区的地址,所述缓存数据区与所述提交数据区中存储有数据对应的地址;根据前述方式逐层调用执行所述多层级智能合约栈的每一层中的智能合约,直至全部智能合约被调用执行成功,以实现所述多层级智能合约栈的原子性,大大节省时间和资源开销。
进一步地,本申请当所述第二智能合约被调用执行成功后,将所述第二事务容器内的提交数据区的地址替换为所述第二事务容器内的缓存数据区的地址,所述缓存数据区成为所述第二事务容器内的新的提交数据区;所述第一事务容器内的缓存数据区根据所述第二事务容器的新的提交数据区而更新,成为新的缓存数据区;当所述第一智能合约执行成功后,将所述第一事务容器内的提交数据区的地址替换为所述第一事务容器内的所述新的缓存数据区的地址,所述新的缓存数据区成为所述第一事务容器内的新的提交数据区;根据前述方式层层回归所述多层级智能合约栈,直至最初一个智能合约执行成功,层层回归调用栈,完成全部原子性。本申请所提供的事务容器,在全部执行成功时,只需要简单的替换数据区地址就可以完成原子性提交。若其中某个智能合约执行失败,将已执行成功的智能合约对应的事务容器全部丢弃,回归最初一个智能合约执行前的数据初始状态,简单快捷,且能保证回滚一定成功。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出适于用来实现本申请实施方式的示例性计算机系统/服务器12的框图;
图2示出根据本申请一个方面的一种实现多层级智能合约栈的原子性的方法的流程示意图;
图3示出根据本申请一个优选实施例的一种实现多层级智能合约栈的原子性的示意图;
图4示出根据本申请另一个优选实施例的一种实现多层级智能合约栈的原子性的示意图;
图5示出根据本申请又一个优选实施例的一种实现多层级智能合约栈的原子性的示意图;
图6示出根据本申请一个优选实施例的一种批量执行多个交易的示意图;
图7示出根据本申请另一个优选实施例的一种批量执行多个交易的示意图;
图8示出根据本申请又一个优选实施例的一种批量执行多个交易的示意图;
图9示出根据本申请另一个方面的一种实现多层级智能合约栈的原子性的装置的示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
在上下文中所称“计算机设备”,也称为“电脑”,是指可以通过运行预定程序或指令来执行数值计算和/或逻辑计算等预定处理过程的智能电子设备,其可以包括处理器与存储器,由处理器执行在存储器中预存的存续指令来执行预定处理过程,或是由ASIC、FPGA、DSP等硬件执行预定处理过程,或是由上述二者组合来实现。计算机设备包括但不限于服务器、个人电脑、笔记本电脑、平板电脑、智能手机等。
所述计算机设备包括用户设备与网络设备。其中,所述用户设备包括但不限于电脑、智能手机、PDA等;所述网络设备包括但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(Cloud Computing)的由大量计算机或网络服务器构成的云,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。其中,所述计算机设备可单独运行来实现本申请,也可接入网络并通过与网络中的其他计算机设备的交互操作来实现本申请。其中,所述计算机设备所处的网络包括但不限于互联网、广域网、城域网、局域网、VPN网络等。
需要说明的是,所述用户设备、网络设备和网络等仅为举例,其他现有的或今后可能出现的计算机设备或网络如可适用于本申请,也应包含在本申请保护范围以内,并以引用方式包含于此。
后面所讨论的方法(其中一些通过流程图示出)可以通过硬件、软件、固件、中间件、微代码、硬件描述语言或者其任意组合来实施。当用软件、固件、中间件或微代码来实施时,用以实施必要任务的程序代码或代码段可以被存储在机器或计算机可读介质(比如存储介质)中。(一个或多个)处理器可以实施必要的任务。
这里所公开的具体结构和功能细节仅仅是代表性的,并且是用于描述本申请的示例性实施例的目的。但是本申请可以通过许多替换形式来具体实现,并且不应当被解释成仅仅受限于这里所阐述的实施例。
应当理解的是,虽然在这里可能使用了术语“第一”、“第二”等等来描述各个单元,但是这些单元不应当受这些术语限制。使用这些术语仅仅是为了将一个单元与另一个单元进行区分。举例来说,在不背离示例性实施例的范围的情况下,第一单元可以被称为第二单元,并且类似地第二单元可以被称为第一单元。这里所使用的术语“和/或”包括其中一个或更多所列出的相关联项目的任意和所有组合。
应当理解的是,当一个单元被称为“连接”或“耦合”到另一单元时,其可以直接连接或耦合到所述另一单元,或者可以存在中间单元。与此相对,当一个单元被称为“直接连接”或“直接耦合”到另一单元时,则不存在中间单元。应当按照类似的方式来解释被用于描述单元之间的关系的其他词语(例如“处于...之间”相比于“直接处于...之间”,“与...邻近”相比于“与...直接邻近”等等)。
这里所使用的术语仅仅是为了描述具体实施例而不意图限制示例性实施例。除非上下文明确地另有所指,否则这里所使用的单数形式“一个”、“一项”还意图包括复数。还应当理解的是,这里所使用的术语“包括”和/或“包含”规定所陈述的特征、整数、步骤、操作、单元和/或组件的存在,而不排除存在或添加一个或更多其他特征、整数、步骤、操作、单元、组件和/或其组合。
还应当提到的是,在一些替换实现方式中,所提到的功能/动作可以按照不同于附图中标示的顺序发生。举例来说,取决于所涉及的功能/动作,相继示出的两幅图实际上可以基本上同时执行或者有时可以按照相反的顺序来执行。
下面结合附图对本申请作进一步详细描述。
图1示出了适于用来实现本申请实施方式的示例性计算机系统/服务器12的框图。图1显示的计算机系统/服务器12仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图1所示,计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图1未示出,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本申请各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本申请所描述的实施例中的功能和/或方法。
计算机系统/服务器12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它模块通信。应当明白,尽管图1中未示出,可以结合计算机系统/服务器12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理单元16通过运行存储在存储器28中的程序,从而执行各种功能应用以及数据处理。
例如,存储器28中存储有用于执行本申请的各项功能和处理的计算机程序,处理单元16执行相应计算机程序时,本申请在区块链中多层级智能合约栈的原子性被实现。
以下将详细描述本申请在区块链中实现多层级智能合约栈的原子性的具体装置/步骤。
图2示出根据本申请一个方面的一种实现多层级智能合约栈的原子性的示意图。该方法包括以下步骤:
S201:在多层级智能合约栈的前一层的第一智能合约执行过程中,按调用顺序依次调用执行后一层中与所述第一智能合约相关联的至少一个第二智能合约;
S202:在每次调用执行过程中,为所述第二智能合约创建对应的第二事务容器,将所述第一智能合约对应的第一事务容器内缓存数据区的地址保存为所述第二事务容器内提交数据区的地址,其中,每一事务容器中包括缓存数据区的地址与提交数据区的地址,所述缓存数据区与所述提交数据区中存储有数据对应的地址;
S203:根据步骤S201和步骤S202中的方式逐层调用执行所述多层级智能合约栈的每一层中的智能合约,直至全部智能合约被调用执行成功,以实现所述多层级智能合约栈的原子性。
在区块链系统中,会出现多级智能合约联调的情况,例如,智能合约A在执行过程中需要调用执行智能合约B,智能合约B在执行过程中又需要调用执行智能合约C,以此类推。一个更为复杂的情况例如智能合约A在执行过程中需要调用执行智能合约B,而智能合约B在执行过程中又需要分别调用执行智能合约C和智能合约D,智能合约C和智能合约D在执行过程中又有其他需要按调用顺序依次调用执行的智能合约,这构成了多层级的智能合约栈。在多层级智能合约栈的调用执行过程中,每层级智能合约的执行都需要保证原子性,且每个智能合约的执行都是上一个调用智能合约原子性的一部分,形成多层级智能合约的原子性调用栈。因其执行模型复杂,对事务性执行提出了极大挑战。
在此,事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。事务的原子性要求,如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全执行,就是说事务的操纵序列或者完全应用到数据库或者完全不影响数据库。
假如用户在一个事务内完成了对数据库的更新,这时所有的更新对外部世界必须是可见的,或者完全没有更新。前者称事务已提交,后者称事务撤消(或流产)。DBMS(数据库管理系统,database management system)必须确保由成功提交的事务完成的所有操纵在数据库内有完全的反映,而失败的事务对数据库完全没有影响。
以下以一实施例来具体描述上述各个步骤,举一个最为简单的多层级智能合约栈的情形,如图3所示,在该实施例中,假设共有智能合约A、智能合约B、智能合约C和智能合约D四个层级的智能合约联调,为更好地阐述本实施例,以下将第一层级的智能合约称为智能合约A,其对应的事务容器则称为事务容器A,将第二层级的智能合约称为智能合约B,其对应的事务容器则称为事务容器B,将第三层级的智能合约称为智能合约C,其对应的事务容器则称为事务容器C,将第四层级的智能合约称为智能合约D,其对应的事务容器则称为事务容器D。当然,实际应用中可能存在其他数量的智能合约,本申请对此不作限制,并通过引用的方式包含于此。
具体地,在智能合约A的执行过程中调用执行了智能合约B,并且,为该智能合约B创建了对应的事务容器B;接着,将智能合约A对应的事务容器A内缓存数据区的地址保存为该事务容器B内提交数据区的地址,也即,事务容器B的提交数据区和事务容器A的缓存数据区是同一个;随后,执行智能合约B,在智能合约B的执行过程中调用执行智能合约C,并且,为该智能合约C创建对应的事务容器C;将事务容器B内缓存数据区的地址保存为该事务容器C内提交数据区的地址,即事务容器C的提交数据区和事务容器B的缓存数据区是同一个;接着,在智能合约C的执行过程中调用执行智能合约D,并且,为该智能合约D创建对应的事务容器D;将事务容器C内缓存数据区的地址保存为该事务容器D内提交数据区的地址,即事务容器D的提交数据区和事务容器C的缓存数据区是同一个。
上述的各个步骤即执行了在多层级智能合约栈的前一层的第一智能合约执行过程中,按调用顺序依次调用后一层中与该第一智能合约相关联的至少一个第二智能合约,为该第二智能合约创建对应的第二事务容器;在每次调用过程中,将该第一智能合约对应的第一事务容器内缓存数据区的地址保存为该第二事务容器内提交数据区的地址。
在此,在每次调用执行过程中,均为被调用执行的智能合约创建一个事务容器,每一个事务容器中均包括缓存数据区的地址与提交数据区的地址,即,每一个事务容器均对应有一个缓存数据区和一个提交数据区,每一个缓存数据区和提交数据区中存储有数据对应的地址。而对于最初一个智能合约,其本身即具有对应的事务容器。
一个较为复杂的实施例可以参见图4所示,如图4中示出的多层级智能合约栈,将智能合约B作为前一层的第一智能合约,则智能合约C和智能合约E为后一层中与该第一智能合约B关联的第二智能合约,本实施例按调用顺序依次调用执行该后一层中的两个智能合约,然而由于智能合约C的执行过程中还需要调用执行智能合约D,因此,图4所示出的多层级智能合约栈的具体调用情况可以是:在智能合约A的执行过程中调用执行了智能合约B,并且,为该智能合约B创建了对应的事务容器B;接着,执行智能合约B的一部分,在智能合约B的执行过程中调用执行智能合约C,为该智能合约C创建对应的事务容器C;随后,在智能合约C的执行过程中调用执行智能合约D,为该智能合约D创建对应的事务容器D;当智能合约D执行成功后,智能合约C即包含了智能合约D原子性执行的结果,在此基础上继续执行智能合约C的剩余部分;同样地,智能合约B在包含了智能合约C原子性执行结果的基础上继续执行剩余部分,而在智能合约B执行剩余部分时,其还需要调用智能合约E,为该智能合约E创建对应的事务容器;当智能合约E执行成功后,智能合约B也包含了智能合约E原子性执行的结果,在此基础上继续执行该智能合约B的剩余部分;最后,智能合约A在包含了智能合约B原子性执行结果的基础上继续执行剩余部分,从而完成该多层级智能合约栈中每个智能合约的执行。上述方式逐层调用执行了多层级智能合约栈的每一层中的智能合约,直至全部智能合约被调用执行成功,实现了该多层级智能合约栈的原子性。
在此,在多层级智能合约栈的前一层的第一智能合约执行过程中,本实施例按调用顺序依次调用执行后一层中与所述第一智能合约相关联的至少一个第二智能合约,其中,当所述后一层中与所述前一层的第一智能合约相关联的第二智能合约包括多个时,所述调用顺序意指所述多个第二智能合约中,当前一个第二智能合约及其在之后每一层关联的智能合约均已被调用执行成功之后,再调用执行后一个第二智能合约。
一个更为复杂的实施例可以参见图5所示,其与图4的区别在于,如图5中示出的多层级智能合约栈,在智能合约C的下一层关联了两个智能合约,即,智能合约D和智能合约F。在智能合约C的执行过程中调用执行智能合约D,为该智能合约D创建对应的事务容器D;当智能合约D执行成功后,智能合约C即包含了智能合约D原子性执行的结果,在此基础上继续执行智能合约C的剩余部分;而在智能合约C执行剩余部分时,其还需要调用执行智能合约F,为该智能合约F创建对应的事务容器;当智能合约F执行成功后,智能合约C也包含了智能合约F原子性执行的结果,在此基础上继续执行该智能合约C的剩余部分;同样地,智能合约B在包含了智能合约C原子性执行结果的基础上继续执行剩余部分,在智能合约B执行剩余部分时,其还需要调用执行智能合约E,为该智能合约E创建对应的事务容器;当智能合约E执行成功后,智能合约B也包含了智能合约E原子性执行的结果,在此基础上继续执行该智能合约B的剩余部分;最后,智能合约A在包含了智能合约B原子性执行结果的基础上继续执行剩余部分,从而完成该多层级智能合约栈中每个智能合约的调用执行。
本领域技术人员应能理解的是,以上多层级智能合约栈的结构仅是举例,而不应视为对本申请的限制,在实际应用中该多层级智能合约栈可以是多种结构,一种典型的结构例如是树形结构。每一层的智能合约在执行过程中按照调用顺序来调用执行后一层中与之关联的智能合约,并且在调用执行时,为该调用执行的智能合约创建对应的事务容器,并将该作为调用者的智能合约的事务容器内的缓存数据区的地址保存为该作为被调用者的智能合约的第二事务容器内的提交数据区的地址;按此方式逐层调用执行多层级智能合约栈的每一层中的智能合约,直至全部智能合约被调用执行成功,以实现所述多层级智能合约栈的原子性。
在一优选实施例中,所述第一智能合约调用执行所述第二智能合约还包括以下步骤:
S204:当所述第二智能合约被调用执行成功后,将所述第二事务容器内的提交数据区的地址替换为所述第二事务容器内的缓存数据区的地址,所述缓存数据区成为所述第二事务容器内的新的提交数据区;
S205:所述第一事务容器内的缓存数据区根据所述第二事务容器的新的提交数据区而更新,成为新的缓存数据区;
S206:当所述第一智能合约执行成功后,将所述第一事务容器内的提交数据区的地址替换为所述第一事务容器内的所述新的缓存数据区的地址,所述新的缓存数据区成为所述第一事务容器内的新的提交数据区;
其中,所述步骤S203还包括:根据步骤S204、步骤S205和步骤S206中的方式层层回归所述多层级智能合约栈,直至最初一个智能合约执行成功。
仍以前述具有智能合约A、智能合约B、智能合约C和智能合约D四级智能合约联调的区块链为例,如图3所示,当智能合约D被调用执行成功后,在步骤S204中,将所述事务容器D内的提交数据区的地址替换为该事务容器D内的缓存数据区的地址,所述缓存数据区成为该事务容器内的新的提交数据区,其意味着事务容器C的缓存数据区已经被智能合约D改变,其已经包含了智能合约D的原子性执行的结果,此后,智能合约C在包含了智能合约D原子性直接结果的基础上,继续执行智能合约C的剩余部分;在步骤S205中,所述事务容器C内的缓存数据区根据事务容器D的新的提交数据区而更新,成为新的缓存数据区;在步骤S206中,当所述智能合约C执行成功后,将所述事务容器C内的提交数据区的地址替换为该事务容器C内的所述新的缓存数据区的地址,所述新的缓存数据区成为该事务容器C内的新的提交数据区;随后,根据在步骤S204、步骤S205和步骤S206中的方式依次执行各个智能合约直至智能合约A执行成功,根据上述各个步骤层层回归调用栈,直到智能合约A执行成功,完成全部原子性。
图4和图5所示的多层级智能合约栈的层层回归调用栈的方式与前述描述相似,故此处不再赘述,并通过引用的方式包含于此。
在一优选实施例中,若所述多层级智能合约栈的其中某个智能合约被调用执行失败,将已被调用执行成功的智能合约对应的事务容器全部丢弃,回归最初一个智能合约执行前的数据初始状态。
仍以前述具有智能合约A、智能合约B、智能合约C和智能合约D四层级智能合约联调的区块链为例,在该四层级智能合约逐层级执行或调用的过程中,当其中任何一个智能合约被调用执行失败,则本实施例将已被调用执行成功的智能合约对应的事务容器全部丢弃,回归智能合约A执行前的数据初始状态。
在一优选实施例中,所述多层级智能合约栈属于待批量执行的交易中的其中一个交易,其中,对于该待批量执行的交易,该方法包括:
S207:将所述待批量执行的交易所对应的全部账户地址记录至所述待批量执行的交易对应的第三事务容器的提交数据区,将所述提交数据区内的账户地址拷贝至所述第三事务容器的缓存数据区;
S208:当所述待批量执行的交易被批量执行时,执行到其中一个交易,将所述交易所涉及的账户数据进行备份,获得备份账户,在所述备份账户内写入修改的数据;
S209:将所述备份账户的地址替换所述第三事务容器的缓存数据区内对应所述交易的账户地址。
具体地,本实施例提出的事务容器的方案,将批量操作的事务性转移到被处理的数据上。以区块链的账户交易为例,无论交易的内容是修改账户权限、转账、写日志或者其他,最终交易要达成的目的都是修改被交易账户内的某些数据。在此将区块链上的操作统称为交易。事务容器由两个数据区组成:缓存数据区和提交数据区。该事务容器内只记录两个数据区的地址,而非将两个数据区放在容器内。两个数据区内记录的同样是各项数据的地址,而非数据本身。通过数据区地址可以直接访问到数据区,同样,通过数据地址可以直接访问到数据。这样可以为容器提供更强大的灵活性,使其能为分层数据和合约栈也提供事务性。
对于一个事务,其中包含多个待批量执行的交易,其中部分交易可以是多层级智能合约栈,部分交易可以是普通的待执行交易,如图6所示,其中,交易1至7是待批量执行的交易,交易1、2、4、5和7是普通的待执行交易,交易3和6是多层级智能合约栈。其中,交易1、2、4、5和7,以及智能合约A和智能合约O公有一个对应的事务容器,在此称为第三事务容器,该第三事务容器中同样包括缓存数据区的地址与提交数据区的地址,即,该第三事务容器具有对应的缓存数据区和提交数据区,该缓存数据区与提交数据区中存储有数据对应的地址。
对于待批量执行的交易,如图6所示的交易1、2、4、5和7,在步骤S207中,本实施例将待执行交易所对应的全部账户地址记录至该第三事务容器的提交数据区,例如,将一批需要被原子执行的交易所涉及的账户地址(非账户本身)全部记录到提交数据区,同时将提交数据区内的账户地址全部拷贝到该第三事务容器的缓存数据区,因此,提交数据区和缓存数据区这两个数据区内保存了同样的账户地址,指向同样的账户。由于拷贝的都是账户的地址,而非账户本身,可以大大节省时间和资源开销。
在步骤S208中,在批量交易被执行时,执行到某个交易,就将该交易所涉及的账户数据进行备份,获得备份账户,并且将修改的数据全部写入备份账户内,而非原账户内。
在步骤S209中,将所述备份账户的地址替换该第三事务容器的缓存数据区内对应该交易的账户的地址。
在一优选实施例中,若所述待批量执行的交易全部执行成功,将所述第三事务容器的提交数据区的地址替换为所述第三事务容器的缓存数据区的地址,所述第三事务容器的缓存数据区成为新的提交数据区,并丢弃原来的提交数据区;
若所述待批量执行的交易中某个交易执行失败,放弃执行剩余的交易,并丢弃所述第三事务容器的缓存数据区。
具体地,当所有待批量执行的交易全部执行成功后,则在该第三事务容器内,将提交数据区的地址替换为缓存数据区的地址,即缓存数据区成为了新的提交数据区,原来的提交数据区可以被直接丢弃,这样就完成了一次成功的事务性提交。当下次需要原子性执行批量交易时,再从该第三事务容器的提交数据区拷贝一份新的缓存数据区,因为拷贝的都是账户的地址,而非账户本身,可以大大节省时间和资源开销。
如果在前述交易执行的过程中有任何一笔交易执行失败了,则放弃执行剩余的交易,并直接丢弃该第三事务容器的缓存数据区。
本实施例所提供的事务容器,在全部执行成功时,只需要简单的替换数据区地址就可以完成原子性提交。当执行失败时,只需要丢弃缓存数据区就可以完成回滚,简单快捷,且能保证回滚一定成功。
本领域技术人员应能理解,如图6所示的多层级智能合约栈还可以是其他结构的多层级智能合约栈,例如可以是如图7和图8所示的多层级智能合约栈,如图6所示的待批量执行的交易还可以是单个智能合约,本申请对该待批量执行的交易的具体构成不作限制。
以下以一实施例来具体描述如图7所示的批量执行多个交易的过程。
首先,为该待批量执行的多个交易创建一个事务容器A,该事务容器A中包括缓存数据区的地址addrCacheA与提交数据区的地址addrSubA,即,该事务容器A对应有一个缓存数据区CacheA和一个提交数据区SubA。本领域技术人员应能理解,本实施例中的各个英文简称仅为更好地说明本实施例,而不应视为对本申请的限制。
接着,针对其中的各个交易,将这些交易所涉及到的全部账户地址记录在该事务容器A的提交数据区SubA,例如对于图7,针对交易1、2、4、5和7,以及智能合约A和智能合约O,创建一个公有的事务容器A,将这些交易以及智能合约A和智能合约O所涉及到的全部账户地址记录在该事务容器A的提交数据区SubA,并将该提交数据区SubA内的账户地址拷贝至该缓存数据区CacheA,这样,提交数据区SubA和缓存数据区CacheA这两个数据区内保存了同样的账户地址,指向同样的账户。
当执行该交易1时,将该交易1对应的账户数据进行备份,获得备份账户Backup1,在该备份账户Backup1内写入修改的数据;将该备份账户的地址addrBackup1替换该缓存数据区CacheA内对应账户的地址,也即,该缓存数据区CacheA中有关该交易1的账户地址指向了该备份账户Backup1。
当执行交易2时,同样地,将该交易2对应的账户数据进行备份,获得备份账户Backup2,在该备份账户Backup2内写入修改的数据;将该备份账户的地址addrBackup2替换该缓存数据区CacheA内对应账户的地址,也即,该缓存数据区CacheA中有关该交易2的账户地址指向了该备份账户Backup2。
当执行交易3时,该交易3是一个多层级的智能合约栈,先执行智能合约A,在执行该智能合约A时需要调用执行智能合约B,为该智能合约B创建了对应的事务容器B,该事务容器B中也同样包括缓存数据区的地址addrCacheB与提交数据区的地址addrSubB,即,该事务容器B对应有一个缓存数据区CacheB和一个提交数据区SubB;将智能合约A对应的事务容器A内缓存数据区的地址保存为该事务容器B内提交数据区的地址,即,该事务容器B内提交数据区的地址也为addrCacheA,也即,事务容器B的提交数据区和事务容器A的缓存数据区是同一个,都为CacheA。
接着,执行智能合约B的一部分,在智能合约B的执行过程中调用执行智能合约C,为该智能合约C创建对应的事务容器C,该事务容器C中也同样包括缓存数据区的地址addrCacheC与提交数据区的地址addrSubC,即,该事务容器C对应有一个缓存数据区CacheC和一个提交数据区SubC;将智能合约B对应的事务容器B内缓存数据区的地址保存为该事务容器C内提交数据区的地址。
随后,在智能合约C的执行过程中调用执行智能合约D,为该智能合约D创建对应的事务容器D,该事务容器D中也同样包括缓存数据区的地址addrCacheD与提交数据区的地址addrSubD,即,该事务容器D对应有一个缓存数据区CacheD和一个提交数据区SubD;将智能合约C对应的事务容器C内缓存数据区的地址保存为该事务容器D内提交数据区的地址。
智能合约D执行时,将该智能合约D对应的账户数据进行备份,获得备份账户BackupD,在该备份账户BackupD内写入修改的数据;将该备份账户的地址addrBackupD替换该缓存数据区CacheD内对应账户的地址。在此,各个智能合约中也可以包括多个需要原子性批量执行的交易,各个交易中被修改的数据都需要备份,以便于当某个交易未能成功执行时进行回滚。
当智能合约D全部执行成功后,将该事务容器D内的提交数据区的地址addrSubD替换为该事务容器D内的缓存数据区的地址addrCacheD,该缓存数据区CacheD成为该事务容器D内的新的提交数据区SubD,其意味着事务容器C的缓存数据区CacheC已经被智能合约D改变,其已经包含了智能合约D的原子性执行的结果,也即,事务容器C内的缓存数据区CacheC根据事务容器D的新的提交数据区而更新,成为新的缓存数据区;此后,智能合约C在包含了智能合约D原子性直接结果的基础上,继续执行智能合约C的剩余部分。
同样地,智能合约B在包含了智能合约C原子性执行结果的基础上继续执行剩余部分,而在智能合约B执行剩余部分时,其还需要调用智能合约E,为该智能合约E创建对应的事务容器E;该事务容器E中也同样包括缓存数据区的地址addrCacheE与提交数据区的地址addrSubE,即,该事务容器E对应有一个缓存数据区CacheE和一个提交数据区SubE;将智能合约B对应的事务容器B内缓存数据区的地址保存为该事务容器E内提交数据区的地址。
当智能合约E执行成功后,智能合约B也包含了智能合约E原子性执行的结果,也即,事务容器B内的缓存数据区根据事务容器E的新的提交数据区而更新,成为新的缓存数据区;在此基础上继续执行该智能合约B的剩余部分。
最后,智能合约A在包含了智能合约B原子性执行结果的基础上继续执行剩余部分,事务容器A内的缓存数据区根据事务容器B的新的提交数据区而更新,成为新的缓存数据区;从而完成该多层级智能合约栈中每个智能合约的调用执行。
随后的交易4至7依照与前述相类似的过程执行,当全部交易1至7执行成功后,则将该事务容器A中的提交数据区的地址addrSubA替换为缓存数据区的地址addrCacheA,即缓存数据区成为了新的提交数据区SubA,该新的提交数据区中存储的即是备份账户的地址addrBackupA,原来的提交数据区可以被直接丢弃。
若该交易1至7中的某个交易执行失败,放弃执行剩余的交易,并丢弃所述第三事务容器的缓存数据区。
图9示出根据本申请另一个方面的一种实现多层级智能合约栈的原子性的装置的示意图。
该装置1包括执行装置901、创建装置902和调用装置903。
该执行装置901在多层级智能合约栈的前一层的第一智能合约执行过程中,按调用顺序依次调用执行后一层中与所述第一智能合约相关联的至少一个第二智能合约;
创建装置902在每次调用执行过程中,为所述第二智能合约创建对应的第二事务容器,将所述第一智能合约对应的第一事务容器内缓存数据区的地址保存为所述第二事务容器内提交数据区的地址,其中,每一事务容器中包括缓存数据区的地址与提交数据区的地址,所述缓存数据区与所述提交数据区中存储有数据对应的地址;
调用装置903调用该执行装置901与创建装置902来逐层调用执行所述多层级智能合约栈的每一层中的智能合约,直至全部智能合约被调用执行成功,以实现所述多层级智能合约栈的原子性。
在一优选实施例中,该执行装置901还包括:
第一替换装置(未示出),用于当所述第二智能合约被调用执行成功后,将所述第二事务容器内的提交数据区的地址替换为所述第二事务容器内的缓存数据区的地址,所述缓存数据区成为所述第二事务容器内的新的提交数据区;
更新装置(未示出),用于所述第一事务容器内的缓存数据区根据所述第二事务容器的新的提交数据区而更新,成为新的缓存数据区;
第二替换装置(未示出),用于当所述第一智能合约执行成功后,将所述第一事务容器内的提交数据区的地址替换为所述第一事务容器内的所述新的缓存数据区的地址,所述新的缓存数据区成为所述第一事务容器内的新的提交数据区;
其中,该调用装置903调用该第一替换装置、更新装置与第二替换装置,层层回归所述多层级智能合约栈,直至最初一个智能合约执行成功。
在一优选实施例中,所述多层级智能合约栈属于待批量执行的交易中的其中一个交易,其中,对于该待批量执行的交易,该装置1还包括:
记录装置(未示出),用于将所述待批量执行的交易所对应的全部账户地址记录至所述待批量执行的交易对应的第三事务容器的提交数据区,将所述提交数据区内的账户地址拷贝至所述第三事务容器的缓存数据区;
备份装置(未示出),用于当所述待批量执行的交易被批量执行时,执行到其中一个交易,将所述交易所涉及的账户数据进行备份,获得备份账户,在所述备份账户内写入修改的数据;
第三替换装置(未示出),用于将所述备份账户的地址替换所述第三事务容器的缓存数据区内对应所述交易的账户地址。
在一优选实施例中,该装置1还包括:
第四替换装置(未示出),用于若所述待批量执行的交易全部执行成功,将所述第三事务容器的提交数据区的地址替换为所述第三事务容器的缓存数据区的地址,所述第三事务容器的缓存数据区成为新的提交数据区,并丢弃原来的提交数据区;
第二丢弃装置(未示出),用于若所述待批量执行的交易中某个交易执行失败,放弃执行剩余的交易,并丢弃所述第三事务容器的缓存数据区。
本实施例所提供的事务容器,在全部执行成功时,只需要简单的替换数据区地址就可以完成原子性提交。当执行失败时,只需要丢弃缓存数据区就可以完成回滚,简单快捷,且能保证回滚一定成功。
本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个功能或步骤的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (6)
1.一种实现多层级智能合约栈的原子性的方法,其中,该方法包括以下步骤:
a在多层级智能合约栈的前一层的第一智能合约执行过程中,按调用顺序依次调用执行后一层中与所述第一智能合约相关联的至少一个第二智能合约;
b在每次调用执行过程中,为所述第二智能合约创建对应的第二事务容器,将所述第一智能合约对应的第一事务容器内缓存数据区的地址保存为所述第二事务容器内提交数据区的地址,其中,每一事务容器中包括缓存数据区的地址与提交数据区的地址,所述缓存数据区与所述提交数据区中存储有数据对应的地址;
c根据步骤a和步骤b中的方式逐层调用执行所述多层级智能合约栈的每一层中的智能合约,直至全部智能合约被调用执行成功,以实现所述多层级智能合约栈的原子性,其中,若所述多层级智能合约栈的其中某个智能合约被调用执行失败,将已被调用执行成功的智能合约对应的事务容器全部丢弃,回归最初一个智能合约执行前的数据初始状态;
或者,所述多层级智能合约栈属于待批量执行的交易中的其中一个交易,对于所述待批量执行的交易,该方法还包括:
将所述待批量执行的交易所对应的全部账户地址记录至所述待批量执行的交易对应的第三事务容器的提交数据区,将所述提交数据区内的账户地址拷贝至所述第三事务容器的缓存数据区;当所述待批量执行的交易被批量执行时,执行到其中一个交易,将所述交易所涉及的账户数据进行备份,获得备份账户,在所述备份账户内写入修改的数据;将所述备份账户的地址替换所述第三事务容器的缓存数据区内对应所述交易的账户地址;
其中,若所述待批量执行的交易全部执行成功,将所述第三事务容器的提交数据区的地址替换为所述第三事务容器的缓存数据区的地址,所述第三事务容器的缓存数据区成为新的提交数据区,并丢弃原来的提交数据区;若所述待批量执行的交易中某个交易执行失败,放弃执行剩余的交易,并丢弃所述第三事务容器的缓存数据区。
2.根据权利要求1所述的方法,其中,所述第一智能合约调用执行所述第二智能合约还包括:
x当所述第二智能合约被调用执行成功后,将所述第二事务容器内的提交数据区的地址替换为所述第二事务容器内的缓存数据区的地址,所述缓存数据区成为所述第二事务容器内的新的提交数据区;
y所述第一事务容器内的缓存数据区根据所述第二事务容器的新的提交数据区而更新,成为新的缓存数据区;
z当所述第一智能合约执行成功后,将所述第一事务容器内的提交数据区的地址替换为所述第一事务容器内的所述新的缓存数据区的地址,所述新的缓存数据区成为所述第一事务容器内的新的提交数据区;
其中,步骤c中逐层调用执行所述多层级智能合约栈包括:
根据步骤x、步骤y和步骤z中的方式层层回归所述多层级智能合约栈,直至最初一个智能合约执行成功。
3.一种实现多层级智能合约栈的原子性的装置,其中,该装置包括:
执行装置,用于在多层级智能合约栈的前一层的第一智能合约执行过程中,按调用顺序依次调用执行后一层中与所述第一智能合约相关联的至少一个第二智能合约;
创建装置,用于在每次调用执行过程中,为所述第二智能合约创建对应的第二事务容器,将所述第一智能合约对应的第一事务容器内缓存数据区的地址保存为所述第二事务容器内提交数据区的地址,其中,每一事务容器中包括缓存数据区的地址与提交数据区的地址,所述缓存数据区与所述提交数据区中存储有数据对应的地址;
调用装置,用于调用所述执行装置与所述创建装置来逐层调用执行所述多层级智能合约栈的每一层中的智能合约,直至全部智能合约被调用执行成功,以实现所述多层级智能合约栈的原子性;
第一丢弃装置,用于若所述多层级智能合约栈的其中某个智能合约被调用执行失败,将已被调用执行成功的智能合约对应的事务容器全部丢弃,回归最初一个智能合约执行前的数据初始状态;
或者,所述多层级智能合约栈属于待批量执行的交易中的其中一个交易,对于所述待批量执行的交易,该装置还包括:
记录装置,用于将所述待批量执行的交易所对应的全部账户地址记录至所述待批量执行的交易对应的第三事务容器的提交数据区,将所述提交数据区内的账户地址拷贝至所述第三事务容器的缓存数据区;
备份装置,用于当所述待批量执行的交易被批量执行时,执行到其中一个交易,将所述交易所涉及的账户数据进行备份,获得备份账户,在所述备份账户内写入修改的数据;
第三替换装置,用于将所述备份账户的地址替换所述第三事务容器的缓存数据区内对应所述交易的账户地址;
第四替换装置,用于若所述待批量执行的交易全部执行成功,将所述第三事务容器的提交数据区的地址替换为所述第三事务容器的缓存数据区的地址,所述第三事务容器的缓存数据区成为新的提交数据区,并丢弃原来的提交数据区;
第二丢弃装置,用于若所述待批量执行的交易中某个交易执行失败,放弃执行剩余的交易,并丢弃所述第三事务容器的缓存数据区。
4.根据权利要求3所述的装置,其中,所述执行装置还包括:
第一替换装置,用于当所述第二智能合约被调用执行成功后,将所述第二事务容器内的提交数据区的地址替换为所述第二事务容器内的缓存数据区的地址,所述缓存数据区成为所述第二事务容器内的新的提交数据区;
更新装置,用于根据所述第二事务容器的新的提交数据区,更新所述第一事务容器内的缓存数据区,成为新的缓存数据区;
第二替换装置,用于当所述第一智能合约执行成功后,将所述第一事务容器内的提交数据区的地址替换为所述第一事务容器内的所述新的缓存数据区的地址,所述新的缓存数据区成为所述第一事务容器内的新的提交数据区;
其中,所述调用装置用于:
调用所述第一替换装置、所述更新装置与所述第二替换装置,层层回归所述多层级智能合约栈,直至最初一个智能合约执行成功。
5.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机代码,当所述计算机代码被执行时,如权利要求1或2所述的方法被执行。
6.一种计算机设备,所述计算机设备包括:
一个或多个处理器;
存储器,用于存储一个或多个计算机程序;
当所述一个或多个计算机程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1或2所述的方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202010233754.7A CN111429140B (zh) | 2020-03-30 | 2020-03-30 | 一种实现多层级智能合约栈的原子性的方法和装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202010233754.7A CN111429140B (zh) | 2020-03-30 | 2020-03-30 | 一种实现多层级智能合约栈的原子性的方法和装置 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN111429140A CN111429140A (zh) | 2020-07-17 |
| CN111429140B true CN111429140B (zh) | 2021-01-12 |
Family
ID=71551607
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202010233754.7A Active CN111429140B (zh) | 2020-03-30 | 2020-03-30 | 一种实现多层级智能合约栈的原子性的方法和装置 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN111429140B (zh) |
Families Citing this family (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN112700250B (zh) * | 2021-01-08 | 2024-04-23 | 北京金山云网络技术有限公司 | 金融场景下的身份认证方法、装置和系统 |
| CN113259478B (zh) * | 2021-06-17 | 2021-11-02 | 支付宝(杭州)信息技术有限公司 | 在区块链系统中执行交易的方法、装置及区块链系统 |
Family Cites Families (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8782323B2 (en) * | 2009-10-30 | 2014-07-15 | International Business Machines Corporation | Data storage management using a distributed cache scheme |
| CN109151031B (zh) * | 2018-08-28 | 2022-08-26 | 北京奇虎科技有限公司 | 基于区块链的合约处理方法及装置 |
| CN110933120A (zh) * | 2018-09-19 | 2020-03-27 | 阿里巴巴集团控股有限公司 | 一种基于混合云的计算方法、装置以及系统 |
-
2020
- 2020-03-30 CN CN202010233754.7A patent/CN111429140B/zh active Active
Also Published As
| Publication number | Publication date |
|---|---|
| CN111429140A (zh) | 2020-07-17 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN114925084B (zh) | 分布式事务处理方法、系统、设备及可读存储介质 | |
| US5923833A (en) | Restart and recovery of OMG-compliant transaction systems | |
| US8424015B2 (en) | Transactional memory preemption mechanism | |
| CN112860670B (zh) | 数据迁移方法、装置、电子设备及计算机存储介质 | |
| CN105159818B (zh) | 内存数据管理中日志恢复方法及其仿真系统 | |
| US10289443B2 (en) | System and method for sharing global transaction identifier (GTRID) in a transactional middleware environment | |
| US9798792B2 (en) | Replication for on-line hot-standby database | |
| US20100217945A1 (en) | Fast context save in transactional memory | |
| US8108880B2 (en) | Method and system for enabling state save and debug operations for co-routines in an event-driven environment | |
| US9128881B2 (en) | Recovery for long running multithreaded processes | |
| US8156137B2 (en) | Data processing systems and methods | |
| CN111429140B (zh) | 一种实现多层级智能合约栈的原子性的方法和装置 | |
| CN114253713A (zh) | 一种基于reactor的异步批处理方法及系统 | |
| CN1099631C (zh) | 双执行部件处理器的反回逻辑线路 | |
| US8683169B2 (en) | Selecting an auxiliary storage medium for writing data of real storage pages | |
| CN110083488B (zh) | 一种面向gpgpu的细粒度低开销的容错系统 | |
| CN101872299A (zh) | 冲突预测实现方法及所用冲突预测处理装置事务存储器 | |
| US8738873B2 (en) | Interfacing with a point-in-time copy service architecture | |
| CN112162855B (zh) | 基于页锁定内存的gpu页缺失处理方法、系统及介质 | |
| CN100568245C (zh) | 工作流数据的持久化处理方法、装置及工作流系统 | |
| CN115774754A (zh) | 基于分布式事务的元数据管理方法、装置、设备及介质 | |
| US20140149697A1 (en) | Memory Pre-Allocation For Cleanup and Rollback Operations | |
| US12430210B2 (en) | Managing changes to metadata in a data storage system | |
| CN118394545A (zh) | 日志写入方法、装置、计算机设备、可读存储介质和程序产品 | |
| US8132060B2 (en) | Comprehensive application programming interfaces for handling logical volume manager |
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 |