CN117151712B - 区块链交易处理方法、装置、计算机设备和存储介质 - Google Patents

区块链交易处理方法、装置、计算机设备和存储介质 Download PDF

Info

Publication number
CN117151712B
CN117151712B CN202311397078.7A CN202311397078A CN117151712B CN 117151712 B CN117151712 B CN 117151712B CN 202311397078 A CN202311397078 A CN 202311397078A CN 117151712 B CN117151712 B CN 117151712B
Authority
CN
China
Prior art keywords
lock
statement
resource
distributed
processed
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
Application number
CN202311397078.7A
Other languages
English (en)
Other versions
CN117151712A (zh
Inventor
卢光宏
蔡志宏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202311397078.7A priority Critical patent/CN117151712B/zh
Publication of CN117151712A publication Critical patent/CN117151712A/zh
Application granted granted Critical
Publication of CN117151712B publication Critical patent/CN117151712B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION 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/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/382Payment protocols; Details thereof insuring higher security of transaction
    • G06Q20/3825Use of electronic signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION 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/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/382Payment protocols; Details thereof insuring higher security of transaction
    • G06Q20/3829Payment protocols; Details thereof insuring higher security of transaction involving key management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION 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/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/40Authorisation, e.g. identification of payer or payee, verification of customer or shop credentials; Review and approval of payers, e.g. check credit lines or negative lists
    • G06Q20/401Transaction verification
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • Accounting & Taxation (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Finance (AREA)
  • Strategic Management (AREA)
  • General Business, Economics & Management (AREA)
  • Computer Security & Cryptography (AREA)
  • Databases & Information Systems (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请涉及一种区块链交易处理方法、系统、装置、计算机设备、计算机可读存储介质和计算机程序产品,可应用于云技术、人工智能、智慧交通、辅助驾驶等各种场景。该方法包括:获取多个待处理的区块链交易,确定每一区块链交易各自对应的合约进程;针对每一合约进程,在待执行的当前语句为资源处理语句的情况下,基于该资源处理语句对应的待处理资源,为合约进程添加分布式锁;对于待处理资源相同的关联语句,按照每一关联语句各自对应分布式锁的锁类型,并发执行各关联语句;针对每一关联语句,在该关联语句执行完成的情况下,释放该关联语句所在合约进程的分布式锁。采用上述方法能够提高区块链交易的处理效率。

Description

区块链交易处理方法、装置、计算机设备和存储介质
技术领域
本申请涉及计算机技术领域,特别是涉及一种区块链交易处理方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
背景技术
区块链是一种去中心化的多节点网络,在信息共享、数据存证和多方协作等场景下得到了广泛的应用。区块链节点接收到区块链交易之后,会将交易放入交易池中进行缓存,然后从交易池中取出交易进行处理并打包生成区块。
传统技术中,由区块链节点串行处理各待处理的区块链交易以防止交易冲突,存在处理效率低的缺点。随着技术的进步,出现了针对区块链交易的并发执行方式,通过在并发执行之后识别冲突交易,并对冲突交易进行回退和重复执行,以避免数据冲突。由于反复的回退和重复执行会占用大量的计算资源,因此,传统的并发执行方式也存在处理效率较低的缺点。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高处理效率的区块链交易处理方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
第一方面,本申请提供了一种区块链交易处理方法。所述方法包括:
获取多个待处理的区块链交易,确定每一所述区块链交易各自对应的合约进程;所述合约进程包括多个语句;
针对每一所述合约进程,在待执行的当前语句为资源处理语句的情况下,基于所述资源处理语句对应的待处理资源,为所述合约进程添加分布式锁;所述分布式锁的锁类型与所述资源处理语句的资源处理方式匹配;
对于所述待处理资源相同的关联语句,按照每一所述关联语句各自对应分布式锁的锁类型,并发执行各所述关联语句;
针对每一所述关联语句,在所述关联语句执行完成的情况下,释放所述关联语句所在合约进程的分布式锁。
第二方面,本申请提供了一种区块链交易处理装置。所述装置包括:
交易调度模块,用于获取多个待处理的区块链交易,确定每一所述区块链交易各自对应的合约进程;所述合约进程包括多个语句;
锁添加模块,用于针对每一所述合约进程,在待执行的当前语句为资源处理语句的情况下,基于所述资源处理语句对应的待处理资源,为所述合约进程添加分布式锁;所述分布式锁的锁类型与所述资源处理语句的资源处理方式匹配;
关联语句执行模块,用于对于所述待处理资源相同的关联语句,按照每一所述关联语句各自对应分布式锁的锁类型,并发执行各所述关联语句;
锁释放模块,用于针对每一所述关联语句,在所述关联语句执行完成的情况下,释放所述关联语句所在合约进程的分布式锁。
第三方面,本申请提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取多个待处理的区块链交易,确定每一所述区块链交易各自对应的合约进程;所述合约进程包括多个语句;
针对每一所述合约进程,在待执行的当前语句为资源处理语句的情况下,基于所述资源处理语句对应的待处理资源,为所述合约进程添加分布式锁;所述分布式锁的锁类型与所述资源处理语句的资源处理方式匹配;
对于所述待处理资源相同的关联语句,按照每一所述关联语句各自对应分布式锁的锁类型,并发执行各所述关联语句;
针对每一所述关联语句,在所述关联语句执行完成的情况下,释放所述关联语句所在合约进程的分布式锁。
第四方面,本申请提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取多个待处理的区块链交易,确定每一所述区块链交易各自对应的合约进程;所述合约进程包括多个语句;
针对每一所述合约进程,在待执行的当前语句为资源处理语句的情况下,基于所述资源处理语句对应的待处理资源,为所述合约进程添加分布式锁;所述分布式锁的锁类型与所述资源处理语句的资源处理方式匹配;
对于所述待处理资源相同的关联语句,按照每一所述关联语句各自对应分布式锁的锁类型,并发执行各所述关联语句;
针对每一所述关联语句,在所述关联语句执行完成的情况下,释放所述关联语句所在合约进程的分布式锁。
第五方面,本申请提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
获取多个待处理的区块链交易,确定每一所述区块链交易各自对应的合约进程;所述合约进程包括多个语句;
针对每一所述合约进程,在待执行的当前语句为资源处理语句的情况下,基于所述资源处理语句对应的待处理资源,为所述合约进程添加分布式锁;所述分布式锁的锁类型与所述资源处理语句的资源处理方式匹配;
对于所述待处理资源相同的关联语句,按照每一所述关联语句各自对应分布式锁的锁类型,并发执行各所述关联语句;
针对每一所述关联语句,在所述关联语句执行完成的情况下,释放所述关联语句所在合约进程的分布式锁。
上述区块链交易处理方法、装置、计算机设备、计算机可读存储介质和计算机程序产品,获取多个待处理的区块链交易,确定每一区块链交易各自对应的合约进程,针对每一合约进程,在待执行的当前语句为资源处理语句的情况下,基于该资源处理语句对应的待处理资源,为合约进程添加分布式锁,且分布式锁的锁类型与资源处理语句的资源处理方式匹配,然后,对于待处理资源相同的关联语句,按照每一关联语句各自对应分布式锁的锁类型,并发执行各关联语句,并且,针对每一关联语句,在该关联语句执行完成的情况下,释放该关联语句所在合约进程的分布式锁。上述处理过程中,一方面,只有在待执行的当前语句为资源处理语句的情况下才对合约进程加锁,能够实现细粒度的锁添加,最大程度的降低加锁对系统性能的影响;另一方面,在加锁状态下执行资源处理语句,能够通过并发执行实现针对同一资源的互斥访问,有利于提高效率。因此,采用上述方法,能够在避免交易冲突的基础上、提高区块链交易的处理效率。
附图说明
图1为一个实施例中区块链交易处理方法的应用环境图;
图2为一个实施例中区块链交易处理方法的流程示意图;
图3为一个实施例中Redis分布式锁的加锁方案示意图;
图4为一个实施例中分布式锁的确定过程示意图;
图5为另一个实施例中区块链交易处理方法的流程示意图;
图6为一个实施例汇总区块链节点的架构示意图;
图7为一个实施例中区块链Redis分布式锁初始化与交易调度过程示意图;
图8为一个实施例中区块链合约进程与Redis分布式锁交易的过程示意图;
图9为一个实施例中的锁过期处理过程示意图;
图10为一个实施例中区块链交易处理装置的结构框图;
图11为一个实施例中计算机设备的内部结构图;
图12为另一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在进行具体说明之前,先对本申请涉及的一些术语进行说明。
区块链是信息技术领域的一种分布式账本技术,一般由共识、交易区块和状态数据存储、密码学身份安全等内容构成,由于账本是分布式存储的,而且区块是经过共识的,所以具有不可篡改、可追溯、共同维护等特征。区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链的具体类型,可以包括私有链、公共链和联盟链。联盟链是一种特殊类型的区块链,它是一个半去中心化的网络。与公共链不同,联盟链仅允许特定的组织或实体加入网络。这些组织或实体共同管理和维护区块链,共享数据和共识过程。联盟链相对于公共链有更高的性能、更好的隐私保护和更严格的权限控制。
区块账本是区块链系统中的核心数据结构,用于存储和管理所有已确认的区块。区块账本以链式结构组织,每个区块包含一组交易、区块头(包括前一个区块的哈希值、时间戳等元数据)以及其他信息。区块账本为区块链系统提供了一个公共、不可篡改的交易历史记录,确保了系统的透明性和一致性。
状态数据是区块链系统中用于表示系统当前状态的数据结构。状态数据包括了所有账户的余额、智能合约的状态以及其他相关信息。状态数据随着交易的执行而不断更新,反映了区块链系统在某个时间点的全局状态。在区块链系统中,状态数据通常以Merkle树或其他加密数据结构的形式存储,以确保其完整性和安全性。
智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追溯且不可逆转。
本申请实施例提供的区块链交易处理方法,可以应用于包含多个节点的应用环境中。该应用环境可以是包括多个节点的数据共享系统,也可以是由客户端、多个节点(接入网络中的任意形式的计算设备,如服务器、用户终端)通过网络通信的形式连接形成的分布式系统。以分布式系统为区块链系统为例,如图2所示,分布式系统可以包括多个节点101和客户端102,节点101之间形成组成的点对点网络,点对点协议是一个运行在传输控制协议(TCP,Transmission Control Protocol )协议之上的应用层协议。在分布式系统中,任何机器如服务器、终端都可以加入而成为节点,节点包括硬件层、中间层、操作系统层和应用层。如图1所示,区块链系统中各节点101涉及的功能可以包括路由、应用和区块链等。其中,路由是节点具有的基本功能,用于支持节点之间的通信。应用部署在区块链中,用于根据实际业务需求而实现特定业务,记录实现功能相关的数据形成记录数据,在记录数据中携带数字签名以表示任务数据的来源,将记录数据发送到区块链系统中的其他节点,供其他节点在验证记录数据来源以及完整性成功时,将记录数据添加到临时区块中。应用实现的业务可以包括共享账本和智能合约等。共享账本,用于提供账目数据的存储、查询和修改等操作的功能,将对账目数据的操作的记录数据发送到区块链系统中的其他节点,其他节点验证有效后,作为承认账目数据有效的响应,将记录数据存入临时区块中,还可以向发起操作的节点发送确认。区块链包括一系列按照产生的先后时间顺序相互接续的区块 (Block),新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链系统中节点提交的记录数据。
进一步地,每个节点101在工作时可以接收到输入信息,并基于接收到的输入信息维护区块链系统内的共享数据。对于区块链系统中的每个节点,均具有与其对应的节点标识,而且区块链系统中的每个节点均可以存储有区块链系统中其他节点的节点标识,以便后续根据其他节点的节点标识,将生成的区块广播至区块链系统中的其他节点。每个节点中可维护一个节点标识列表,将节点名称和节点标识对应存储至该节点标识列表中。其中,节点标识可为IP(Internet Protocol,网络之间互联的协议)地址以及其他任一种能够用于标识该节点的信息。
其中,区块链节点101在实现区块链交易处理方法的过程中:获取多个待处理的区块链交易,确定每一区块链交易各自对应的合约进程;针对每一合约进程,在待执行的当前语句为资源处理语句的情况下,基于该资源处理语句对应的待处理资源,为合约进程添加分布式锁,且分布式锁的锁类型与资源处理语句的资源处理方式匹配;对于待处理资源相同的关联语句,按照每一关联语句各自对应分布式锁的锁类型,并发执行各关联语句;针对每一关联语句,在该关联语句执行完成的情况下,释放该关联语句所在合约进程的分布式锁。进一步地,区块链节点101可以通过终端或者服务器实现。其中,终端包括但不限于手机、电脑、智能语音交互设备、智能家电、车载终端、飞行器等,服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。本申请实施例可应用于各种场景,包括但不限于云技术、人工智能、智慧交通、辅助驾驶等。
在一个实施例中,如图2所示,提供了一种区块链交易处理方法,本实施例以该方法应用于图1中的区块链节点101为例进行说明,包括以下步骤:
步骤S202,获取多个待处理的区块链交易,确定每一区块链交易各自对应的合约进程。
其中,区块链交易是指在区块链上实现的业务交易,可以通过调用部署在区块链上的智能合约实现。进程是具有一定独立功能的程序关于某个数据集合的一次运行活动。合约进程是指执行交易的进程,也即区块链交易所调用智能合约的一次运行活动。合约进程包括多个语句。语句是进程中的最小执行单位,该语句例如可以包括读语句和写语句等资源处理语句,也可以包括赋值语句、顺序描述语句等不对资源进行处理的普通语句,还可以包括指示进程执行完成的提示语句等。实际应用中,同一合约进程所包含的各语句,可以是顺序执行的多个语句,也可以存在一部分并行执行的语句。在一个可能的实现中,合约进程包括多个语句构成的语句序列,区块链节点可以按照各语句在语句序列中的位置,顺序执行合约进程中的各语句,以完成合约进程。
具体地,区块链节点可以从区块链交易池中,获取多个待处理的区块链交易。该区块链交易池是区块链中的数据存储池,用于存储发出和接收的交易消息。通常而言,区块链的各个节点分别存储有各自的区块链交易池。实际应用中,区块链节点的本地交易池中的区块链交易,可以包括由该区块链节点自身发起的区块链交易、以及该区块链节点所属区块链的其他节点广播的待共识交易。
在一个具体的实施例中,区块链节点获取多个待处理的区块链交易后,可以根据区块链交易中携带的交易信息,确定各区块链交易各自需要调用的智能合约,然后,再根据各区块链交易各自需要调用的智能合约,确定各区块链交易各自对应的合约进程。智能合约是区块链上部署的程序代码,对应于运行在区块链节点虚拟机上的一段逻辑,这段逻辑有对应的输入、执行过程和输出。区块链节点可以通过发起调用智能合约的区块链交易,实现所需的业务。也就是说,区块链交易对应的合约进程,是指该区块链交易所调用智能合约的进程。
在一个具体的实施例中,区块链节点中部署有合约仓库和合约进程池。其中,合约仓库是一个用于存储和管理智能合约的数据结构。它包含了已部署在区块链上的所有智能合约的代码、状态和元数据。合约仓库允许用户查询、调用和更新智能合约,同时也为区块链节点提供了执行智能合约的基础设施。进程池是一种用于管理多个进程的资源池,负责创建、维护、调度和回收进程。进程池可以提高系统的并发性能,因为它允许多个任务在不同的进程中同时执行。在区块链系统中,进程池可以用于处理并发的交易请求,提高整个系统的吞吐量。具体到本申请,合约仓库负责存储和管理智能合约的代码状态,合约进程池负责管理合约进程,提供并发执行智能合约的能力。区块链节点具体可以从进程池启动新的合约进程或者获取已有的合约进程,并通过合约进程从合约仓库调用智能合约。
可选地,区块链节点确定每一区块链交易各自对应的合约进程后,可以并行执行各合约进程。
步骤S204,针对每一合约进程,在待执行的当前语句为资源处理语句的情况下,基于该资源处理语句对应的待处理资源,为合约进程添加分布式锁。
其中,资源处理语句是指需要对区块链上的共享资源进行处理的语句,将资源处理语句所针对的共享资源,称为该资源处理语句对应的待处理资源。在一个具体的实施例中,共享资源可以是指区块快照(Snapshot)中记录的资源。快照就是在特定的区块高度下,区块链上所有区块链资源账户的资源记录。在区块链节点处理区块链交易时,需要根据当前的区块Snapshot执行交易并生成新的区块Snapshot。为保证数据的一致性,同一区块链节点的多个合约进程需要对区块Snapshot进行互斥访问。在多个智能合约并发执行的情况下,可以使用分布式锁来实现对区块Snapshot的互斥访问,避免数据冲突和回滚。
分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,这个时候,便可以使用分布式锁。分布式锁的实现方式并不唯一,例如可以基于数据库或Redis缓存实现。分布式锁的锁类型与资源处理语句的资源处理方式匹配。其中,资源处理语句的资源处理方式,是指资源处理语句针对待处理资源的处理方式。该资源处理方式可以包括读访问或写操作,对应的,分布式锁的锁类型可以包括读锁或写锁,或者,分布式锁的锁类型包括处于读加锁状态的读写锁或处于写加锁状态的读写锁。
具体地,区块链节点可以并行执行各合约进程,在执行各合约进行的过程中,针对每一合约进程,确定该合约进程待执行的当前语句的语句类型。在待执行的当前语句为资源处理语句的情况下,基于该资源处理语句对应的待处理资源、以及资源处理语句针对该待处理资源的资源处理方式,为合约进程添加分布式锁,也即,分布式锁与待处理资源关联,且分布式锁的锁类型与资源处理方式匹配。在待执行的当前语句为非资源处理语句的情况下,则无需进行加锁处理,继续执行该当前语句。其中,非资源处理语句可以包括不对资源进行处理的普通语句、以及指示进程执行完成的提示语句。
将分布式锁与待处理资源关联的方式并不唯一。例如,可以对待处理资源添加分布式锁的锁标识,以标记加锁资源;也可以基于待处理资源的资源标识确定分布式锁的锁标识,以标记分布式锁所针对的待处理资源。添加分布式锁的具体方式也不唯一,例如,可以使用SET命令结合NX和PX选项进行加锁,也可以基于GET命令进行加锁。
以分布式锁为Redis分布式锁的情况为例。区块链节点中可以包括Redis服务模块,用于负责提供Redis分布式锁功能,实现智能合约并发执行时的资源互斥访问。具体地,如图3所示,合约进程会并发更改区块Snapshot中的共享资源,为了避免不同进程在同一时间对同一个资源进行修改,在待执行的当前语句为读语句或写语句的情况下,合约进程可以访问分布式锁服务模块(Redis服务模块)获取与待处理资源(例如key1)对应的Redis分布式锁。拿到待处理资源对应的Redis分布式锁之后,合约进程才有权利访问区块Snapshot中的对应资源,通过执行读写语句实现对资源的读写。
步骤S206,对于待处理资源相同的关联语句,按照每一关联语句各自对应分布式锁的锁类型,并发执行各关联语句。
实际应用中,可以同时存在多个已添加分布式锁的合约进程,且各合约进程各自待执行的资源处理语句分别关联的待处理资源可以相同,也可以不相同。对于待处理资源各不相同的多个资源处理语句,并不涉及针对同一共享资源的访问,不会引起数据冲突,因此可以并行执行。而对于待处理资源相同的多个关联语句,由于涉及对同一共享资源的访问,可能会引起数据冲突,基于此,区块链节点可以按照每一关联语句各自对应分布式锁的锁类型,并发执行各关联语句,以避免数据冲突。
在一个具体的实施例中,分布式锁的锁类型包括分布式读锁或处于读加锁状态的读写锁。由于对共享资源的读取并不会引起数据冲突,因此,区块链节点可以并行执行各关联语句,以提高处理效率。示例性的,如图3所示,若区块链节点中的合约进程1、合约进程2和合约进程3均添加有针对共享资源key1的分布式读锁,则区块链节点可以并行执行合约进程1、合约进程2和合约进程3中各自的读语句。
在一个具体的实施例中,步骤S206包括;对于待处理资源相同的关联语句,基于各关联语句各自对应分布式锁的锁类型,从各关联语句中确定添加有分布式读锁的读语句、以及添加有分布式写锁的写语句;并行执行各读语句,在各读语句执行完成的情况下,执行写语句。
具体地,对于待处理资源相同的关联语句,区块链节点基于各关联语句各自对应分布式锁的锁类型,从各关联语句中确定添加有分布式读锁的读语句、以及添加有分布式写锁的写语句。然后,并行执行待处理资源相同的各读语句,直至各读语句均执行完成,再执行针对同一待处理资源的写语句。示例性的,如图3所示,若区块链节点中的合约进程1、合约进程2和合约进程3均添加有针对共享资源key1的分布式读锁,合约进程4添加有针对共享资源key1的分布式写锁,则区块链节点可以在并行执行合约进程1、合约进程2和合约进程3中各自针对共享资源key1的读语句之后,再执行合约进程4中针对共享资源key1的写语句。
本实施例中,多个读锁可以同时执行,相比于普通锁在任何情况下都要排队执行来说,能够提高系统的执行性能,同时,读锁和写锁是互斥排队执行的,这样可以保证了读取操作不会读到写了一半的临时数据,从而确保不会产生数据冲突,提高处理结果的准确性。
步骤S208,针对每一关联语句,在该关联语句执行完成的情况下,释放该关联语句所在合约进程的分布式锁。
具体地,针对每一关联语句,在该关联语句执行完成的情况下,进入合约进程中关联语句的下一语句的执行阶段,区块链节点可以是否该关联语句所在合约进程的分布式锁,以避免某一资源对应的分布式锁被同一合约进程长期占用。在一个具体的实现中,如图3所示,区块链节点中包括管理分布式锁的Redis服务模块,在合约进程待执行的当前语句为资源处理语句的情况下,该合约进程可以向Redis服务模块请求待处理资源对应的锁,从而能够在添加该分布式锁的情况下执行资源处理语句,实现对待处理资源的互斥访问。资源处理语句执行完成后,合约进程可以向Redis服务模块归还锁,以实现锁的释放,便于其他合约进程在需要执行资源处理语句的情况下能够及时获取锁。
进一步地,区块链节点可以在关联语句执行完成时,释放该关联语句所在合约进程的分布式锁,即实时解锁;区块链节点也可以在关联语句执行完成后,经过一个等待期,在等待期结束时再释放该关联语句所在合约进程的分布式锁,即懒解锁。其中,等待期对应的解锁等待时长可以通过配置参数确定,或者根据系统负载动态调整,例如可以是5毫秒或8毫秒等。可选地,解锁等待时长与系统负载反相关。示例性地,系统负载越重,说明需要执行的合约进程越多,通过缩短解锁等待时长能够提高分布式锁的流转效率,提升处理效率。
可以理解,对于与当前执行的其余资源处理语句的待处理资源均不相同的处理语句,区块链节点同样可以在该处理语句执行完成的情况下,释放该处理语句所在合约进程的分布式锁。关于释放锁的具体方式参见关联语句对应的锁释放过程,在此不再赘述。
上述区块链交易处理方法,获取多个待处理的区块链交易,确定每一区块链交易各自对应的合约进程,针对每一合约进程,在待执行的当前语句为资源处理语句的情况下,基于该资源处理语句对应的待处理资源,为合约进程添加分布式锁,且分布式锁的锁类型与资源处理语句的资源处理方式匹配,然后,对于待处理资源相同的关联语句,按照每一关联语句各自对应分布式锁的锁类型,并发执行各关联语句,并且,针对每一关联语句,在该关联语句执行完成的情况下,释放该关联语句所在合约进程的分布式锁。上述处理过程中,一方面,只有在待执行的当前语句为资源处理语句的情况下才对合约进程加锁,能够实现细粒度的锁添加,最大程度的降低加锁对系统性能的影响;另一方面,在加锁状态下执行资源处理语句,能够通过并发执行实现针对同一资源的互斥访问,有利于提高效率。因此,采用上述方法,能够在避免交易冲突的基础上、提高区块链交易的处理效率。
在一个实施例中,基于资源处理语句对应的待处理资源,为合约进程添加分布式锁,包括:基于资源处理语句的语句信息,确定该资源处理语句对应的待处理资源、以及该资源处理语句针对待处理资源的资源处理方式;确定与待处理资源匹配的锁标识、以及与资源处理方式匹配的锁类型;基于锁标识与锁类型,为合约进程添加分布式锁。
其中,语句信息可以包括资源处理语句中所调用的函数类型和函数变量值等。具体地,区块链节点可以提取资源处理语句的语句信息,并基于提取的语句信息,确定该资源处理语句对应的待处理资源、以及该资源处理语句针对待处理资源的资源处理方式。然后,区块链节点可以确定与待处理资源匹配的锁标识、以及与资源处理方式匹配的锁类型。示例性的,区块链节点可以将待处理资源的资源标识作为锁标识,该资源标识例如也可以是待处理资源的资源地址、哈希值或拼接字符串等;也可以融合待处理资源的资源标识和合约进程的进程标识,得到锁标识。融合资源标识和进程标识的具体方式,例如可以是拼接、编码等等。最后,区块链节点再基于确定的锁标识和锁类型,为资源处理语句所在的合约进程添加对应的分布式锁。示例性的,在确定的锁标识为“key1”、锁类型为“读锁”的情况下,区块链节点可以为资源处理语句添加锁标识为“key1”的分布式读锁。
本实施例中,先确定与待处理资源匹配的锁标识、以及与资源处理方式匹配的锁类型,再基于该锁标识和该锁类型,为合约进程添加分布式锁,能够确保分布式锁与资源处理语句的强相关性,实现细粒度的加锁。
在一个实施例中,确定与待处理资源匹配的锁标识,包括:确定待处理资源的资源标识、以及合约进程的进程标识;将资源标识作为锁的键,并将进程标识作为锁的值,得到与待处理资源匹配的锁标识。
其中,资源标识是指能够唯一标识待处理资源的标识信息;进程标识是指能够唯一标识合约进程的标识信息。实际应用中,可以用键值对表征分布式锁。键值对包括成对存在的键和值,键用作键值对的名称,用于存储和检索相应的值。键和值之间可以用分隔符分隔,该分隔符例如可以是“/”或“:”等。
具体地,一方面,区块链节点可以基于待处理资源的资源地址、哈希值或拼接字符串等信息中的至少一种,确定该待处理资源的资源标识。示例性的,区块链节点可以将待处理资源的资源地址、哈希值或拼接字符串,作为该待处理资源的资源标识;也可以对资源地址和哈希值进行二次编码,得到待处理资源的资源标识。另一方面,区块链节点可以将合约进程的UUID(Universally Unique Identifier,通用唯一标识码)确定为合约进程的进程标识,或者,生成一个随机数作为合约进程的进程标识。进一步地,生成随机数作为进程标识的情况下,可以通过限定随机数的数值范围确保进程标识的唯一性,也可以在生成随机数之后,将生成的随机数与当前的各进程标识进行比对,在不存在与当前生成的随机数相同的进程标识的情况下,将该随机数确定为合约进程的进程标识。
确定了资源标识和进程标识之后,区块链节点可以将资源标识作为锁的键,并将进程标识作为锁的值,得到键值对,并进一步确定该键值对表征的、与待处理资源匹配的锁标识。可以理解,锁标识中的键能够标识与锁关联的待处理资源,锁标识中的值能够标识加锁的合约进程。
本实施例中,将资源标识作为锁的键,并将进程标识作为锁的值,得到与待处理资源匹配的锁标识,能够确保待处理资源、以及加锁合约标识所构成的组合,与分布式锁之间的一一对应关系,使得后续针对该分布式锁的处理更加便捷和准确,从而进一步避免数据冲突,提高区块链交易处理结果的准确性。
在一个实施例中,在关联语句执行完成的情况下,释放关联语句所在合约进程的分布式锁,包括:在关联语句执行完成的情况下,确定关联语句所在合约进程对应的键值对;释放键值对所表征的分布式锁。
具体地,在关联语句执行完成的情况下,区块链可以确定关联语句所在合约进程对应的键值对,并将该键值对与待释放的分布式锁的键值对进行匹配,若二者的键值对相同,则释放该分布式锁。
本实施例中,将资源标识作为锁的键,并将进程标识作为锁的值,并根据键值对释放分布式锁,能够确保锁释放处理的准确性,进而避免误释放之后引起的数据竞争,有利于进一步提高区块链交易处理结果的准确性。
在一个实施例中,基于锁标识与锁类型,为合约进程添加分布式锁,包括:在锁类型为读锁的情况下,基于锁标识为合约进程添加分布式读锁;在锁类型为写锁的情况下,确定待处理资源对应的分布式写锁的使用状态;若使用状态为使用中,则在待处理资源对应的分布式写锁被释放后,基于锁标识为合约进程添加分布式写锁;若使用状态为未使用,则基于锁标识为合约进程添加分布式写锁。
其中,分布式读锁可以是处于读加锁状态的读写锁,分布式写锁可以是处于写加锁状态的读写锁。读写锁是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。由于写数据会因此数据的变化,而读数据并不会引起数据的变化,因此,同一时间只有一个合约进程可以占有针对同一共享资源的分布式写锁, 但是同一时间可以有多个合约进程同时占有针对同一共享资源的分布式读锁。
具体地,区块链节点可以在锁类型为读锁的情况下,基于锁标识为合约进程添加分布式读锁,使得合约进程获得待处理资源的访问权限。在锁类型为写锁的情况下,区块链节点则需要进一步确定待处理资源对应的分布式写锁的使用状态。若该分布式写锁的使用状态为使用中,即该待处理资源对应的读写锁处于写加锁模式,则区块链节点需要在待处理资源对应的分布式写锁被释放后,再基于锁标识为合约进程添加分布式写锁。若使用状态为未使用,则区块链节点可以基于锁标识为合约进程添加分布式写锁。
上述实施例中,根据锁类型进行锁的添加,能够确保同一时间只有一个合约进程被添加某一共享资源的分布式写锁,能够避免数据冲突,同时,支持同一时间多个合约进程被添加某一共享资源的分布式读锁,能够提高处理效率。
在一个实施例中,在待处理资源对应的分布式写锁的使用状态为使用中的情况下,区块链节点在该分布式写锁被解锁之前,不添加针对待执行写操作的待处理资源的分布式锁;在待处理资源对应的分布式读锁的使用状态为使用中、且该待处理资源对应的分布式写锁的使用状态为未使用的情况下,区块链节点可以为需要对该待处理资源进行读访问的合约进程添加该待处理资源对应的分布式读锁,并在所有分布式读锁都释放的情况下,为需要对该待处理资源进行写操作的合约进程添加该待处理资源对应的分布式写锁。也即,当待处理资源对应的读写锁是写加锁状态,在这个写锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞;当读写锁在读加锁状态时, 所有试图以读模式对它进行加锁的线程都可以得到访问权, 但是如果线程希望以写模式对此锁进行加锁, 它必须直到所有的线程都释放该锁。当读写锁处于读模式锁住状态时, 如果有另外线程试图以写模式加锁, 读写锁通常会阻塞随后的读模式锁请求, 这样可以避免读模式锁长期占用, 而等待的写模式锁请求长期阻塞。
本实施例中,相当于是在加锁阶段通过对加锁原则进行优化,以避免数据冲突。在其他实施例中,还可以在加锁后资源处理语句的执行阶段,通过对执行原则进行优化,以避免数据冲突。示例性的,区块链节点可以对于待处理资源相同的关联语句,基于各关联语句各自对应分布式锁的锁类型,从各关联语句中确定添加有分布式读锁的读语句、以及添加有分布式写锁的写语句;并行执行各读语句,在各读语句执行完成的情况下,执行写语句。
在一个实施例中,在关联语句执行完成的情况下,释放关联语句所在合约进程的分布式锁,包括:获取解锁等待时长;在关联语句执行完成之后,继续执行关联语句所在合约进程中的剩余语句;在解锁等待时长所表征的等待期结束的情况下,确定合约进程的活跃语句的语句类型;若语句类型匹配的锁处理方式为释放锁,则释放合约进程的分布式锁。
其中,活跃语句包括等待期结束时正在执行的语句、以及等待期结束时待执行的语句。解锁等待时长可以通过配置参数确定,或者根据系统负载动态调整。
具体地,区块链节点可以获取解锁等待时长,并在关联语句执行完成之后,继续执行关联语句所在合约进程中的剩余语句。若解锁等待时长所表征的等待期中,待执行的剩余语句为非资源处理语句,则直接执行该剩余语句即可;若解锁等待时长所表征的等待期中,待执行的剩余语句为资源处理语句,则进一步判断该资源处理语句是否与合约进程当前持有的分布式锁匹配。若待执行的资源处理语句与合约进程当前持有的分布式锁匹配,则按照步骤S206的处理方式,基于该分布式锁的锁类型,执行该资源处理语句;若待执行的资源处理语句与合约进程当前持有的分布式锁不匹配,则按照步骤S204的处理方式,为合约进程添加新的分布式锁。资源处理语句与合约进程当前持有的分布式锁匹配,包括:资源处理语句对应的待处理资源与分布式锁的锁标识匹配;资源处理语句针对待处理资源的资源处理方式与分布式锁的锁类型匹配。
区块链节点可以在关联语句执行后开始计时,等待解锁等待时长所表征的等待期结束。例如,解锁等待时长为8毫秒,则解锁等待时长所表征的等待期,是指关联语句执行完成后的8毫秒内。在等待期结束的情况下,区块链节点可以将等待期结束时合约进程正在执行的语句、以及等待期结束时合约进程待执行的语句,确定为合约进程的活跃语句,并进一步确定该活跃语句的语句类型。然后,区块链节点可以确定与该语句类型匹配的锁处理方式,并在该锁处理方式为释放锁的情况下,释放合约进程的分布式锁。该语句类型,例如可以包括资源处理语句和非资源处理语句。其中,非资源处理语句可以包括不对资源进行处理的普通语句、以及指示进程执行完成的提示语句。
在一个具体的实施例中,锁处理方式包括释放锁和持有锁。若各活跃语句各自的语句类型分别匹配的锁处理方式不相同,则区块链节点可以基于各锁处理方式各自的优先级,选择优先级最高的锁处理方式。以持有锁的优先级高于释放锁的情况为例,在等待期结束时合约进程正在执行的语句匹配的锁处理方式为持有锁、且等待期结束时合约进程待执行的语句匹配的锁处理方式为释放锁的情况下,区块链节点按照持有锁的处理方式,控制合约进程继续持有分布式锁。
上述实施例中,区块链节点也可以在关联语句执行完成后,经过一个等待期,在等待期结束后再根据活跃语句的语句类型,对分布式锁进行相应的处理,能够实现针对分布式锁的懒解锁处理。而实际应用中,在同一合约进程中,往往存在多个针对同一待处理资源的资源处理语句,对分布式锁进行懒解锁处理,能够使得相邻的多个针对同一待处理资源的资源处理语句的处理过程中,不必进行频繁的加锁和解锁,有利于提高效率。
可以理解,在根据锁处理方式对合约进程当前持有的分布式锁进行处理之前,还需要确定活跃语句的语句类型匹配的锁处理方式。在一个实施例中,语句类型包括非资源处理语句和资源处理语句。在该实施例的情形下,区块链交易处理方法还包括:在活跃语句为非资源处理语句的情况下,确定与语句类型匹配的锁处理方式为释放锁;在活跃语句为资源处理语句的情况下,若该活跃语句与该关联语句各自的待处理资源不相同,则确定与语句类型匹配的锁处理方式为释放锁;若该活跃语句与该关联语句各自的待处理资源相同,则确定与语句类型匹配的锁处理方式为续租锁,以使合约进程继续持有分布式锁。
其中,源处理语句是指需要对区块链上的共享资源进行处理的语句,将资源处理语句所针对的共享资源,称为该资源处理语句对应的待处理资源。非资源处理语句可以包括不对资源进行处理的普通语句、以及指示进程执行完成的提示语句。
具体地,区块链节点可以在活跃语句为非资源处理语句的情况下,确定与语句类型匹配的锁处理方式为释放锁。在活跃语句为资源处理语句的情况下,则区块链节点需要进一步判断该活跃语句与该关联语句各自的待处理资源是否相同。若该活跃语句与该关联语句各自的待处理资源不相同,则确定与语句类型匹配的锁处理方式为释放锁;若该活跃语句与该关联语句各自的待处理资源相同,则确定与语句类型匹配的锁处理方式为续租锁。锁处理方式为释放锁的情况下,区块链节点可以确定关联语句所在合约进程对应的键值对,并释放该键值对所表征的分布式锁。锁处理方式为持有锁的情况下,区块链节点可以控制合约进程继续持有分布式锁。
在一个具体的实施例中,分布式锁携带过期时间。锁处理方式为持有锁的情况下,区块链节点可以判断该分布式锁的剩余有效期是否满足延期条件,并在该剩余有效期满足延期条件的情况下,更新该分布式锁的过期时间。其中,剩余有效期为当前时间与过期时间的时间差。剩余有效期满足延期条件,可以包括剩余有效期小于或等于活跃语句的剩余执行时长,还可以包括延期总时长小于时长阈值。
上述实施例中,根据活跃语句的语句类型确定对应的锁处理方式,能够匹配不同场景下的实际需求,有利于提高区块链交易处理方法的灵活性。
在一个实施例中,获取多个待处理的区块链交易,包括:确定区块链交易池中所包含区块链交易的交易数量;在交易数量满足新区块生成条件的情况下,从区块链交易池中获取多个待处理的区块链交易。
其中,新区块生成条件可以是交易数量大于数量阈值,或者,交易数量大于或等于数量阈值。具体地,区块链节点可以确定其本地区块链交易池中所包含的区块链交易的交易数量,并判断当前交易池中是否有足够的交易进行区块生成。并在交易池中的交易数量满足新区块生成条件的情况下,从区块链交易池中获取多个待处理的区块链交易。
本实施例中,在区块链交易池中所包含区块链的交易数量满足新区块生成条件的情况下,从区块链交易池中获取多个待处理的区块链交易,相当于对累积的待处理交易进行集中处理,有利于提高效率。
在一个实施例中,区块链交易处理方法还包括:响应于交易请求事件,接收请求处理的区块链交易;基于区块链交易中携带的签名信息和权限信息,对区块链交易进行验证,得到验证结果;在验证结果为验证通过的情况下,将区块链交易放入区块链交易池。
其中,交易请求事件的发起方,可以包括区块链节点自身,也可以包括区块链系统中的其他节点。具体地,区块链节点响应于交易请求事件,接收请求处理的区块链交易,然后,从区块链交易中提取签名信息和权限信息,并基于该签名信息和权限信息,对该区块链交易进行验证,得到验证结果。若验证结果为验证通过,则区块链节点将区块链交易放入本地的区块链交易池;若验证结果为验证不通过,则区块链节点丢弃该区块链交易。
本实施例中,在将区块链交易放入区块链交易池之前,先对接收的区块链交易进行验证,能够确保放入交易池中的区块链交易的合规性,从而确保后续的交易处理过程能够顺利进行,有利于进一步提高区块链交易处理过程的工作效率。
在一个实施例中,区块链交易处理方法还包括:调用区块生成器生成新区块;在取出的各区块链交易均执行完成的情况下,将取出的各区块链交易各自的执行结果存储至新区块;在区块链上发起针对新区块的区块提案。
其中,区块提案用于共识节点对新区块进行共识,并在共识通过的情况下将新区块接入区块链。具体地,区块链节点中部署有区块生成器,区块链节点可以调用该区块生成器生成新区块,并在取出的各区块链交易均执行完成的情况下,将取出的各区块链交易各自的执行结果存储至新区块。进而可以在区块链上发起针对该新区块的区块提案,并通过共识模块将该区块提案发送给区块链系统上的其他节点进行共识。在共识通过的情况下,各节点将该新区块追加到区块链账本中,并将区块中的数据更新到状态数据中,实现新区块的上链。其中,区块中的数据包括合约执行得到的最新结果。在共识不通过的情况下,结束流程。
进一步地,在取出的各区块链交易均执行完成的情况下,区块链节点可以开始调度可能有冲突的交易并行执行,得到各交易各自的执行结果,再对各执行结果进行冲突检测,若发生冲突,则将已执行且未冲突的交易执行结果为基础重新执行存在冲突的交易,直至所有执行结果均不存在冲突,再将各执行结果存储至新区块,并在区块链上发起针对新区块的区块提案。其中,可能有冲突的交易可以包括所调用智能合约相同的交易、调用函数名称或参数相同的交易等等。
上述实施例中,在取出的各区块链交易均执行完成的情况下,在区块链上发起针对新区块的区块提案,能够实现交易上链,确保交易结果不被篡改,有利于提高安全性。
在一个实施例中,分布式锁携带过期时间。在该实施例的情形下,区块链交易处理方法还包括:在并发执行各关联语句的过程中,确定各关联语句各自携带分布式锁的剩余有效期;在剩余有效期满足延期条件的情况下,更新分布式锁的过期时间。
其中,剩余有效期为当前时间与过期时间的时间差。剩余有效期满足延期条件,包括剩余有效期小于或等于关联语句的剩余执行时长,还可以包括延期总时长小于或等于时长阈值。具体地,区块链节点可以在并发执行各关联语句的过程中,确定各关联语句各自携带分布式锁的剩余有效期。并在剩余有效期满足延期条件的情况下,更新分布式锁的过期时间,从而实现对分布式锁的续租。进一步地,在剩余有效期不满足延期条件的情况下,则区块链节点不更新分布式锁的过期时间。若分布式锁过期的情况下关联语句未执行完成,则暂停关联语句所在的合约进程,回退至待执行该关联语句的状态,直至该合约进程再一次添加该关联语句对应的分布式锁,再重新执行该关联语句。
本实施例中,在分布式锁的剩余有效期满足延期条件的情况下,更新分布式锁的过期时间,能够避免因锁过期导致关联语句无法执行,有利于提高区块链系统的稳定性。
在一个具体的实施例中,如图5所示,区块链交易处理方法包括以下步骤:
步骤S501,响应于交易请求事件,接收请求处理的区块链交易;
步骤S502,基于区块链交易中携带的签名信息和权限信息,对区块链交易进行验证,得到验证结果;
步骤S503,在验证结果为验证通过的情况下,将区块链交易放入区块链交易池;
步骤S504,在区块链交易池中所包含区块链交易的交易数量满足新区块生成条件的情况下,调用区块生成器生成新区块;
步骤S505,从区块链交易池中获取多个待处理的区块链交易,确定每一区块链交易各自对应的合约进程;
其中,合约进程包括多个语句;
步骤S506,针对每一合约进程,在待执行的当前语句为资源处理语句的情况下,基于资源处理语句的语句信息,确定该资源处理语句对应的待处理资源、以及该资源处理语句针对待处理资源的资源处理方式;
步骤S507,将待处理资源的资源标识作为锁的键、将合约进程的进程标识作为锁的值,得到与待处理资源匹配的锁标识,并确定与资源处理方式匹配的锁类型;
步骤S508,在锁类型为读锁的情况下,基于锁标识为合约进程添加分布式读锁;
步骤S509,在锁类型为写锁的情况下,确定待处理资源对应的分布式写锁的使用状态;
步骤S510,若使用状态为使用中,则在待处理资源对应的分布式写锁被释放后,基于锁标识为合约进程添加分布式写锁;若使用状态为未使用,则基于锁标识为合约进程添加分布式写锁。
步骤S511,对于待处理资源相同的关联语句,基于各关联语句各自对应分布式锁的锁类型,从各关联语句中确定添加有分布式读锁的读语句、以及添加有分布式写锁的写语句;
步骤S512,并行执行各读语句,在各读语句执行完成的情况下,执行写语句;
其中,分布式写锁和分布式读锁均携带有过期时间,区块链节点在执行各资源处理语句的过程中,可以确定各资源处理语句各自携带分布式锁的剩余有效期,并在剩余有效期满足延期条件的情况下,更新分布式锁的过期时间;
步骤S513,在关联语句执行完成的情况下,确定关联语句所在合约进程对应的键值对和解锁等待时长,并继续执行关联语句所在合约进程中的剩余语句;
步骤S514,在解锁等待时长所表征的等待期结束的情况下,确定合约进程的活跃语句的语句类型;
其中,活跃语句包括等待期结束时正在执行的语句、以及等待期结束时待执行的语句;
步骤S515,若活跃语句为非资源处理语句,则确定与语句类型匹配的锁处理方式为释放锁;执行步骤S518;
步骤S516,若活跃语句为资源处理语句,且该活跃语句与该关联语句各自的待处理资源不相同,则确定与语句类型匹配的锁处理方式为释放锁;执行步骤S518;
步骤S517,若活跃语句为资源处理语句,且该活跃语句与该关联语句各自的待处理资源相同,则确定与语句类型匹配的锁处理方式为续租锁;执行步骤S519;
步骤S518,释放键值对所表征的分布式锁;
步骤S519,合约进程继续持有键值对所表征的分布式锁;
步骤S520,在取出的各区块链交易均执行完成的情况下,将取出的各区块链交易各自的执行结果存储至新区块,并在区块链上发起针对新区块的区块提案;
其中,区块提案用于共识节点对新区块进行共识,并在共识通过的情况下将新区块接入区块链。
上述区块链交易处理方法,只有在待执行的当前语句为资源处理语句的情况下才对合约进程加锁,能够实现细粒度的锁添加,最大程度的降低加锁对系统性能的影响,并且,在加锁状态下执行资源处理语句,能够通过并发执行实现针对同一资源的互斥访问,有利于提高效率。因此,采用上述方法,能够在避免交易冲突的基础上、提高区块链交易的处理效率。
下面结合附图,对区块链交易处理方法进行详细介绍。
在一个实施例中,如图6所示,区块链节点中可以包括网络模块、验证模块、分布式锁服务(Redis服务)模块、交易池模块、调度执行模块、共识模块和存储模块。其中,网络模块负责区块链节点之间的通信,包括交易广播、区块同步、节点发现等功能。验证模块负责对交易和区块进行验证,确保数据的正确性和一致性。验证模块包括证书验证和权限验证两个子模块。证书验证负责验证交易和区块的签名,确保数据的完整性和非抵赖性;权限验证负责验证交易发起者和区块生成者的权限,确保数据的合法性。Redis服务模块负责提供Redis分布式锁功能,用于实现智能合约并发执行时的资源互斥访问。交易池模块负责管理待处理的交易,包括接收新交易、删除已处理交易等功能。
调度执行模块负责对交易进行调度和执行,包括区块生成器、交易调度器、区块Snapshot、合约进程池和合约仓库等子模块。其中,区块生成器负责根据交易池中的交易生成新的区块;交易调度器负责将交易分配给合约进程进行执行;区块Snapshot表示即将写入的新区块的读写状态;合约进程池负责管理合约进程,提供并发执行智能合约的能力;合约仓库负责存储和管理智能合约的代码和状态。
共识模块负责实现区块链系统的共识算法,包括区块广播和区块验证两个子模块。区块广播负责将新生成的区块广播给其他区块链节点;区块验证负责验证接收到的区块,确保区块的正确性和一致性。存储模块负责管理区块链节点的数据存储,包括区块账本和状态数据两个子模块。区块账本负责存储区块链的区块数据,包括区块头、区块体等信息;状态数据负责存储区块链的状态数据,包括账户余额、智能合约状态等信息。
在一个实施例中,如图7所示,区块链Redis分布式锁初始化与交易调度过程包括以下步骤:
步骤S701,初始化区块链节点中部署的各个模块。
其中,各模块包括网络模块、验证模块、交易池模块、调度执行模块、共识模块、存储模块和Redis服务。初始化区块链节点中部署的各个模块具体包括: 初始化区块链网络模块,建立本节点与其他区块链节点的连接;初始化验证模块,加载证书和权限配置;初始化交易池模块,用于管理待处理的区块链交易;初始化调度执行模块,包括区块生成器,交易调度器,合约进程池和合约仓库等子模块;初始化共识模块,加载共识算法配置;初始化存储模块,加载区块账本和状态数据;初始化Redis服务模块,连接到Redis实例或集群。
步骤S702,区块链节点开始接收新交易。
步骤S703,区块链节点验证模块验证交易的证书签名是否正确。若否,则转到步骤S704;若是,则转到步骤S705。
步骤S704,返回这笔交易验证失败的反馈信息,并返回步骤S702。
步骤S705,区块链节点验证模块验证交易的权限是否正确。若否,则转到步骤S704;若是,则转到步骤S706。
步骤S706,将验证通过区块链交易放入交易池中。
步骤S707,判断交易池中是否有足够的交易进行区块生成。若否,则返回步骤S702;若是,则转到步骤S708。
步骤S708,调用区块生成器生成新的区块。
步骤S709,区块链节点交易调度器开始调度交易并行执行。
步骤S710,区块链节点从进程池启动新的进程或者获取已有进程并行执行交易。
其中,进程是指区块链交易所需调用智能合约的合约进程。在并行执行交易的过程中,区块链节点调用Redis服务模块为合约进程进行加锁和解锁处理,以避免并行处理过程中的数据冲突。
步骤S711,判断交易是否执行成功。若是,则转到步骤S712;若否,则转到步骤S713。
步骤S712,返回合约执行成功的信息。转到步骤S714。
步骤S713,返回合约执行失败的信息。转到步骤S714。
步骤S714,记录合约执行的结果。
步骤S715,判断区块所有交易执行完毕。若是,则转到步骤S716;若否,则返回不会S710。
步骤S716,区块链节点交易调度器开始调度可能有冲突的交易并行执行,如果发生冲突可能需要重新执行;
步骤S717,将执行完成的各交易结果存储到区块中,并通过共识模块发送给所有节点进行共识;
步骤S718,判断共识是否通过。若是,则转到步骤S719;若否,则结束流程。
步骤S719,所有节点将区块追加到区块账本中。
步骤S720,所有节点将区块中的数据更新到状态数据中。
在一个实施例中,如图8所示,区块链合约进程与Redis分布式锁交易的过程包括以下步骤:
步骤S801,交易调度器将待处理的多个区块链交易分别分配给对应的合约进程并行执行。
步骤S802,合约进程开始逐步执行交易。
其中,合约进程中包括多个语句,通过依次执行各语句逐步执行对应的区块链交易。
步骤S803,判断待处理的当前语句是否为资源处理语句。若是,则执行步骤S804;若否,则转到步骤S813。
其中,资源处理语句,可以是需要对共享资源进行读访问的读语句,或者是需要对共享资源进行写操作的写语句。
步骤S804,根据待处理资源生成锁的键。
例如,将待处理资源的资源地址或哈希值作为锁的键。
步骤S805,生成一个随机数或UUID作为锁的值。
其中,锁的值用于标识加锁的合约进程。
步骤S806,设置锁的过期时间,以防止死锁。
步骤S807,确定资源处理语句针对共享资源的资源处理方式。
其中,资源处理方式可以包括读访问和写操作。
步骤S808,资源处理方式为写操作,合约进程尝试获取写锁。
步骤S809,资源处理方式为读访问,合约进程尝试获取读锁。使用Redis的读写锁进行加锁。
具体可以使用Redis分布式锁,基于SET命令进行加锁。
步骤S810,判断加锁是否成功。若是,则执行步骤S811,若否,则转到步骤S816。
步骤S811,合约进程根据交易内容执行相应的操作。
该操作例如可以包括修改账户余额、更新合约状态等,写入操作会写入到新区块Snapshot中。
步骤S812,在完成对资源的访问和修改后,进行解锁。返回步骤S802。
具体地,对于读访问,可以使用读写锁实现的解锁方法进行解锁。对于写操作,可以使用EVAL命令执行Lua脚本进行解锁,根据锁的键和值进行解锁,以避免误解锁。
步骤S813,判断当前语句是否为普通执行语句。若是,则转到步骤S814;若否,则转到步骤S815。
步骤S814,执行当前普通语句。返回步骤S802。
步骤S815,判断当前语句是否为执行完成提示语句。若是,则转到步骤S816;若否,则返回步骤S802。
步骤S816,判断所有待处理交易是否执行完成。若是,则转到步骤S816;若否,则返回步骤S801。
步骤S817,生成新的区块,并开始进行广播共识。
在一个实施例中,如图9所示,区块链节点在处理锁过期的过程包括以下步骤:
步骤S901,合约进程开始执行交易。
步骤S902,在执行过程中,合约进程需要互斥访问资源。
步骤S903,根据待处理资源生成锁的键。
例如,将待处理资源的资源地址或哈希值作为锁的键。
步骤S904,生成一个随机数或UUID作为锁的值。
其中,锁的值用于标识加锁的合约进程。
步骤S905,设置锁的初始过期时间,以防止死锁。
步骤S906,合约进程尝试通过Redis分布式锁加锁。
例如,可以使用SET命令进行加锁。
步骤S907,判断加锁是否成功。
步骤S908,如果加锁成功,合约进程继续执行交易。
步骤S909,合约进程根据交易内容执行相应的操作。该操作例如可以包括修改账户余额,更新合约状态等。
步骤S910,在执行过程中,合约进程定期检查锁的过期时间。
步骤S911,如果锁即将过期,合约进程尝试对锁进行续租,并判断续租时间超过续租时间阈值。若是,则转到步骤S912;若否,则结束流程。
骤S912,根据锁的键和值进行续租,将锁的过期时间延长。
具体可以使用EVAL命令进行续租。
骤S913,判断续租是否成功。若是,则转到步骤S915;若否,则执行步骤S914。
步骤S914,回滚或重试交易。
步骤S915,在完成对资源的访问和修改后,合约进程进入懒解锁阶段。
在懒解锁阶段,合约进程不立即释放锁,而是等待一段时间,如几毫秒,之后再进行解锁,这个等待时间可以通过配置参数或根据系统负载动态调整。
步骤S916,等待时间结束后,根据锁的键和值进行解锁。
具体可以使用EVAL命令进行解锁,确保只有加锁的合约进程才能解锁。
步骤S917,合约进程继续执行交易,直至完成。
传统的联盟链系统中,例如Hyperledger Fabric为了防止交易冲突,交易是串行执行的。为了让交易能够并发,提出了区块Snapshot的概念,所有交易都是并发执行的,一条交易执行完成后会尝试将它的读写集应用到区块Snapshot中,此时如果有并发的交易已经写入,则冲突需要重新执行这笔交易。然而重新执行交易需要重新发送到合约进程中执行,中间可能通过很长的网络通信,导致系统的执行区块的效率很低。因此,本申请提出了基于Redis分布式锁的区块链智能合约并发方案,该方案着重解决上述问题。
具体地,本申请将Redis分布式锁技术应用于区块链智能合约的并发执行场景,实现了对区块Snapshot的互斥访问。这是对传统区块链智能合约并发处理方法的一种创新改进,可以有效降低数据冲突和回滚次数,提高执行效率。本申请采用Redis分布式锁作为资源互斥访问的管理工具,利用Redis的高性能和低延迟特性,保证了在高并发场景下智能合约的正确执行。相比传统的并发处理方法,本申请方案具有更好的性能和可扩展性。并且,本申请方案支持灵活的锁策略,包括实现细粒度的加锁、支持过期时间等参数的调整,以满足不同场景的需求。同时,本申请方案还提供了细致的锁续租和异常处理流程,确保在遇到锁过期和各种异常时能够正常工作,
本申请可以应用于高并发交易场景、跨链通信与资产跨链场景、联盟链和私有链场景、区块链应用开发平台等场景中。在存在高并发交易的金融、游戏、电商等领域,区块链系统可能需要处理大量的并发交易,使用本申请方案可以有效提高智能合约并发执行的效率,降低数据冲突和回滚次数,帮助区块链系统应对高并发场景的挑战。在区块链跨链通信和资产跨链场景中,多个区块链系统需要协同处理跨链交易。本申请方案可以通过Redis分布式锁实现对跨链交易的互斥访问,确保数据的一致性和正确性。在联盟链和私有链场景中,区块链系统需要满足各成员的业务需求和性能要求。本申请方案可以作为一种优化手段,能够提高智能合约的执行效率,为联盟链和私有链提供更好的性能支持。在区块链应用开发平台中,开发者需要快速构建和部署智能合约。本申请方案可以简化智能合约的并发处理逻辑,降低开发者的开发难度,提高区块链应用开发的效率。
在一个实施例中,以应用场景为游戏场景为例。区块链节点可以获取游戏场景下,由不同客户端发起的多个待处理的区块链交易,确定每一区块链交易各自对应的合约进程。然后,并发执行各合约进程。在并发执行各合约进程的过程中:针对每一合约进程,在待执行的当前语句为资源处理语句的情况下,基于该资源处理语句对应的待处理资源,为合约进程添加分布式锁,且分布式锁的锁类型与资源处理语句的资源处理方式匹配;对于待处理资源相同的关联语句,按照每一关联语句各自对应分布式锁的锁类型,并发执行各关联语句;针对每一关联语句,在该关联语句执行完成的情况下,释放该关联语句所在合约进程的分布式锁。从而,可以实现针对同一共享游戏资源的互斥访问,有利于提高处理效率。
在一个实施例中,以应用场景为跨链交易场景为例。区块链节点可以获取跨链场景下,由多个区块链上不同客户端发起的多个待处理的跨链交易,确定每一跨链交易各自对应的合约进程。然后,并发执行各合约进程。在并发执行各合约进程的过程中:针对每一合约进程,在待执行的当前语句为资源处理语句的情况下,基于该资源处理语句对应的待处理资源,为合约进程添加分布式锁,且分布式锁的锁类型与资源处理语句的资源处理方式匹配;对于待处理资源相同的关联语句,按照每一关联语句各自对应分布式锁的锁类型,并发执行各关联语句;针对每一关联语句,在该关联语句执行完成的情况下,释放该关联语句所在合约进程的分布式锁。从而,可以实现针对同一共享资源的互斥访问,有利于提高处理效率。
上述应用场景表明,本申请方案具有较大的实际应用价值,有望为区块链系统的性能优化和资源管理带来新的解决方案。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的区块链交易处理方法的区块链交易处理装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个区块链交易处理装置实施例中的具体限定可以参见上文中对于区块链交易处理方法的限定,在此不再赘述。
在一些实施例中,如图10所示,提供了一种区块链交易处理装置,包括:交易调度模块1002、锁添加模块1004、关联语句执行模块1006和锁释放模块1010,其中:
交易调度模块1002,用于获取多个待处理的区块链交易,确定每一区块链交易各自对应的合约进程;合约进程包括多个语句;
锁添加模块1004,用于针对每一合约进程,在待执行的当前语句为资源处理语句的情况下,基于该资源处理语句对应的待处理资源,为合约进程添加分布式锁;分布式锁的锁类型与资源处理语句的资源处理方式匹配;
关联语句执行模块1006,用于对于待处理资源相同的关联语句,按照每一关联语句各自对应分布式锁的锁类型,并发执行各关联语句;
锁释放模块1010,用于针对每一关联语句,在该关联语句执行完成的情况下,释放该关联语句所在合约进程的分布式锁。
在一个实施例中,锁添加模块1004包括:处理方式确定单元,用于基于资源处理语句的语句信息,确定该资源处理语句对应的待处理资源、以及该资源处理语句针对待处理资源的资源处理方式;锁标识确定单元,用于确定与待处理资源匹配的锁标识;锁类型确定单元,用于确定与资源处理方式匹配的锁类型;锁添加单元,用于基于锁标识与锁类型,为合约进程添加分布式锁。
在一个实施例中,锁标识确定单元,具体用于:确定待处理资源的资源标识、以及合约进程的进程标识;将资源标识作为锁的键,并将进程标识作为锁的值,得到与待处理资源匹配的锁标识。
在一个实施例中,锁释放模块1010具体用于:在关联语句执行完成的情况下,确定关联语句所在合约进程对应的键值对;释放键值对所表征的分布式锁。
在一个实施例中,锁添加单元具体用于:在锁类型为读锁的情况下,基于锁标识为合约进程添加分布式读锁;在锁类型为写锁的情况下,确定待处理资源对应的分布式写锁的使用状态;若使用状态为使用中,则在待处理资源对应的分布式写锁被释放后,基于锁标识为合约进程添加分布式写锁;若使用状态为未使用,则基于锁标识为合约进程添加分布式写锁。
在一个实施例中,关联语句执行模块1006具体用于;对于待处理资源相同的关联语句,基于各关联语句各自对应分布式锁的锁类型,从各关联语句中确定添加有分布式读锁的读语句、以及添加有分布式写锁的写语句;并行执行各读语句,在各读语句执行完成的情况下,执行写语句。
在一个实施例中,锁释放模块1010具体用于:获取解锁等待时长;在关联语句执行完成之后,继续执行关联语句所在合约进程中的剩余语句;在解锁等待时长所表征的等待期结束的情况下,确定合约进程的活跃语句的语句类型;若语句类型匹配的锁处理方式为释放锁,则释放合约进程的分布式锁。其中,活跃语句包括等待期结束时正在执行的语句、以及等待期结束时待执行的语句。
在一个实施例中,语句类型包括非资源处理语句和资源处理语句。在该实施例的情形下,区块链交易处理装置还包括锁处理方式确定模块,用于:在活跃语句为非资源处理语句的情况下,确定与语句类型匹配的锁处理方式为释放锁;在活跃语句为资源处理语句的情况下,若该活跃语句与该关联语句各自的待处理资源不相同,则确定与语句类型匹配的锁处理方式为释放锁;若该活跃语句与该关联语句各自的待处理资源相同,则确定与语句类型匹配的锁处理方式为续租锁,以使合约进程继续持有分布式锁。
在一个实施例中,交易调度模块1002具体用于:确定区块链交易池中所包含区块链交易的交易数量;在交易数量满足新区块生成条件的情况下,从区块链交易池中获取多个待处理的区块链交易。
在一个实施例中,区块链交易处理装置还包括交易池模块,用于:响应于交易请求事件,接收请求处理的区块链交易;基于区块链交易中携带的签名信息和权限信息,对区块链交易进行验证,得到验证结果;在验证结果为验证通过的情况下,将区块链交易放入区块链交易池。
在一个实施例中,区块链交易处理装置还包括提案模块,用于:调用区块生成器生成新区块;在取出的各区块链交易均执行完成的情况下,将取出的各区块链交易各自的执行结果存储至新区块;在区块链上发起针对新区块的区块提案。其中,区块提案用于共识节点对新区块进行共识,并在共识通过的情况下将新区块接入区块链。
在一个实施例中,分布式锁携带过期时间。在该实施例的情形下,区块链交易处理装置还包括过期时间更新模块,用于:在并发执行各关联语句的过程中,确定各关联语句各自携带分布式锁的剩余有效期;在剩余有效期满足延期条件的情况下,更新分布式锁的过期时间。其中,剩余有效期为当前时间与过期时间的时间差。
上述区块链交易处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图11所示。该计算机设备包括处理器、存储器、输入/输出接口(Input/Output,简称I/O)和通信接口。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储区块链交易处理方法中涉及到的数据。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种区块链交易处理方法。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图12所示。该计算机设备包括处理器、存储器、输入/输出接口、通信接口、显示单元和输入装置。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口、显示单元和输入装置通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、移动蜂窝网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种区块链交易处理方法。该计算机设备的显示单元用于形成视觉可见的画面,可以是显示屏、投影装置或虚拟现实成像装置,显示屏可以是液晶显示屏或电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图11和图12中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述区块链交易处理方法中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述区块链交易处理方法中的步骤。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述区块链交易处理方法中的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要遵守相关地域和地区的相关法律法规和标准。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。

Claims (24)

1.一种区块链交易处理方法,其特征在于,所述方法包括:
获取多个待处理的区块链交易,确定每一所述区块链交易各自对应的合约进程;所述合约进程包括多个语句;
针对每一所述合约进程,在待执行的当前语句为资源处理语句的情况下,基于所述资源处理语句的语句信息,确定所述资源处理语句对应的待处理资源、以及所述资源处理语句针对所述待处理资源的资源处理方式;
确定与所述待处理资源匹配的锁标识、以及与所述资源处理方式匹配的锁类型;
基于所述锁标识与所述锁类型,为所述合约进程添加分布式锁;
对于所述待处理资源相同的关联语句,按照每一所述关联语句各自对应分布式锁的锁类型,并发执行各所述关联语句;
针对每一所述关联语句,在所述关联语句执行完成的情况下,释放所述关联语句所在合约进程的分布式锁。
2.根据权利要求1所述的方法,其特征在于,所述确定与所述待处理资源匹配的锁标识,包括:
确定所述待处理资源的资源标识、以及所述合约进程的进程标识;
将所述资源标识作为锁的键,并将所述进程标识作为锁的值,得到与所述待处理资源匹配的锁标识。
3.根据权利要求2所述的方法,其特征在于,所述在所述关联语句执行完成的情况下,释放所述关联语句所在合约进程的分布式锁,包括:
在所述关联语句执行完成的情况下,确定所述关联语句所在合约进程对应的键值对;
释放所述键值对所表征的分布式锁。
4.根据权利要求1所述的方法,其特征在于,所述基于所述锁标识与所述锁类型,为所述合约进程添加分布式锁,包括:
在所述锁类型为读锁的情况下,基于所述锁标识为所述合约进程添加分布式读锁;
在所述锁类型为写锁的情况下,确定所述待处理资源对应的分布式写锁的使用状态;
若所述使用状态为使用中,则在所述待处理资源对应的分布式写锁被释放后,基于所述锁标识为所述合约进程添加分布式写锁;
若所述使用状态为未使用,则基于所述锁标识为所述合约进程添加分布式写锁。
5.根据权利要求1所述的方法,其特征在于,所述对于所述待处理资源相同的关联语句,按照每一所述关联语句各自对应分布式锁的锁类型,并发执行各所述关联语句,包括;
对于所述待处理资源相同的关联语句,基于各所述关联语句各自对应分布式锁的锁类型,从各所述关联语句中确定添加有分布式读锁的读语句、以及添加有分布式写锁的写语句;
并行执行各所述读语句,在各所述读语句执行完成的情况下,执行所述写语句。
6.根据权利要求1所述的方法,其特征在于,所述在所述关联语句执行完成的情况下,释放所述关联语句所在合约进程的分布式锁,包括:
获取解锁等待时长;
在所述关联语句执行完成之后,继续执行所述关联语句所在合约进程中的剩余语句;
在所述解锁等待时长所表征的等待期结束的情况下,确定所述合约进程的活跃语句的语句类型;所述活跃语句,包括所述等待期结束时正在执行的语句、以及所述等待期结束时待执行的语句;
若所述语句类型匹配的锁处理方式为释放锁,则释放所述合约进程的分布式锁。
7.根据权利要求6所述的方法,其特征在于,所述语句类型包括非资源处理语句和资源处理语句,所述方法还包括:
在所述活跃语句为非资源处理语句的情况下,确定与所述语句类型匹配的锁处理方式为释放锁;
在所述活跃语句为资源处理语句的情况下,若所述活跃语句与所述关联语句各自的待处理资源不相同,则确定与所述语句类型匹配的锁处理方式为释放锁;
若所述活跃语句与所述关联语句各自的待处理资源相同,则确定与所述语句类型匹配的锁处理方式为续租锁,以使所述合约进程继续持有所述分布式锁。
8.根据权利要求1所述的方法,其特征在于,所述获取多个待处理的区块链交易,包括:
确定区块链交易池中所包含区块链交易的交易数量;
在所述交易数量满足新区块生成条件的情况下,从所述区块链交易池中获取多个待处理的区块链交易。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
响应于交易请求事件,接收请求处理的区块链交易;
基于所述区块链交易中携带的签名信息和权限信息,对所述区块链交易进行验证,得到验证结果;
在所述验证结果为验证通过的情况下,将所述区块链交易放入所述区块链交易池。
10.根据权利要求8所述的方法,其特征在于,所述方法还包括:
调用区块生成器生成新区块;
在取出的各所述区块链交易均执行完成的情况下,将取出的各所述区块链交易各自的执行结果存储至所述新区块;
在区块链上发起针对所述新区块的区块提案;所述区块提案用于共识节点对所述新区块进行共识,并在共识通过的情况下将所述新区块接入所述区块链。
11.根据权利要求1至10中任意一项所述的方法,其特征在于,所述分布式锁携带过期时间;
所述方法还包括:
在并发执行各所述关联语句的过程中,确定各所述关联语句各自携带分布式锁的剩余有效期;所述剩余有效期为当前时间与所述过期时间的时间差;
在所述剩余有效期满足延期条件的情况下,更新所述分布式锁的过期时间。
12.一种区块链交易处理装置,其特征在于,所述装置包括:
交易调度模块,用于获取多个待处理的区块链交易,确定每一所述区块链交易各自对应的合约进程;所述合约进程包括多个语句;
锁添加模块,用于针对每一所述合约进程,在待执行的当前语句为资源处理语句的情况下,基于所述资源处理语句对应的待处理资源,为所述合约进程添加分布式锁;所述分布式锁的锁类型与所述资源处理语句的资源处理方式匹配;
关联语句执行模块,用于对于所述待处理资源相同的关联语句,按照每一所述关联语句各自对应分布式锁的锁类型,并发执行各所述关联语句;
锁释放模块,用于针对每一所述关联语句,在所述关联语句执行完成的情况下,释放所述关联语句所在合约进程的分布式锁;
所述锁添加模块包括:
处理方式确定单元,用于基于所述资源处理语句的语句信息,确定所述资源处理语句对应的待处理资源、以及所述资源处理语句针对所述待处理资源的资源处理方式;
锁标识确定单元,用于确定与所述待处理资源匹配的锁标识
锁类型确定单元,用于确定与所述资源处理方式匹配的锁类型;
锁添加单元,用于基于所述锁标识与所述锁类型,为所述合约进程添加分布式锁。
13.根据权利要求12所述的装置,其特征在于,所述锁标识确定单元具体用于:
确定所述待处理资源的资源标识、以及所述合约进程的进程标识;
将所述资源标识作为锁的键,并将所述进程标识作为锁的值,得到与所述待处理资源匹配的锁标识。
14.根据权利要求13所述的装置,其特征在于,所述锁释放模块具体用于:
在所述关联语句执行完成的情况下,确定所述关联语句所在合约进程对应的键值对;
释放所述键值对所表征的分布式锁。
15.根据权利要求12所述的装置,其特征在于,所述锁添加单元,具体用于:
在所述锁类型为读锁的情况下,基于所述锁标识为所述合约进程添加分布式读锁;
在所述锁类型为写锁的情况下,确定所述待处理资源对应的分布式写锁的使用状态;
若所述使用状态为使用中,则在所述待处理资源对应的分布式写锁被释放后,基于所述锁标识为所述合约进程添加分布式写锁;
若所述使用状态为未使用,则基于所述锁标识为所述合约进程添加分布式写锁。
16.根据权利要求12所述的装置,其特征在于,所述关联语句执行模块具体用于;
对于所述待处理资源相同的关联语句,基于各所述关联语句各自对应分布式锁的锁类型,从各所述关联语句中确定添加有分布式读锁的读语句、以及添加有分布式写锁的写语句;
并行执行各所述读语句,在各所述读语句执行完成的情况下,执行所述写语句。
17.根据权利要求12所述的装置,其特征在于,所述锁释放模块具体用于:
获取解锁等待时长;
在所述关联语句执行完成之后,继续执行所述关联语句所在合约进程中的剩余语句;
在所述解锁等待时长所表征的等待期结束的情况下,确定所述合约进程的活跃语句的语句类型;所述活跃语句,包括所述等待期结束时正在执行的语句、以及所述等待期结束时待执行的语句;
若所述语句类型匹配的锁处理方式为释放锁,则释放所述合约进程的分布式锁。
18.根据权利要求17所述的装置,其特征在于,所述语句类型包括非资源处理语句和资源处理语句,所述装置还包括锁处理方式确定模块,用于:
在所述活跃语句为非资源处理语句的情况下,确定与所述语句类型匹配的锁处理方式为释放锁;
在所述活跃语句为资源处理语句的情况下,若所述活跃语句与所述关联语句各自的待处理资源不相同,则确定与所述语句类型匹配的锁处理方式为释放锁;
若所述活跃语句与所述关联语句各自的待处理资源相同,则确定与所述语句类型匹配的锁处理方式为续租锁,以使所述合约进程继续持有所述分布式锁。
19.根据权利要求12所述的装置,其特征在于,所述交易调度模块具体用于:
确定区块链交易池中所包含区块链交易的交易数量;
在所述交易数量满足新区块生成条件的情况下,从所述区块链交易池中获取多个待处理的区块链交易。
20.根据权利要求19所述的装置,其特征在于,所述装置还包括交易池模块,用于:
响应于交易请求事件,接收请求处理的区块链交易;
基于所述区块链交易中携带的签名信息和权限信息,对所述区块链交易进行验证,得到验证结果;
在所述验证结果为验证通过的情况下,将所述区块链交易放入所述区块链交易池。
21.根据权利要求19所述的装置,其特征在于,所述装置还包括提案模块,用于:
调用区块生成器生成新区块;
在取出的各所述区块链交易均执行完成的情况下,将取出的各所述区块链交易各自的执行结果存储至所述新区块;
在区块链上发起针对所述新区块的区块提案;所述区块提案用于共识节点对所述新区块进行共识,并在共识通过的情况下将所述新区块接入所述区块链。
22.根据权利要求12至21中任意一项所述的装置,其特征在于,所述分布式锁携带过期时间;所述装置还包括过期时间更新模块,用于:
在并发执行各所述关联语句的过程中,确定各所述关联语句各自携带分布式锁的剩余有效期;所述剩余有效期为当前时间与所述过期时间的时间差;
在所述剩余有效期满足延期条件的情况下,更新所述分布式锁的过期时间。
23.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至11中任一项所述的方法的步骤。
24.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至11中任一项所述的方法的步骤。
CN202311397078.7A 2023-10-26 2023-10-26 区块链交易处理方法、装置、计算机设备和存储介质 Active CN117151712B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311397078.7A CN117151712B (zh) 2023-10-26 2023-10-26 区块链交易处理方法、装置、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311397078.7A CN117151712B (zh) 2023-10-26 2023-10-26 区块链交易处理方法、装置、计算机设备和存储介质

Publications (2)

Publication Number Publication Date
CN117151712A CN117151712A (zh) 2023-12-01
CN117151712B true CN117151712B (zh) 2024-03-26

Family

ID=88902948

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311397078.7A Active CN117151712B (zh) 2023-10-26 2023-10-26 区块链交易处理方法、装置、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN117151712B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020151313A1 (zh) * 2019-01-25 2020-07-30 平安科技(深圳)有限公司 基于区块链的锁处理方法、装置、计算机设备及存储介质
CN111639309A (zh) * 2020-05-26 2020-09-08 腾讯科技(深圳)有限公司 一种数据处理方法、装置、节点设备及存储介质
US11379429B1 (en) * 2021-10-28 2022-07-05 Tassat Group LLC Computer-based systems configured for permission events management on a blockchain and methods of use thereof
CN115114294A (zh) * 2022-06-30 2022-09-27 深圳市腾讯计算机系统有限公司 数据库存储模式的自适应方法、装置、计算机设备
CN115114305A (zh) * 2022-04-08 2022-09-27 腾讯科技(深圳)有限公司 分布式数据库的锁管理方法、装置、设备及存储介质
CN116561137A (zh) * 2022-01-28 2023-08-08 腾讯科技(深圳)有限公司 事务处理方法、装置、计算机设备及存储介质

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020151313A1 (zh) * 2019-01-25 2020-07-30 平安科技(深圳)有限公司 基于区块链的锁处理方法、装置、计算机设备及存储介质
CN111639309A (zh) * 2020-05-26 2020-09-08 腾讯科技(深圳)有限公司 一种数据处理方法、装置、节点设备及存储介质
US11379429B1 (en) * 2021-10-28 2022-07-05 Tassat Group LLC Computer-based systems configured for permission events management on a blockchain and methods of use thereof
CN116561137A (zh) * 2022-01-28 2023-08-08 腾讯科技(深圳)有限公司 事务处理方法、装置、计算机设备及存储介质
CN115114305A (zh) * 2022-04-08 2022-09-27 腾讯科技(深圳)有限公司 分布式数据库的锁管理方法、装置、设备及存储介质
CN115114294A (zh) * 2022-06-30 2022-09-27 深圳市腾讯计算机系统有限公司 数据库存储模式的自适应方法、装置、计算机设备

Also Published As

Publication number Publication date
CN117151712A (zh) 2023-12-01

Similar Documents

Publication Publication Date Title
CN110084592B (zh) 区块链互操作性
TWI737944B (zh) 基於區塊鏈的交易執行方法及裝置、電子設備
JP7236992B2 (ja) ブロックチェーンにより実現される方法及びシステム
CN102170440B (zh) 适用于存储云间数据安全迁移的方法
EP3627373A1 (en) Cryptologic self-executing blockchain export commitment
KR102569552B1 (ko) 블록체인 네트워크에서 계층적 토큰 분산을 위한 시스템 및 방법
JP2020532217A (ja) ブロックチェーンにおけるアンロックトランザクションのアウトプットに対する制約
CN111400112B (zh) 分布式集群的存储系统的写入方法、装置及可读存储介质
CN111461723A (zh) 基于区块链的数据处理系统及方法、装置
JP7254585B2 (ja) システム間連携方法およびノード
CN111127206B (zh) 一种基于智能合约的区块链数据访问控制方法及装置
WO2023045617A1 (zh) 一种交易数据处理方法、装置、设备以及介质
WO2022100892A1 (en) Distributed ledger system
WO2009002752A2 (en) Processing write requests with server having global knowledge
CN111932239B (zh) 业务处理方法、装置、节点设备及存储介质
JP2023544518A (ja) オペレーティングシステムを公開するためのブロックチェーンベースのシステムおよび方法
Dinh et al. A blueprint for interoperable blockchains
CN107967265B (zh) 文件的访问方法、数据服务器和文件访问系统
CN117151712B (zh) 区块链交易处理方法、装置、计算机设备和存储介质
Yu et al. MeHLDT: A multielement hash lock data transfer mechanism for on-chain and off-chain
EP4022872A1 (en) Distributed ledger system
Van Hoye et al. Trustful ad hoc cross‐organizational data exchanges based on the Hyperledger Fabric framework
CN113468586B (zh) 权限管理方法及装置
CN112948260B (zh) 测试数据存储方法、装置、系统、电子设备及介质
CN113987566B (zh) 基于Hyperledger Fabric的内部桥接跨链方法、装置、设备和介质

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