掌桥专利:专业的专利平台
掌桥专利
首页

区块链网络的交易处理方法、节点、设备及存储介质

文献发布时间:2023-06-19 09:35:27


区块链网络的交易处理方法、节点、设备及存储介质

技术领域

本申请涉及区块链网络技术领域,尤其涉及一种区块链网络的交易处理方法、节点、设备及计算机可读存储介质。

背景技术

区块链,是由区块形成的加密的、链式的交易的存储结构,基于节点间的共识算法实现区块的生成及链接。其中,区块链网络的节点根据交易的时间戳,对交易进行先后排序,从而生成新的区块,实现区块链的不断增长。

在相关技术提供的方案中,客户端必须与所有参与背书的背书节点保持网络互通,以完成交易结果的获取。因此,相关技术中的区块链网络具有复杂的网络拓扑,维护难度和维护成本都相对较高。

发明内容

本申请实施例提供一种区块链网络的交易处理方法、装置、设备及计算机可读存储介质,能够实现客户端的进一步轻量化,降低了区块链网络的维护难度和维护成本。

本申请实施例的技术方案是这样实现的:通过区块链网络中的组织节点接收客户端发送的交易;在对交易校验成功的情况下,将交易发送给背书节点;接收背书节点发送的交易结果,并根据交易对应的背书策略对交易结果进行检测;在交易结果满足交易对应的背书策略的情况下,发送上链请求至排序节点,以使排序节点完成交易上链。

在本申请的一些实施例中,所述方法还包括:在交易结果不满足交易对应的背书策略的情况下,生成子事务对应的回滚子事务;处理回滚子事务。

在本申请的一些实施例中,所述方法还包括:根据检测结果生成执行结果事件;将执行结果事件发送至客户端。

在本申请的一些实施例中,所述方法还包括:在对交易校验成功的情况下,发送受理事件至客户端;受理事件用于表征交易已被区块链网络校验成功并等待处理。

在本申请的一些实施例中,所述通过可执行交易队列将可执行交易发送至背书节点,包括:获取背书节点集合中至少一个可选背书节点的历史分配情况;根据至少一个可选背书节点的历史分配情况,在至少一个可选背书节点中确定背书节点;将可执行交易发送至背书节点。

在本申请的一些实施例中,所述根据至少一个可选背书节点的历史分配情况,在至少一个可选背书节点中确定背书节点,包括:根据历史分配情况确定分配顺序、上一次被分配交易的历史背书节点和历史背书节点的分配情况;根据预设的轮换频率、分配顺序和历史背书节点的分配情况确定在至少一个可选背书节点中确定背书节点。

本申请实施例提供一种区块链网络的节点,包括:

第一接收模块,用于通过区块链网络中的组织节点接收客户端发送的交易;

第一发送模块,用于在对交易校验成功的情况下,将交易发送给背书节点;

第二接收模块,用于接收背书节点发送的交易结果,并根据交易对应的背书策略对交易结果进行检测;

第二发送模块,用于在交易结果满足交易对应的背书策略的情况下,发送上链请求至排序节点,以使排序节点完成交易上链。

本申请实施例提供一种区块链网络的交易处理设备,包括:

存储器,用于存储可执行指令;

处理器,用于执行所述存储器中存储的可执行指令时,实现本申请实施例提供的区块链网络的交易处理方法。

本申请实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本申请实施例提供的区块链网络的交易处理方法。

本申请实施例具有以下有益效果:

本申请实施例通过区块链网络中的组织节点接收客户端发送的交易,将相关技术中客户端对交易过程中的共识控制步骤转移至该客户端所在组织的组织节点。如此,可以实现客户端的进一步轻量化,即客户端不再需要了解背书策略,也无需了解区块链网络的构成,因此不存在知识扩散的问题;客户端仅与本组织内的组织节点连通,精简了网络链路,降低了区块链网络的维护难度和维护成本,更容易保证区块链网络的安全性。

附图说明

图1A是本发明实施例提供的区块链网络的应用系统的一个可选的结构示意图;

图1B是本发明实施例提供的区块链网络的应用架构示意图;

图2是本申请实施例提供的区块链网络的节点的结构示意图;

图3是本申请实施例提供的区块链网络的交易处理方法的一个可选的流程示意图;

图4是本申请实施例提供的区块链网络的交易处理方法的一个可选的流程示意图;

图5是本申请实施例提供的区块链网络的交易处理方法的一个可选的流程示意图;

图6是本申请实施例提供的区块链网络的交易处理方法的一个可选的流程示意图;

图7是本申请实施例提供的区块链网络的交易处理方法的一个可选的流程示意图;

图8是本申请实施例提供的区块链网络的交易处理方法的一个可选的流程示意图;

图9是本申请实施例提供的联盟链网络的一个可选的网络结构示意图;

图10是本申请实施例提供的区块链网络的交易处理方法的一个可选的流程示意图。

具体实施方式

为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。

在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。

在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使在本实施例中描述的本申请实施例能够以除了在在本实施例中图示或描述的以外的顺序实施。

除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。

(1)交易提案(Proposal),是执行交易中所包括的智能合约调用(下文简称为执行交易)的请求,包括接收交易的通道的标识、在通道中需要调用的智能合约的标识、以及需要向调用的智能合约传递的参数信息。

(2)交易,也称为交易请求,等同于计算机术语事务(Transaction),交易包括了需要提交到区块链网络执行的操作,以及对应的交易结果。并非单指商业语境中的交易,鉴于在区块链技术中约定俗成地使用了“交易”这一术语,本发明实施例遵循了这一习惯。

例如,交易可以包括部署(Deploy)交易和调用(Invoke)交易,部署交易用于将智能合约到区块链网络的节点中并准备好被调用;调用(Invoke)交易用于对账本中的状态数据库进行查询操作(即读操作)或更新操作(即写操作,包括增加、删除和修改)。

(3)区块链(Blockchain),是由区块(Block)形成的加密的、链式的交易的存储结构。每个区块的头部既可以包括区块中所有交易的哈希值,同时也包含前一个区块中所有交易的哈希值,从而基于哈希值实现区块中交易的防篡改和防伪造;新产生的交易被填充到区块并经过区块链网络中节点的共识后,会被追加到区块链的尾部从而形成链式的增长。

(4)区块链网络(Blockchain Network),通过共识的方式将新区块纳入区块链的一系列的节点的集合。

(5)账本(Ledger),是区块链(也称为账本数据)、以及与区块链同步的状态数据库的统称。其中,区块链是以文件系统中的文件的形式来记录交易;状态数据库是以不同类型的键(Key)值(Value)对的形式来记录区块链中的交易,用于支持对区块链中交易的快速查询。

(6)智能合约(Smart Contracts),也称为链码(Chaincode)或应用代码,部署在区块链网络的节点中的程序,承载了执行交易的业务逻辑,运行在隔离运行环境中(例如容器或虚拟机)。

(7)共识(Consensus),是区块链网络中的一个过程,用于在涉及的多个节点之间对区块中的交易达成一致,达成一致的区块将被追加到区块链的尾部。实现共识的机制包括工作量证明(PoW,Proof of Work)、权益证明(PoS,Proof of Stake)、股份授权证明(DPoS,Delegated Proof-of-Stake)、消逝时间量证明(PoET,Proof of Elapsed Time)等。

(8)成员(Member),也称为业务主体,代表某个具体的实体身份(例如公司、企业和社会团体等),在区块链网络中有自己的根证书,区块链中的节点属于某个成员,同一个成员可以在同一个通道中拥有多个节点。

(9)组织(Organization),部分成员(接入区块链网络中的所有成员的子集)为实现特定业务(不需要所有成员参与)而形成的域。

(10)通道(Channel),区块链网络中向组织中成员的节点提供的私有隔离环境,通道中的智能合约和账本只对加入通道的成员的节点可见,同一个节点可以加入多个通道,并对应每个通道维护一个账本。

(11)联盟链:又称作联盟区块链,是区块链网络中的一种形态;只针对某个特定群体的成员和有限的第三方,其内部指定多个预选节点为记账人,每个块的生成由所有的预选节点共同决定。

(12)Hyperledger Fabric:一个提供分布式账本解决方案的平台;由模块化架构支撑,并具备极佳的保密性、可伸缩性、灵活性和可扩展性;可用于部署具备完整审查机制以及开源架构的企业级区块链。

(13)背书(Endorsed):在区块链网络中,承担背书任务的节点(背书节点)为区块链交易进行交易信息验证,对验证通过的交易声明此交易合法的过程和机制。

(14)背书节点(Endorser):在区块链网络中承担背书任务的节点可以称为背书节点。其中,背书节点可以通过有效证书的预期信息的有效签名来证明其合法性。

(15)背书策略(Endorsement policy):是对交易进行背书必须满足的条件,即要得到背书成功的结论,必须满足背书策略中给出的条件。

例如,背书策略可以被设置为:节点A、B、C和F都需要对类型为T的交易进行背书;或,通道中的大部分节点必须对类型为U的交易进行背书;或,A、B、C、D、E、F、G中的至少3个节点必须对类型为V的交易进行背书。

(16)排序节点(Orderer):将接收的交易(Tx)进行排序,排序的原则为FIFS(FirstIn First Served),但是区块内交易的顺序不一定与实际顺序一样,而是由到达排序节点的时间来决定的。排序后的交易根据一定的规则打包成区块,排序节点将区块发送给其他节点(记账节点)或客户端;保证所有排序节点分发出来的区块是一致的。

下面说明本发明实施例提供的区块链网络的示例性应用,参见图1A,图1A是本发明实施例提供的区块链网络200的示例性的应用系统100的架构示意图,包括区块链网络200、客户端510/410、认证中心(CA,Certificate Authority)300。

区块链网络200的类型是灵活多样的,例如可以为公有链、私有链或联盟链中的任意一种。以公有链为例,任何业务主体的终端或服务器中运行的客户端,都可以在无需授权的情况下接入区块链网络200而成为一类特殊的节点,成为客户端节点;以联盟链为例,业务主体在被授权成为区块链网络200的成员后,对应的客户端可以接入区块链网络200而成为客户端节点。

需要指出,归属于同一业务主体客户端节点的数量不存在限制,图1A中示出了业务主体400使用的一个客户端410,且可以接入区块链网络200而成为客户端节点,同理,业务主体500使用的一个客户端510可以接入区块链网络200而成为客户端节点。

客户端节点针对区块链网络200的操作主要包括账本查询与账本更新两种类型。对于账本查询来说,客户端节点向区块链网络200发起交易提案,交易提案中包括与查询操作相关的智能合约调用,由区块链网络200的节点执行交易提案中包括的智能合约调用以查询账本,并将查询到的数据作为交易结果携带在提案响应中以返回客户端。

对于账本更新来说,客户端节点向区块链网络200发起交易提案中包括与更新操作相关的智能合约调用,由区块链网络200的节点对账本模拟执行(即账本不会被改变)交易提案中包括的智能合约调用,将账本中被更新的键值对作为交易结果携带在提案响应中以返回客户端,客户端进而将交易提案、提案响应构造为交易,并提交到区块链网络200。在本申请中,将客户端发送的交易提案简称为交易。

客户端节点是一类区别于区块链网络200中的原生的节点的特殊节点,默认可以缺省区块链网络200中的原生的节点具有的记账功能,从而降低客户端的开发难度并实现客户端的轻量化。客户端与区块链网络200之间支持事件的传递,例如客户端通过可以监听/订阅区块链网络200运行中与智能合约调用相关的事件,例如生成新区块的事件,从而当区块链网络200中产生特定事件时,触发自身或外部系统的相关的业务逻辑。

区块链网络200外部的认证中心300用于响应客户端410/510(下面简称为客户端)的注册申请,返回注册密码用于登录,以便获取用于声明客户端所属成员的身份信息的数字证书。作为认证中心(CA,Certificate Authority)300的替换方案,区块链网络200中可以设置有CA节点以实现上述功能。

在一些实施例中,区块链网络200中的记账节点根据其在记账功能之外实现的功能可以划分为不同的类型,作为图1A中示出的区块链网络200的划分为不同类型的示例,参见图1B,图1B是本发明实施例提供的区块链网络200的应用架构100的示意图,除了客户端节点(客户端410和客户端510),区块链网络200中的节点默认都具有验证交易并记账的功能,其中仅具有验证交易并记账功能的节点称为记账节点(Committer),还包括一些特殊类型的记账节点:背书节点(Endorser)、排序节点(Orderer)和主节点(Leader Peer)。

作为区块链网络200中设置有通道的示例,区块链网络200中的上述节点可以加入不同组织的通道,如图1B示出了开展不同业务的组织1和组织2,区块链网络200中归属于组织1/2的成员的节点可以对应加入组织1/2的通道,每个通道内的节点接收与所属组织的业务相关的交易,并将交易记录到账本中,账本对于通道外的节点是隔离的。其中,客户端410属于组织1,可以提交交易提案至该组织1的组织节点;客户端510属于组织2,可以提交交易提案至尬组织2的组织节点。

在一些实施例中,客户端中内置软件开发套件(SDK,Software Development Kit)来实现对区块链网络200的管控,从而客户端的原生代码可以只关注实现业务相关的逻辑,忽略区块链网络200的内部运行细节,降低客户端的开发难度。

作为示例,SDK向客户端提供了与区块链网络200的节点之间的基于远程过程调用(RPC,Remote Procedure Call)连接的一系列应用编程接口(API,ApplicationProgramming Interface),用于供客户端管理和使用区块链网络200的功能,这些功能包括:身份管理、账本管理、交易管理、智能合约、交易管理、成员管理、共识服务、智能合约服务、安全和密码服务和事件处理等,将在下文具体说明上述功能。

在一些实施例中,从区块链网络200对接客户端的顶层的角度,区块链网络200的功能包括身份管理、账本管理、交易管理和智能合约的功能,下面分别进行说明。

(1)身份管理:客户端的用户注册和登录认证中心后,客户端获取到成员的数字证书(ECert),其他所有的操作都需要与数字证书关联的私钥进行签名,消息接收方与成员持有来自认证中心的相同的根证书,消息接收方首先会进行签名和数字证书的验证,才进行后续的消息处理。节点同样会用到认证中心颁发的数字证书,比如接入区块链网络的成员启动下辖的节点的系统和对下辖的节点进行管理时,身份管理功能都会对成员的身份信息进行认证和授权。

(2)账本管理:授权接入区块链网络200的成员查询账本,可以通过多种方式查询,包括根据区块号查询区块、根据区块哈希查询区块、根据交易号查询区块和根据交易号查询交易,还可以根据通道名称获取查询到的区块链。

(3)交易管理:账本只能通过提交交易的方式更新,客户端通过区块链网络200的交易管理功能提交交易提案,并获取到交易的背书后,再向排序节点提交交易,然后由排序节点打包生成区块。

(4)智能合约:实现“可编程的账本”(Programmable Ledger),通过智能合约调用执行交易,实现基于区块链的智能合约业务逻辑。只有智能合约才能更新账本。

在一些实施例中,从区块链网络200对接底层的角度,区块链网络200的功能包括成员管理、共识服务、链码服务、安全和密码服务等,下面分别进行说明。(1)成员管理:通过根信任证书(Root of Trust Certificate)体系,利用公钥基础设施(PKI,Public KeyInfrastructure)对成员的身份信息进行认证,验证成员的数字签名。结合区块链网络内部的认证中心或者第三方认证中心,提供成员的注册功能,并对成员的数字证书进行管理,例如证书新增和撤销。示例性地,数字的证书分为注册证书(ECert)、交易证书(TCert)和TLS证书(TLS Cert),它们分别用于用户身份、交易签名和安全传输层协议(TLS,TransportLayer Security Protocol)传输。(2)共识服务:共识机制由3个阶段完成:客户端向背书节点提交提案以获得背书,客户端获得背书后提交交易给排序节点进行排序生成区块,之后广播给记账节点验证区块中交易后写入记账节点的本地账本。(3)链码服务:智能合约的实现依赖于安全的执行环境,确保安全的执行过程和用户数据的隔离。这里可采用Docker管理普通的链码,提供安全的沙箱环境和镜像文件仓库。(4)安全和密码服务:实现密钥生成、哈希运算、签名验签、加密解密等基础功能。

在一些实施例中,区块链网络200的上层对接客户端,客户端410/510中提供了标准的RPC接口,并在API的基础之上封装了SDK,从而使得开发人员可以在SDK中开发基于区块链的各种业务逻辑;客户端的事件机制能够使得客户端接收区块链网络200的各种事件,例如当接收到创建新区块的事件、执行智能合约的事件。

下面说明实现本发明实施例的区块链网络的节点的示例性结构,可以理解地,区块链网络200中的任一类型的节点的硬件结构可以根据下文说明的硬件结构而实施。

参见图2,图2是本发明实施例提供区块链网络200中的节点210的结构示意图,图2所示的节点210包括:至少一个处理器2110、存储器2140和至少一个网络接口2120。节点210中的各个组件通过总线系统2130耦合在一起。可理解,总线系统2130用于实现这些组件之间的连接通信。总线系统2130除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线系统2130。

处理器2110可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。

存储器2140可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器2140可选地包括在物理位置上远离处理器2110的一个或多个存储设备。

存储器2140包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本发明实施例描述的存储器2140旨在包括任意适合类型的存储器。

在一些实施例中,存储器2140能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。

操作系统2141,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;

网络通信模块2142,用于经由一个或多个(有线或无线)网络接口2120到达其他计算设备,示例性的网络接口2120包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(USB,Universal Serial Bus)等;

在一些实施例中,本发明实施例提供的区块链网络的节点可以采用软件方式实现,图2示出了存储在存储器2140中的软件模块2143,其可以是程序和插件等形式的软件,包括以下子模块中的至少一个:第一接收模块21431,第一发送模块21432,第二接收模块21433,第二发送模块21434。这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。

将在下文中说明各个模块的功能。

将结合本申请实施例提供的节点的示例性应用和实施,在本申请实施例中,将以节点为执行主体说明本申请实施例提供的区块链网络的交易处理方法。

参见图3,图3是本申请实施例提供的区块链网络的交易处理方法的一个可选的流程示意图,将结合图3示出的步骤进行说明。

在步骤301中,组织节点接收客户端发送的交易。

在本申请的一些实施例中,相比于相关技术中通过客户端控制交易处理过程中的共识过程,本申请利用该客户端坐在组织中的组织节点控制该交易处理过程中的共识过程。其中,该组织节点为该客户端所在组织中的任意一个peer节点。

以图1B的示意图为例,对于客户端410,由于该客户端410属于组织1,因此,会通过组织1中的组织节点接收该客户端410发送的交易;相应地,对于客户端510,由于该客户端510属于组织2,因此,会通过组织2中的组织节点接收该客户端510发送的交易。

在本申请的一些实施例中,该组织节点还可以同时作为区块链网络中的其他功能节点,包括背书节点、记账节点等。

在步骤302中,在对交易校验成功的情况下,组织节点将交易发送给背书节点。

在本申请的一些实施例中,组织节点在接收到该交易后,会对该交易进行校验。其中,可以通过这样的方式实现上述的对所述交易进行验证:所述组织节点对所述交易的格式进行验证,得到第一验证结果;在所述区块链网络中对所述交易进行重复性验证,得到第二验证结果;对所述交易包括的所述客户端的数字签名进行验证,得到第三验证结果;获取所述区块链网络中的权限信息,并根据所述权限信息对所述客户端进行权限验证,得到第四验证结果;当所述第一验证结果、所述第二验证结果、所述第三验证结果及所述第四验证结果均为成功时,确定对所述交易验证成功。通过上述的四个方面的验证,提升了对交易进行验证的严密性。

在本申请的一些实施例中,在组织节点对该交易校验成功的情况下,会将该交易发送至背书节点,以使该背书节点模拟执行该交易,并得到该交易对应的交易结果。组织节点还可以发送受理事件至客户端,受理事件用于表征交易已被区块链网络校验成功并等待处理。

在本申请的一些实施例中,在组织节点对该交易验证失败的情况下,组织节点向客户端返回携带失败码(指示验证交易失败的错误类型)的验证失败事件。

在本申请的一些实施例中,在背书节点接收到该交易之后,也需要对该交易进行验证,具体的验证方法与组织节点对该交易的验证方法相同。需要说明的是,在组织节点对该交易进行验证之后,背书节点可以不需要对该交易进行验证;或者,组织节点不对该交易进行验证,由背书节点对该交易进行验证;或者,在组织节点对该交易进行验证之后,背书节点仍需要对该交易进行再次验证。

在本申请的一些实施例中,在背书节点对该交易进行验证之后,在验证成功的情况下,该背书节点模拟执行该交易,得到该交易对应的交易结果。其中,背书节点可以根据该交易对应的背书策略调用该交易对应的智能合约,将账本中被更新的键值对作为交易结果;在验证失败的情况下,背书节点向客户端返回携带失败码(指示验证交易失败的错误类型)的验证失败事件;其中,背书节点也可以将该验证失败事件发送至组织节点,通过该组织节点将该验证失败事件发送至客户端。

在本申请的一些实施例中,背书节点可以对得到的交易结果进行签名,得到背书节点签名,背书节点将该交易结果和背书节点签名发送至该组织节点。

在步骤303中,组织节点接收背书节点发送的交易结果,并根据交易对应的背书策略对交易结果进行检测。

在本申请的一些实施例中,组织节点在接收到该背书节点发送的交易结果后,可以根据该交易对应的背书策略对该交易结果进行检测。其中,在该背书节点还发送上述背书节点签名的情况下,组织节点会对该背书节点签名进行验证,在验证成功的情况下,会进一步验证,如验证是否收集到设定数量的背书节点签名,交易结果是否一致。

在步骤304中,在交易结果满足交易对应的背书策略的情况下,组织节点发送上链请求至排序节点。

在本申请的一些实施例中,在交易结果满足交易对应的背书策略的情况下,如已收集到设定数量的背书节点签名,且交易结果全部一致时,组织节点将该交易、交易结果及背书节点签名构造为上链请求,并将所构造的上链请求发送至排序节点。除此之外,上链请求还可包括其他的相关信息,如还可包括通道标识及智能合约的标识等,本发明实施例对此不做限定。

通过本申请实施例对于图3的上述示例性实施可知,本申请实施例通过区块链网络中的组织节点接收客户端发送的交易,将相关技术中客户端对交易过程中的共识控制步骤转移至该客户端所在组织的组织节点。如此,可以实现客户端的进一步轻量化,即客户端不再需要了解背书策略,也无需了解区块链网络的构成,因此不存在知识扩散的问题;客户端仅与本组织内的组织节点连通,精简了网络链路,降低了区块链网络的维护难度和维护成本,更容易保证区块链网络的安全性。

参见图4,图4是本申请实施例提供的区块链网络的交易处理方法的一个可选的流程示意图,基于图3,图3中的步骤302可以更新为步骤401至步骤403,将结合图4示出的步骤进行说明。

在步骤401中,在对交易校验成功的情况下,组织节点将交易确定为可执行交易并缓存至可执行交易队列中。

在本申请的一些实施例中,可以通过以下方法实现上述步骤401:在步骤4011中,获取交易的交易类型;在至少一个可选交易队列中,将与交易类型对应的可选交易队列确定为可执行交易队列;将交易确定为可执行交易并缓存至可执行交易队列。

其中,为了实现不同业务处理的执行分离,对存在的每一交易类型设置对应的可选交易队列,并且,预先为每一可选交易队列设置对应的背书节点集合,在对该交易校验成功的情况下,根据该交易的交易类型直接将该交易缓存至与该交易类型对应的可执行交易队列中。

在步骤402中,获取可执行交易队列对应的背书节点集合;背书节点集合包括背书节点。

在本申请的一些实施例中,由于该可执行交易队列预先设置了对应的背书节点集合,因此可以直接在该背书节点集合内获取所述背书节点,省去了再次利用背书策略确定背书节点的步骤。其中,该背书节点集合包括至少一个背书节点。

在步骤403中,通过可执行交易队列将可执行交易发送至背书节点。

在本申请的一些实施例中,在确定该交易对应的背书节点之后,将该交易发送至该背书节点,并按照该可执行交易队列中各可执行交易的入队时间,处理下一个可执行交易。其中,对于下一个可执行交易,需要按照上述方法,直接在该可执行交易队列对应的背书节点集合中确定该下一个可执行交易对应的背书节点。

在本申请的一些实施例中,本申请中提供的区块链网络的交易处理方法,通过调用该可执行交易对应的过滤器(Filter),可以在选择背书节点步骤的前后和发送该可执行交易至背书节点步骤的前后,实现该交易自定义的业务逻辑,进而控制交易过程中的共识过程。

通过本申请实施例对于图4的上述示例性实施可知,本申请实施例通过为每一交易类型设置不同的可执行交易队列,并为每一可执行交易队列设置对应的背书节点集合,可以在为交易分配背书节点的过程中,省去相关技术中利用背书策略确定背书节点的步骤,提高了背书节点的选择效率。并且,由于为不同交易类型的交易设置不同的可执行交易队列,实现了不同业务对应交易的执行分离,可以为每一交易类型的交易定制背书节点集合,提高了整体交易处理效率。

参见图5,图5是本申请实施例提供的区块链网络的交易处理方法的一个可选的流程示意图,基于图4,图4中的步骤401可以更新为步骤501至步骤503,将结合图5示出的步骤进行说明。

在步骤501中,在对交易校验成功的情况下,生成交易对应的子事务。

在本申请的一些实施例中,对于一些复杂的交易,例如,需要生成子事务的交易,本申请在对该交易校验成功的情况下,根据该交易对应的过滤器(filter)生成该交易对应的子事务。

以收取手续费的场景为例,假设客户端发送的交易为用户A向用户B转账F0。对于该交易,组织节点会生成子事务Tx0,该子事务Tx0表示中间商用户C收取用户A的费用F1,即用户A实际出账金额是F0+F1。

在步骤502中,处理子事务并获取子事务的事务上链结果。

在本申请的一些实施例中,组织节点在处理该交易之前,需要先处理该交易对应的子事务,该子事务的处理方法可以与图3提供实施例对交易的处理方法相同,并接收该子事务对应的事务上链结果。

在步骤503中,在事务上链结果表征子事务上链成功的情况下,将交易确定为可执行交易并缓存至可执行交易队列中。

在本申请的一些实施例中,在接收到该子事务对应的事务上链结果之后,若事务上链结果表征子事务上链成功,则表示该子事务已经处理完毕,继续执行该交易,即将交易确定为可执行交易并缓存至可执行交易队列中。

通过本申请实施例对于图5的上述示例性实施可知,本申请实施例通过生成交易对应的子事务,在对该子事务处理完毕之后,将该交易缓存至可执行交易队列中。如此,可以实现了复杂场景下交易的处理过程,提升了本申请的应用范围。

参见图6,图6是本申请实施例提供的区块链网络的交易处理方法的一个可选的流程示意图,基于图5,图5中的步骤502可以通过步骤601至步骤602实现,将结合图6示出的步骤进行说明。

在步骤601中,将子事务缓存至子事务缓存队列。

在本申请的一些实施例中,为了实现子事务的有序处理,本申请提供了子事务缓存队列。在组织节点生成该交易对应的子事务后,将该子事务有序的存储至该子事务缓存队列中。

在本申请的一些实施例中,对于不同交易类型的交易,为每一交易类型设置不同的子事务缓存队列。在根据交易生成对应的子事务之后,可以根据该交易的交易类型,将该子事务缓存孩子该交易类型对应的子事务缓存队列中。

在步骤602中,通过子事务缓存队列处理子事务,以得到子事务的事务上链结果。

在本申请的一些实施例中,可以通过以下方法实现上述步骤602:

在步骤6021中,根据预设的分组规则,将子事务缓存队列中的至少一个子事务划分为事务组。

在一些实施例中,上述根据预设的分组规则,将子事务缓存队列中的至少一个子事务划分为事务组,可以包括:检测所述子事务缓存队列中的子事务数量;在所述子事务数量达到所述预设数量阈值的情况下,将所述子事务缓存队列中所述预设数量阈值个所述子事务划分为所述事务组。

其中,在组织节点接收客户端发送交易的过程中,组织节点会不断地将交易对应的子事务缓存至该子事务缓存队列中,也就是说,该子事务缓存队列中的子事务数量是不断增加的,在该子事务数量达到所述预设数量阈值的情况下,将此时该子事务缓存队列中的所有子事务(或者所述预设数量阈值个所述子事务)作为一个事务组。

在一些实施例中,上述根据预设的分组规则,将子事务缓存队列中的至少一个子事务划分为事务组,还可以包括:获取所述子事务缓存队列的交易耗时;所述交易耗时为最早缓存至所述子事务缓存队列中的子事务的等待时间;在所述交易耗时达到所述预设时间阈值的情况下,将所述子事务缓存队列中的所有所述子事务划分为所述事务组。

其中,在组织节点接收客户端发送交易的过程中,组织节点会不断地将交易对应的子事务缓存至该子事务缓存队列中,该子事务缓存队列中每一子事务均对应一个等待时间,该等待时间为子事务被缓存至该子事务交易队列的时间至当前系统时间之间的时间间隔。通常,该子事务缓存队列中最先被缓存进来的子事务的等待时间最长,将该最长的等待时间确定为所述交易耗时。在交易耗时达到所述预设时间阈值的情况下,将此时该子事务缓存队列中的所有子事务划分为所述事务组。

需要说明的是,还可以同时根据上述预设数量阈值和预设时间阈值确定所述事务组。其中,可以同时判断该子事务缓存队列中的子事务数量是否达到该预设数量阈值,和判断该子事务缓存队列的交易耗时是否达到该预设时间阈值,在满足任意一个条件的情况下,将此时该子事务缓存队列中的所有子事务划分为所述事务组。

在步骤6022中,根据事务组对应的智能合约执行事务组中的至少一个子事务,得到事务组的事务组执行结果。

在一些实施例中,上述根据事务组对应的智能合约执行事务组中的至少一个子事务,得到事务组的事务组执行结果,可以包括:获取所述事务组对应的第一智能合约;根据所述第一智能合约执行每一所述子事务,并得到每一所述子事务的执行结果;根据每一所述子事务的执行结果生成所述事务组处理结果。

其中,该第一智能合约没有配置对应的背书策略,因此,直接将每一所述子事务的执行结果确定为所述事务组处理结果。

在一些实施例中,上述根据事务组对应的智能合约执行事务组中的至少一个子事务,得到事务组的事务组执行结果,还可以包括:获取所述事务组对应的第二智能合约;所述第二智能合约配置了背书策略;根据所述第二智能合约将每一所述子事务发送至所述事务组对应的至少一个背书节点;接收所述事务组对应的至少一个背书节点发送的每一所述子事务的模拟执行结果;根据所述第二智能合约的背书策略对每一所述子事务的模拟执行结果进行验证并生成事务组处理结果。

在步骤6023中,根据事务组执行结果,生成事务组对应的事务组上链请求。

在本申请的一些实施例中,本申请中提供的区块链网络的交易处理方法,通过调用该可执行交易对应的过滤器(Filter),可以在收到上述事务组执行结果/交易结果的步骤之后和发送上链请求之前,实现该交易自定义的业务逻辑,进而控制交易过程中的共识过程。

在步骤6024中,将事务组上链请求发送至排序节点。

在步骤6025中,接收排序节点发送的事务组上链结果,根据事务组上链结果确定子事务的事务上链结果。

在本申请的一些实施例中,该区块链网络包括至少一个所述组织节点;每一所述组织节点与一个子热点账户对应,所述事务组中的每一所述子事务均用于与热点账户之间进行交易;所述热点账户包括至少一个所述子热点账户。

其中,对于一个中间商用户C,由于该中间商用户C可以同时提供不同类型的业务,也就是说,不同类型的交易类型的交易均可以表示为任意一个用户与该中间商用户C的交易。为了提高并发处理效率,可以将该中间商用户C的账户确定为热点账户,该热点账户可以分为至少一个子热点账户,对于该区块链网络中的任意一个组织节点,可以为该组织节点分配对应的子热点账户。组织节点通过执行与该子热点账户之间的交易实现与该热点账户之间的交易,提升了并发交易场景下的处理效率。

参见图7,图7是本申请实施例提供的区块链网络的交易处理方法的一个可选的流程示意图,基于图5,图5中的步骤303可以更新为步骤701至步骤703,将结合图7示出的步骤进行说明。

在步骤701中,组织节点根据交易对应的背书策略,判断是否存在未返回的交易结果。

在步骤702中,在存在未返回的交易结果的情况下,继续等待。

在步骤703中,在不存在未返回的交易结果的情况下,判断交易结果是否满足交易对应的背书策略,并生成检测结果。

在本申请的一些实施例中,根据返回的交易结果确定是否满足该交易对应的背书策略,以生成该检测结果。其中,所述检测结果包括所述交易结果满足所述交易对应的背书策略、所述交易结果不满足所述交易对应的背书策略。

在本申请的一些实施例中,组织节点还可以根据检测结果生成执行结果事件;将执行结果事件发送至客户端。

在本申请的一些实施例中,还可以包括步骤704:在步骤704中,在交易结果不满足交易对应的背书策略的情况下,生成子事务对应的回滚子事务;处理回滚子事务。

其中,在生成该子事务的回滚子事务之后,可以将该回滚子事务缓存至用于实现回滚操作的子事务缓存队列,并通过该用于实现回滚操作的子事务缓存队列执行该子事务。

通过本申请实施例对于图7的上述示例性实施可知,本申请实施例在交易对应的交易结果不满足背书策略的情况下,生成该交易的子事务对应的回滚子事务,实现了对以上链的子事务的回滚处理,提升了系统的灵活性。

参见图8,图8是本申请实施例提供的区块链网络的交易处理方法的一个可选的流程示意图,基于图4,图4中的步骤403可以通过步骤801至步骤803实现,将结合图8示出的步骤进行说明。

在步骤801中,获取背书节点集合中至少一个可选背书节点的历史分配情况。

在步骤802中,根据至少一个可选背书节点的历史分配情况,在至少一个可选背书节点中确定背书节点。

在本申请的一些实施例中,可以通过以下方法实现上述步骤802:在步骤8021中,根据历史分配情况确定分配顺序、上一次被分配交易的历史背书节点和历史背书节点的分配情况。在步骤8022中,根据预设的轮换频率、分配顺序和历史背书节点的分配情况确定在至少一个可选背书节点中确定背书节点。

其中,该分配顺序为至少一个可选背书节点的选择顺序;轮换频率为一个可选背书可以连续被分配交易的交易数量;历史背书节点为上一个交易对应的可选背书节点;历史背书节点的分配情况为历史背书节点已经被连续分配交易的已分配交易数量。在该已分配交易数量未达到该轮换频率的情况下,将该历史背书节点确定为该交易对应的背书节点;在该已分配交易数量以达到该轮换频率的情况下,按照该分配顺序选择该历史背书节点的下一个可选背书节点作为该交易对应的背书节点。

在本申请的一些实施例中,该轮换频率可以根据背书节点的计算能力进行自适应配置。

在步骤803中,将可执行交易发送至背书节点。

通过本申请实施例对于图8的上述示例性实施可知,本申请实施例通过确定背书节点集合的轮换频率,在为交易确定背书节点的过程中,保证了背书节点的选择效率和选择合理性。可以使得各背书节点的负载均衡,进而提升了交易过程中整体背书效率。

下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。

相关技术中,请参阅图9,图9是本申请实施例提供的联盟链网络的一个可选的网络结构示意图。

图中联盟链的不同机构可视作不同的组织,每个组织可以部署多个Peer节点,Peer节点又可以根据角色分为主节点、背书节点、记账节点,一个物理的Peer节点可以同时承担这三种角色。相比与其他联盟链方案,Fabric区块链网络设计了Orderer节点,对满足背书策略的交易定序、切块,生成区块链的区块数据结构,并广播给加盟机构。

相关技术中,对于交易的共识过程包括:

1、客户端(Client)发起交易,首先将交易信息(Propose Message)发给定义好的若干背书节点(Endorsers),注意此处的背书节点是由交易本身的智能合约(Chaincode)和其中的背书策略(Endorsement Policy)共同决定;背书节点收到交易信息后,执行交易得到输出结果。

2、该客户端收集每个背书节点返回的信息,当满足背书策略后,则进入排序(Ordering)阶段,反之该交易失败。

3、客户端将通过背书策略的交易广播至所有排序节点(Orderers),排序节点通过共识机制对所有通过背书策略的交易进行排序,保证所有节点的数据满足时序一致性。

4、排序节点再将排序后的交易区块(Block)广播至其他Peers(包括了背书节点和非背书节点)。

5、所有Peers验证交易区块之后,更新自身的账本,即完成上链。

根据图9实施例中的共识过程,可以看出,联盟链网络的共识过程相比于传统区块链网络的共识过程,更加灵活,且具备更高的伸缩性,另外,由于客户端控制控共识过程:客户端广播“交易”给背书节点,收集结果,检查背书策略,广播背书结果给排序(Orderer)节点。可以达到以下技术效果:

1、客户端可根据交易类型或者特定规则,自行决定将交易发给特定组织的特定节点(Peer);

2、客户端在共识过程中,可以获得更多的信息和控制权,能够更好地控制交易的事务性;这使得联盟链更容易与业务系统进行整合。

由于上述技术效果,可以使得联盟链平台之上的业务系统可以支持多种多样的应用场景,但是,申请人经过研究发现,由于客户端参与了过多的共识过程,会造成以下缺陷:

1、存在知识扩散。其中,Client需理解业务与其对应的背书策略,还需要能合理选择参与背书的Peer节点;Client需控制共识过程,并通过代码实现过程控制;

2、具有更复杂的网络拓扑。其中,Client必须与所有“可能”参与背书的Peer节点,保持网络互通;Client必须能与所有Orderer节点保持网络互通;即使引入了反向代理组件,Client也需了解上述节点网络协议的域名、端口等;

3、共识过程的割裂。其中,由Client控制上述过程中的背书结果检查、交易上链两个重要的步骤,虽然带来了控制的解耦,但也引入了额外的成本,比如:A、浪费算力的可能:即使满足背书策略,但Client并不将交易提交上链,造成交易“空转”,为DDOS攻击提供了更为便利的可能;B、恶意数据造假的可能:如果背书策略设计不合理,可能被恶意的Client利用,将虚假或者错误的交易数据直接提交到Orderer节点上链。

可以看出,由于客户端参与了过多的共识过程,导致系统复杂性增加,不仅影响了系统架构的设计、优化、安全,同时也影响系统的运维;除此之外,共识过程的割裂也影响了系统性能,不仅影响到系统的TPS(Transaction per Second,事物数/秒)指标,尤其突出的是影响到系统的并发能力;也就是常说的“热点”数据问题,即并发交易涉及修改相同“用户”或者“账户”数据。上述共识设计,在区块级别上不具备并发,也就是,在同一个区块中多笔交易不能修改相同“用户”或者“账户”数据;而这种并发能力,对于联盟链应用有时是必须的。例如,以下几个业务场景需要并发能力:中间机构逐笔收取用户账户间转账的手续费时,手续费入账账户是需支持一定的并发;批量交易中,涉及单一批次中,多笔的转出或者转入的用户账户记账。

申请人经过研究,根据联盟链的场景特点,在保留了应用灵活性的基础上,简化Client的能力,提升“热点”数据的并发处理能力。

在本申请的一些实施例中,提供了一种区块链网络的交易处理方法,请参阅图10,将结合图10示出的步骤进行说明。

S1001、客户端向组织节点发送交易提案。

在本申请的一些实施例中,客户端不再控制共识过程,而是一个更轻量化的客户端,仅向该客户端所在组织的组织节点发送交易提案。该交易提案为上述实施例中的交易。

S1002、组织节点对该交易请求进行校验,并选择背书节点。

在本申请的一些实施例中,组织节点接管了相关技术中客户端对共识过程的控制,通过该交易提案对应的背书策略,选择背书节点。其中,该组织节点也可以作为背书节点,每一个被选中的背书节点的执行逻辑一致。

在本申请的一些实施例中,可以通过以下方案实现背书节点的选择:根据系统配置选择背书节点;根据背书策略自动选择。

S1003、组织节点向客户端发送受理事件。

在本申请的一些实施例中,客户端在收到该组织节点发送的受理事件后,默认向该组织节点注册事件监听。

S1004、组织节点将该交易提案广播至背书节点。

在本申请的一些实施例中,组织节点向客户端发送受理事件和广播交易给背书节点中,两个步骤是分离的。

S1005、背书节点对该交易提案进行校验后,执行该交易提案对应的智能合约,对生成的执行结果进行签名,将执行结果和签名发送给组织节点。

S1006、组织节点接收执行结果,并检查是否满足背书策略。

在本申请的一些实施例中,如果不满足背书策略,且还有未返回的执行结果,则继续等待。

在本申请的一些实施例中,如果执行结果都收集到了,但不满足背书策略,则向客户端发送背书策略不满足的事件。

S1007、组织节点向排序节点广播上链请求。

在本申请的一些实施例中,该上链请求包含背书节点产生的执行结果。

S1008、组织节点向客户端发送执行结果事件;

在本申请的一些实施例中,广播之后,向客户端发送包含交易执行结果的事件;

S1009、排序节点对接收到的上链请求进行排序,切块,生成区块链的区块记录,达成共识后,向记账节点广播区块数据;

S1010、记账节点校验区块数据,并记录在账本中,同时逐条有序修改本地的账本数据状态。

在本申请的一些实施例中,如果记账节点是客户端注册事件监听的节点,则向客户端发送区块上链的事件。

通过本申请实施例提供的方法,可以看出,客户端不再参与共识过程,因此,可以解决相关技术中的缺陷,存在以下优点:客户端不再需要了解背书策略,也无需了解区块链网络的构成,因此不存在知识扩散的问题;客户端仅与本组织“约定”的Peer节点连通,精简了网络链路,简化了物理网络的实施和运维。采用组织节点控制控制过程,保留了客户端的事件监听机制,使得客户端还可以获取交易提案的执行情况。强化了组织节点的功能,可以实现区块链网络对外封装共识过程的技术效果,并且为组织提供了业务分流和数据分片等设计的技术基础。

本申请实施例提供的方法,相比于相关技术中的共识过程,由于组织节点完全遵循背书策略的设定,凡是满足该背书策略的交易都进行上链。相比于相关技术中,由客户端自行判读交易是否上链的方案,避免了一些非区块链系统因素对交易数据上链的影响,进而可以缓解了非法客户端对区块链网络发起攻击带来的影响。只需要加强节点的安全建设即可保证区块链网络的安全性,降低了区块链网络的维护难度和维护成本,更容易保证区块链网络的安全性。

在一些实施例中,除了背书策略影响共识过程之外,本方案还设计了全过程的过滤器(Filter),包括选择背书节点之前、选择背书节点之后、向背书节点广播交易之前、向背书节点广播交易之后、收到背书结果之后和发起上链请求之前,通过调用配置的Filter,可实现自定义的业务逻辑,进而控制共识过程是否继续;其中,整个共识过程的Filter按先后顺序配置。

在一些实施例中,本申请提供的方法可以支持交易的子事务,以逐笔收取手续费的业务场景为例,假设客户端发送的交易提案为用户A向用户B转账F0,中间商用户C收取用户A的费用F1,即用户A实际出账金额是F0+F1。本申请对于该交易提案的处理过程包括:

客户端发起携带请求参数的交易提案T至组织节点,该请求参数用于表征用户A向用户B转账F0;

组织节点通过过滤器(Filter)派生出该交易提案T的子事务Tx0;该子事务Tx0用于表征中间商用户C收取用于A的F1;其中,子事务是一个要通过共识的完整交易;但子事务Tx0的背书策略不需要与交易T一致;

Tx0达成共识后,组织节点发起交易提案T的共识;如果交易提案T的背书策略不通过,组织节点通过Filter执行子事务Tx0的“回滚”,即执行子事务Tx1,该子事务Tx1用于表征中间商用户C向用户A退还F1。其中,子事务Tx1的背书策略等同于子事务Tx0的背书策略。

在一些实施例中,本申请还提供了分交易类型的可执行交易队列;不同交易类型的交易缓存在不同的队列中,由队列监听器有序读取队列中的交易,然后广播到背书节点。其中,属于同一可执行交易队列的交易提案因为交易类型相同,所以每个队列都可以预先设置对应的背书节点集合,而不再是逐个交易根据背书配置或者背书策略选择。

在一些实施例中,若相同交易类型的交易提案配置有不同的背书策略,则可以根据不同的背书策略设置不同的子缓存队列。

在一些实施例中,在可执行交易队列对应的背书节点集合中,可以按照预设的使用频率轮替使用该背书节点集合中的至少一个背书节点;该使用频率可以根据背书节点的计算能力配置。

例如,可以将使用频率设置为5,则表示向该背书节点发送5笔交易后,需换另一个;假设某个组织可用于背书的节点有3个,编号是P0、P1、P2,则轮替过程可以描述为:先向P0广播5笔,再向P1广播5笔,再向P2广播5笔,然后再向P0广播5笔,依次轮换。

在一些实施例中,对于可执行交易队列,需要监控该可执行交易队列对应的至少一个背书节点的背书节点状态以及连通性的变动情况,并根据变动情况更新该可执行交易队列的背书节点集合。

在一些实施例中,对于需要派生子事务的交易提案,在该交易提案派生了子事务,且子事务还未完成的情况下,将该交易提案缓存至待执行交易队列。在该子事务完成上链之后,将该交易从待执行交易队列中移动到上述的可执行交易队列中。

在本申请的一些实施例中,组织节点向客户端发送受理事件和广播交易给背书节点中,两个步骤是分离的,即组织节点将交易提案放入缓存队列后,即可将受理事件发送给客户端。

在本申请的一些实施例中,本申请还提供了子事务的批量处理方法。其中,提供了子事务缓存队列,组织节点通过Filter派生出的子事务并不立刻调用智能合约,而是将子事务缓存到该子事务缓存队列。

其中,考虑到子事务更多涉及并发交易的“热点”,逐笔执行上链的性能较差,所以引入子事务批量处理,即,将队列中的、有序的多个子事务打包成一个“分组”,作为一笔交易,调用其对应的智能合约;在合约内部按顺序逐笔执行分组中的子事务;如该合约无背书策略,则执行成功后,将该分组作为一笔交易上链。

其中,支持子事务分组的合约配置了背书策略;整个共识过程与上述实施例中描述的共识过程没有差别;满足背书策略后,该分组作为一笔交易上链。其中,上述实施例中子事务的描述中,涉及“回滚”场景,该场景新生成的子事务也缓存到该队列。

结合以上设计点,各组织可以根据业务场景设计不同Peer系统。下面以手续费收取的场景为例,简要说明Peer系统的设计。

假定并发交易场景为相同交易类型的多笔交易同时发给了特定的Peer节点,如下示意:

[A0, A1, …, An, B0, B1, …, Bn]是各不相同的用户/帐号;

交易T0:A0 向 B0转账,金额是 F0;

交易T1:A1 向 B1转账,金额是 F1;

交易Tn:An 向 Bn 转账,金额是 Fn;

该Peer节点在收到上述的任一交易请求后,校验请求合法性,检查交易类型对应的智能合约(交易类型对应的)、背书策略;在此之后,Peer节点从每笔交易中都派生出一个子事务,以T0为例,子事务Tx0对应的业务含义是:C向T0收取手续费Fx0,C是收取手续费的用户帐号;上例中的并发交易的手续费都收取到帐号C中;Fx0是交易T0的手续费。

此时,本申请实施例提供的三个队列中已经缓存了如下的数据:

子事务队列:[Tx0, Tx1, …Txn],顺序只是示意,保持加入队列的自然序;

待执行队列:[T0, T1, …Tn],顺序只是示意,保持加入队列的自然序;

可执行队列为空。

该Peer优先根据(可配置的)个数阈值,对子事务队列的元素进行分组;比如,个数阈值设置为100,则Peer将子事务队列序列前100个元素组成一个分组,使用系统配置的智能合约执行该分组的交易;即一次智能合约执行完成一个分组的交易;如果该合约无背书策略,(而且基本上无需背书策略),则该Peer将该分组作为一笔交易上链;上链完成后,该分组的子事务对应的交易Tn就可以从待执行队列移动到可执行队列;此时在可执行队列中的100笔交易是没有并发“热点”账户的,所以该队列的交易可快速的广播到(根据规则从预设的背书节点集合)选中的背书节点执行;

如果系统要求更大的并发能力,除了可以调整个数阈值之外,还可以给每个Peer配置不同的C账户,即可以看做将C账户拆分成[C0,C1,…Cn],然后本组织的每个Peer节点使用其中一个。

个数阈值配置的较大时,虽然可以支持更大的并发量,但当并发量较小时,交易处理耗时明显增加,所以还可以增加定时器(Timer)功能,可配置时间阈值,比如1s,即表示当子事务队列中的交易耗时达到了1s,即(当前时间-请求时间)不小于1s,则将这部分子事务作为一个分组,执行后续的流程。

通过本申请的上述示例性实施可知,本申请将共识过程的控制从客户端迁移到Peer的设计,自然解决了Fabric客户端设计引发的知识扩散、网络拓扑复杂问题,也带来了一些额外的效果:随着客户端不再参与共识,所以本组织可以自行设计客户端与区块链系统间的鉴权方式和管理;即,不再依赖Fabric系统的CA颁发客户端使用的证书;为区块链系统与业务系统的集成提供了一定的便利;简化了客户端实现,因为不再参与共识,仅剩下的客户端与Peer之间的交互,所以客户端实现更简单,更有利于系统集成和维护。

下面继续说明本发明实施例提供的软件模块2143的示例性结构,在一些实施例中,如图2所示,存储在存储器2140的软件模块2143可以包括以下子模块中的至少一个:第一发送模块21431,第一接收模块21432,第二发送模块,第二接收模块21434。

第一接收模块21431,用于通过区块链网络中的组织节点接收客户端发送的交易;

第一发送模块21432,用于在对交易校验成功的情况下,将交易发送给背书节点;

第二接收模块21433,用于接收背书节点发送的交易结果,并根据交易对应的背书策略对交易结果进行检测;

第二发送模块21434,用于在交易结果满足交易对应的背书策略的情况下,发送上链请求至排序节点,以使排序节点完成交易上链。

在本申请的一些实施例中,所述第一发送模块21432,还用于:将交易确定为可执行交易并缓存至可执行交易队列中;获取可执行交易队列对应的背书节点集合;背书节点集合包括背书节点;通过可执行交易队列将可执行交易发送至背书节点。

在本申请的一些实施例中,所述第一发送模块21432,还用于:获取交易的交易类型;在至少一个可选交易队列中,将与交易类型对应的可选交易队列确定为可执行交易队列;将交易确定为可执行交易并缓存至可执行交易队列。

在本申请的一些实施例中,所述第一发送模块21432,还用于:生成交易对应的子事务;处理子事务并获取子事务的事务上链结果;在事务上链结果表征子事务上链成功的情况下,将交易确定为可执行交易并缓存至可执行交易队列中。

在本申请的一些实施例中,所述第一发送模块21432,还用于:将子事务缓存至子事务缓存队列;通过子事务缓存队列处理子事务,以得到子事务的事务上链结果。

在本申请的一些实施例中,所述第一发送模块21432,还用于:根据预设的分组规则,将子事务缓存队列中的至少一个子事务划分为事务组;根据事务组对应的智能合约执行事务组中的至少一个子事务,得到事务组的事务组执行结果;根据事务组执行结果,生成事务组对应的事务组上链请求;将事务组上链请求发送至排序节点;接收排序节点发送的事务组上链结果,根据事务组上链结果确定子事务的事务上链结果。

在本申请的一些实施例中,所述第一发送模块21432,还用于:获取事务组对应的第一智能合约;根据第一智能合约执行每一子事务,并得到每一子事务的执行结果;根据每一子事务的执行结果生成事务组处理结果。

在本申请的一些实施例中,所述第一发送模块21432,还用于:获取事务组对应的第二智能合约;第二智能合约配置了背书策略;根据第二智能合约将每一子事务发送至事务组对应的至少一个背书节点;接收事务组对应的至少一个背书节点发送的每一子事务的模拟执行结果;根据第二智能合约的背书策略对每一子事务的模拟执行结果进行验证并生成事务组处理结果。

在本申请的一些实施例中,所述区块链网络包括至少一个组织节点;每一组织节点与一个子热点账户对应,事务组中的每一子事务均用于与热点账户之间进行交易;热点账户包括至少一个子热点账户。

在本申请的一些实施例中,所述第一发送模块21432,还用于:检测子事务缓存队列中的子事务数量;在子事务数量达到预设数量阈值的情况下,将子事务缓存队列中预设数量阈值个子事务划分为事务组。

在本申请的一些实施例中,所述第一发送模块21432,还用于:获取子事务缓存队列的交易耗时;交易耗时为最早缓存至子事务缓存队列中的子事务的等待时间;在交易耗时达到预设时间阈值的情况下,将子事务缓存队列中的所有子事务划分为事务组。

在本申请的一些实施例中,所述第二接收模块21433,还用于:根据交易对应的背书策略,判断是否存在未返回的交易结果;在存在未返回的交易结果的情况下,继续等待;在不存在未返回的交易结果的情况下,判断交易结果是否满足交易对应的背书策略,并生成检测结果;检测结果包括交易结果满足交易对应的背书策略、交易结果不满足交易对应的背书策略。

在本申请的一些实施例中,所述第二接收模块21433,还用于:在交易结果不满足交易对应的背书策略的情况下,生成子事务对应的回滚子事务;处理回滚子事务。

在本申请的一些实施例中,所述第二发送模块21434,还用于:根据检测结果生成执行结果事件;将执行结果事件发送至客户端。

在本申请的一些实施例中,所述第一发送模块21432,还用于:在对交易校验成功的情况下,发送受理事件至客户端;受理事件用于表征交易已被区块链网络校验成功并等待处理。

在本申请的一些实施例中,所述第一发送模块21432,还用于:获取背书节点集合中至少一个可选背书节点的历史分配情况;根据至少一个可选背书节点的历史分配情况,在至少一个可选背书节点中确定背书节点;将可执行交易发送至背书节点。

在本申请的一些实施例中,所述第一发送模块21432,还用于:根据历史分配情况确定分配顺序、上一次被分配交易的历史背书节点和历史背书节点的分配情况;根据预设的轮换频率、分配顺序和历史背书节点的分配情况确定在至少一个可选背书节点中确定背书节点。

本公开实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例上述的区块链网络的交易处理方法。

本公开实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的区块链网络的交易处理方法,例如,如图3至图8示出的方法。

在一些可能的实现方式中,计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。

在一些可能的实现方式中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。

作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,Hyper TextMarkup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。

作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。

综上所述,通过本申请实施例能够实现以下技术效果:

(1)本申请实施例通过区块链网络中的组织节点接收客户端发送的交易,将相关技术中客户端对交易过程中的共识控制步骤转移至该客户端所在组织的组织节点。如此,可以实现客户端的进一步轻量化,即客户端不再需要了解背书策略,也无需了解区块链网络的构成,因此不存在知识扩散的问题;客户端仅与本组织内的组织节点连通,精简了网络链路,降低了区块链网络的维护难度和维护成本,更容易保证区块链网络的安全性。

(2)本申请实施例通过为每一交易类型设置不同的可执行交易队列,并为每一可执行交易队列设置对应的背书节点集合,可以在为交易分配背书节点的过程中,省去相关技术中利用背书策略确定背书节点的步骤,提高了背书节点的选择效率。并且,由于为不同交易类型的交易设置不同的可执行交易队列,实现了不同业务对应交易的执行分离,可以为每一交易类型的交易定制背书节点集合,提高了整体交易处理效率。

(3)本申请实施例通过生成交易对应的子事务,在对该子事务处理完毕之后,将该交易缓存至可执行交易队列中。如此,可以实现了复杂场景下交易的处理过程,提升了本申请的应用范围。

(4)本申请实施例在交易对应的交易结果不满足背书策略的情况下,生成该交易的子事务对应的回滚子事务,实现了对以上链的子事务的回滚处理,提升了系统的灵活性。

(5)本申请实施例通过确定背书节点集合的轮换频率,在为交易确定背书节点的过程中,保证了背书节点的选择效率和选择合理性。可以使得各背书节点的负载均衡,进而提升了交易过程中整体背书效率。

以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。

相关技术
  • 区块链网络的交易处理方法、节点、设备及存储介质
  • 在区块链网络中处理交易的方法和节点设备以及存储介质
技术分类

06120112227253