CN114363162B - 区块链日志的生成方法及装置、电子设备、存储介质 - Google Patents

区块链日志的生成方法及装置、电子设备、存储介质 Download PDF

Info

Publication number
CN114363162B
CN114363162B CN202111670011.7A CN202111670011A CN114363162B CN 114363162 B CN114363162 B CN 114363162B CN 202111670011 A CN202111670011 A CN 202111670011A CN 114363162 B CN114363162 B CN 114363162B
Authority
CN
China
Prior art keywords
node
subnet
blockchain
cross
source
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
CN202111670011.7A
Other languages
English (en)
Other versions
CN114363162A (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.)
Alipay Hangzhou Information Technology Co Ltd
Ant Blockchain Technology Shanghai Co Ltd
Original Assignee
Alipay Hangzhou Information Technology Co Ltd
Ant Blockchain Technology Shanghai 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 Alipay Hangzhou Information Technology Co Ltd, Ant Blockchain Technology Shanghai Co Ltd filed Critical Alipay Hangzhou Information Technology Co Ltd
Priority to CN202111670011.7A priority Critical patent/CN114363162B/zh
Publication of CN114363162A publication Critical patent/CN114363162A/zh
Application granted granted Critical
Publication of CN114363162B publication Critical patent/CN114363162B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本说明书一个或多个实施例提供一种区块链日志的生成方法及装置、电子设备、存储介质;该方法应用于节点设备,所述节点设备上运行有分别属于不同区块链网络的多个节点实例,所述多个节点实例分别对应于不同的线程,且每一线程与相应节点实例所属区块链网络的网络标识绑定;该方法可以包括:响应于任一节点实例需处理的区块链任务,确定与所述区块链任务匹配的目标线程;在所述目标线程为所述任一节点实例对应的线程的情况下,通过所述目标线程执行所述区块链任务,使目标线程在打印所述区块链任务对应的日志信息时添加自身绑定的第一网络标识。

Description

区块链日志的生成方法及装置、电子设备、存储介质
技术领域
本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种区块链日志的生成方法及装置、电子设备、存储介质。
背景技术
区块链技术构建在传输网络(例如点对点网络)之上。区块链网络中的节点利用链式数据结构来验证与存储数据,并采用分布式节点共识算法来生成和更新数据。
日志(Log)作为区块链中的节点在运行时输出的参考信息,可供区块链网络的用户或者运维人员用于审计该区块链网络的运行状态,比如审计整个交易流程是否合理、是否按照预期执行等等。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种区块链日志的生成方法及装置、电子设备、存储介质。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种区块链日志的生成方法,应用于节点设备,所述节点设备上运行有分别属于不同区块链网络的多个节点实例,所述多个节点实例分别对应于不同的线程,且每一线程与相应节点实例所属区块链网络的网络标识绑定;所述方法包括:
响应于任一节点实例需处理的区块链任务,确定与所述区块链任务匹配的目标线程;
在所述目标线程为所述任一节点实例对应的线程的情况下,通过所述目标线程执行所述区块链任务,使目标线程在打印所述区块链任务对应的日志信息时添加自身绑定的第一网络标识。
根据本说明书一个或多个实施例的第二方面,提出了一种区块链日志的生成装置,应用于节点设备,所述节点设备上运行有分别属于不同区块链网络的多个节点实例,所述多个节点实例分别对应于不同的线程,且每一线程与相应节点实例所属区块链网络的网络标识绑定;所述装置包括:
确定单元,响应于任一节点实例需处理的区块链任务,确定与所述区块链任务匹配的目标线程;
执行单元,在所述目标线程为所述任一节点实例对应的线程的情况下,通过所述目标线程执行所述区块链任务,使目标线程在打印所述区块链任务对应的日志信息时添加自身绑定的第一网络标识。
根据本说明书一个或多个实施例的第三方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如上述任一实施例中所述的方法。
根据本说明书一个或多个实施例的第四方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如上述实施例中任一所述方法的步骤。
由以上实施例可见,在同一节点设备上运行有分别属于不同区块链网络的多个节点实例的应用场景下,每个节点实例用于形成相应的区块链网络中的区块链节点,并且每个节点实例通过创建的线程来执行自身需要处理的区块链任务。因此,各个线程在执行区块链任务时打印的日志也可能属于不同的区块链网络,即同一节点设备输出的日志涉及多个不同的区块链网络。
对此,通过将节点设备的每一线程与相应节点实例所属区块链网络的网络标识绑定,在响应于任一节点实例需处理的区块链任务时,可确定与该区块链任务匹配的目标线程,然后在目标线程为该节点实例对应的线程的情况下,使目标线程在打印区块链任务对应的日志信息时添加自身绑定的第一网络标识。基于上述打印日志的方式,每个线程打印的日志信息中均添加有所属区块链网络的网络标识,使得即使同一节点设备上部署有多个区块链网络的节点,该节点设备输出的日志信息也与部署的各个区块链网络相对应,从而便于日志管理以及后续利用日志信息中的网络标识来对相应区块链网络的运行状况进行审计。
附图说明
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是一示例性实施例提供的一种创建智能合约的示意图。
图2是一示例性实施例提供的一种调用智能合约的示意图。
图3是一示例性实施例提供的一种创建和调用智能合约的示意图。
图4是一示例性实施例提供的一种基于区块链主网组建区块链子网的示意图。
图5是一示例性实施例提供的一种区块链日志的生成方法的流程图。
图6是一示例性实施例提供的一种跨链交互的审计方法的流程图。
图7是一示例性实施例提供的一种设备的结构示意图。
图8是一示例性实施例提供的一种区块链日志的生成装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(PrivateBlockchain)和联盟链(Consortium Blockchain)。此外,还有多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式。其中去中心化程度最高的是公有链。加入公有链的参与者可以读取链上的数据记录、参与交易以及竞争新区块的记账权等。而且,各参与者(即节点)可自由加入以及退出网络,并进行相关操作。私有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。简单来说,私有链可以为一个弱中心化系统,参与节点具有严格限制且少。这种类型的区块链更适合于特定机构内部使用。联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;参与者通过授权加入网络并组成利益相关联盟,共同维护区块链运行。
不论是公有链、私有链还是联盟链,都可能提供智能合约的功能。区块链上的智能合约是在区块链系统上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。
例如图1所示,Bob将一个包含创建智能合约信息的交易发送到网络后,节点1的EVM可以执行这个交易并生成对应的合约实例。图1中的“0x6f8ae93…”代表了这个合约的地址,交易的data字段保存的可以是字节码,交易的to字段为空。节点间通过共识机制达成一致后,这个合约成功创建,并且可以在后续过程中被调用。合约创建后,区块链上出现一个与该智能合约对应的合约账户,并拥有一个特定的地址,合约代码将保存在该合约账户中。智能合约的行为由合约代码控制。换句话说,智能合约使得区块链上产生包含合约代码和账户存储(Storage)的虚拟账户。
如图2所示,Bob将一个用于调用智能合约的交易发送到网络后,某一节点的EVM可以执行这个交易并生成对应的合约实例。图2中交易的from字段是交易发起方(即Bob)的账户的地址,to字段中的“0x6f8ae93…”代表了被调用的智能合约的地址,交易的data字段保存的调用智能合约的方法和参数。调用智能合约后,balance的值可能改变。后续,某个客户端可以通过某一区块链节点(例如图2中的节点6)查看balance的当前值。智能合约以规定的方式在区块链网络中每个节点独立的执行,所有执行记录和数据都保存在区块链上,所以当交易完成后,区块链上就保存了无法篡改、不会丢失的交易凭证。
创建智能合约和调用智能合约的示意图如图3所示。创建一个智能合约需要经过编写智能合约、编译成字节码、部署到区块链等过程。调用智能合约,是发起一笔指向智能合约地址的交易,智能合约代码分布式的运行在网络中每个节点的虚拟机中。
需要说明的是,除了可以由用户创建智能合约,也可以在创世块中由系统设置智能合约。这类合约一般称为创世合约。一般的,创世合约中可以设置一些区块链网络的数据结构、参数、属性和方法。此外,具有系统管理员权限的账户可以创建系统级的合约,或者修改系统级的合约(简称为系统合约)。
区块链网络中的节点在执行调用智能合约的交易后,会生成相应的收据(receipt),以用于记录与执行该智能合约相关的信息。这样,可以通过查询交易的收据来获得合约执行结果的相关信息。合约执行结果可以表现为收据中的事件(event)。消息机制可以通过收据中的事件实现消息传递,以触发区块链节点执行相应的处理。事件的结构譬如可以为:
Event:
[topic][data]
[topic][data]
......
在上述示例中,事件的数量可以为一个或多个;其中,每个事件分别包括主题(topic)和数据(data)等字段。区块链节点可以通过监听事件的topic,从而在监听到预定义的topic的情况下,执行预设处理,或者从相应事件的data字段读取相关内容,以及可以基于读取的内容执行预设处理。
上述的事件机制中,相当于在监听方(比如存在监听需求的用户)处存在具有监听功能的客户端,譬如该客户端上运行了用于实现监听功能的SDK等,由该客户端对区块链节点产生的事件进行监听,而区块链节点只需要正常生成收据即可。除了上述的事件机制之外,还可以通过其他方式实现交易信息的透出。由于监听代码部署于区块链平台代码中,而非监听方的客户端处,因而相比于事件机制而言,这种基于监听代码的实现方式相对更加的主动。其中,上述的监听代码可以由区块链平台的开发人员在开发过程中加入区块链平台代码,也可以由监听方基于自身的需求而嵌入,本说明书并不对此进行限制。
区块链技术区别于传统技术的去中心化特点之一,就是在各个节点上进行记账,或者称为分布式记账,而不是传统的集中式记账。区块链系统要成为一个难以攻破的、公开的、不可篡改数据记录的去中心化诚实可信系统,需要在尽可能短的时间内做到分布式数据记录的安全、明确及不可逆。不同类型的区块链网络中,为了在各个记录账本的节点中保持账本的一致,通常采用共识算法来保证,即前述提到的共识机制。例如,区块链节点之间可以实现区块粒度的共识机制,比如在节点(例如某个独特的节点)产生一个区块后,如果产生的这个区块得到其它节点的认可,其它节点记录相同的区块。共识机制是区块链节点就区块信息(或称区块数据)达成全网一致共识的机制,可以保证最新区块被准确添加至区块链。当前主流的共识机制包括:工作量证明(Proof of Work,POW)、股权证明(Proof ofStake,POS)、委任权益证明(Delegated Proof of Stake,DPOS)、实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)算法,HoneyBadgerBFT算法等。
由于区块链网络的去中心化特性,区块链网络中的所有节点处于对等地位,使得区块链网络中的所有区块链节点均会维护相同的区块数据,但一些节点有时存在实现小范围交易的需求,避免其他节点获得这些交易及其相关数据,导致无法满足部分节点的特殊需求。以联盟链为例,所有联盟成员(即联盟内的节点成员)可以组成一区块链网络,所有联盟成员在该区块链网络中分别存在对应的区块链节点,并可以通过对应的区块链节点获得该区块链网络上发生的所有交易和相关数据。但在一些情况下,可能存在部分联盟成员希望完成一些具有保密需求的交易,这些联盟成员既希望这些交易能够在区块链上存证或借助于区块链技术的其他优势,又能够避免其他联盟成员查看到这些交易和相关数据。虽然这些联盟成员可以额外组建一新的区块链网络,其建立方式与上述包含所有联盟成员的区块链网络类似,但是从头开始建立一条新的区块链网络需要消耗大量的资源,且无论是该区块链网络的建立过程或是建成后的配置过程都非常耗时。联盟成员之间的需求往往是临时的或者具有一定的时效性,使得新建的区块链网络很快就会由于需求消失而失去存在的意义,从而进一步增加了上述区块链网络的建链成本。而联盟成员之间的需求经常会变化,而每一需求所对应的联盟成员也往往不同,因而每当联盟成员发生变化时就可能需要组建一新的区块链网络,从而造成资源和时间的大量浪费。
对此,可以将已组建的区块链网络作为区块链主网,并在该区块链主网的基础上组建区块链子网。那么,在诸如上述的联盟链场景下,联盟成员可以在已经参与区块链主网的情况下,基于自身需求而在区块链主网的基础上组建所需的区块链子网。由于区块链子网是在区块链主网的基础上所建立,使得区块链子网的组建过程相比于完全独立地组建一条区块链网络,所消耗的资源和所需的耗时等都极大地降低,灵活性极高。一方面可满足一些节点成员之间的小范围交易需求,另一方面可以通过区块链主网便捷地实现对区块链子网的管理。
具体而言,区块链主网中的各区块链节点分别获取组建区块链子网的交易。其中,该交易包含区块链子网的配置信息,该配置信息包括参与组建区块链子网的节点成员的身份信息。然后,区块链主网中的各区块链节点分别执行上述交易以透出该配置信息;其中,当配置信息包含第一区块链节点对应的节点成员的身份信息时,部署第一区块链节点的节点设备基于该交易生成包含配置信息的创世块,并基于创世块启动属于区块链子网的第二区块链节点。
组建区块链子网的交易可由区块链主网的管理员发起,即仅允许管理员在区块链主网的基础上组建区块链子网,而避免将区块链子网的组建权限开放给普通用户,以防止由此导致的安全性问题。在一些情况下,也可以允许区块链主网的普通用户发起上述组建区块链子网的交易,以满足普通用户的组网需求,使得普通用户能够在管理员不便于发起交易的情况下依然能够快捷地组建区块链子网。
以图4所示为例,区块链主网为subnet0,该subnet0包含的区块链节点为nodeA、nodeB、nodeC、nodeD和nodeE等。假定分别对应nodeA、nodeB、nodeC和nodeD的节点成员希望组建一区块链子网:如果nodeA为管理员且仅允许管理员发起组建区块链子网的交易,那么可由nodeA向subnet0发起上述组建区块链子网的交易;如果nodeE为管理员且仅允许管理员发起组建区块链子网的交易,那么nodeA~nodeD需要向nodeE进行请求,使得nodeE向subnet0发起上述组建区块链子网的交易;如果nodeE为管理员但允许普通用户发起组建区块链子网的交易,那么nodeA~nodeE均可以向subnet0发起上述组建区块链子网的交易。当然,不论是管理员或者普通用户,发起组建区块链子网的交易的区块链节点对应的节点成员并不一定参与所组建的区块链子网,比如虽然最终由nodeA、nodeB、nodeC和nodeD分别对应的节点成员组建区块链子网,但可由nodeE向subnet0发起上述组建区块链子网的交易,而并不一定由nodeA~nodeD来发起该组建区块链子网的交易。
在区块链主网的基础上组建区块链子网时,容易理解的是,会使得该区块链子网与区块链主网之间存在逻辑上的层次关系。比如在图4所示的subnet0上组建区块链子网subnet1时,可以认为subnet0处于第一层、subnet1处于第二层。一种情况下,本说明书中的区块链主网可以为底层区块链网络,即区块链主网并非在其他区块链网络的基础上组建的区块链子网,比如图4中的subnet0可以认为属于底层区块链网络类型的区块链主网。另一种情况下,本说明书中的区块链主网可以为其他区块链网络的子网,比如可以在图4中subnet1的基础上进一步组建另一区块链子网,此时可以认为subnet1为该区块链子网对应的区块链主网,而这并不影响该subnet1同时属于subnet0上创建的区块链子网。可见,区块链主网与区块链子网实际上是相对概念,同一区块链网络在一些情况下可以为区块链主网、另一些情况下可以为区块链子网。
上述组建区块链子网的交易在被发送至区块链主网后,由区块链主网内的共识节点进行共识,并在通过共识后由各区块链节点执行该交易,以完成区块链子网的组建。共识过程取决于所采用的共识机制,譬如上文所述的任一共识机制,本说明书并不对此进行限制。
通过在上述组建区块链子网的交易中包含配置信息,该配置信息可以用于对所组建的区块链子网进行配置,使得组建的区块链子网符合组网需求。例如,通过在配置信息中包含参与组建所述区块链子网的节点成员的身份信息,可以指定组建的区块链子网对应于哪些节点成员。
节点成员的身份信息可以包括公钥,或者采用节点ID等其他能够表征节点成员的身份的信息,本说明书并不对此进行限制。以公钥为例,每个区块链节点都存在对应的一组或多组公私钥对,由区块链节点持有私钥而公钥被公开且唯一对应于该私钥,因而可以通过公钥来表征相应区块链节点的身份,也可以通过该公钥来表征该区块链节点对应的节点成员的身份。因此,对于希望参与组建区块链子网的节点成员,可以将这些节点成员在区块链主网上对应的区块链节点的公钥添加至上述组建区块链子网的交易中,以作为上述节点成员的身份信息。上述的公私钥对可以用于签名验证的过程。例如,在采用有签名的共识算法中,譬如subnet1上述的nodeA1采用自身维护的私钥对消息进行签名后,将经过签名的消息在subnet1中广播,而nodeB1、nodeC1和nodeD1可以用nodeA1的公钥对收到的消息进行签名验证,以确认自身收到的消息确实来自nodeA1且没有经过篡改。
第一区块链节点可以为区块链主网上属于配置信息所指示的节点成员对应的区块链节点。在组建区块链子网时,并非由第一区块链节点直接参与组建区块链子网,而是需要由用于部署该第一区块链节点的节点设备生成第二区块链节点,并由第二区块链节点参与组建区块链子网。第一区块链节点和第二区块链节点对应于同一个节点成员,比如在联盟链场景下对应于同一联盟链成员,但第一区块链节点属于区块链主网、第二区块链节点属于区块链子网,使得该节点成员可以分别参与到区块链主网和区块链子网的交易中;并且,由于区块链主网和区块链子网属于相互独立的两个区块链网络,使得第一区块链节点生成的区块与第二区块链节点生成的区块分别存入所述节点设备上的不同存储(采用的存储譬如可以为数据库),实现了第一区块链节点与第二区块链节点分别使用的存储之间的相互隔离,因而区块链子网所产生的数据仅会在区块链子网中的各个区块链节点之间同步,使得仅参与了区块链主网的节点成员无法获得区块链子网上产生的数据,实现了区块链主网与区块链子网之间的数据隔离,满足了部分节点成员(即参与区块链子网的节点成员)之间的交易需求。
第一区块链节点和第二区块链节点是在逻辑上划分出来的区块链节点,而从物理设备的角度来说,相当于上述部署了第一区块链节点和第二区块链节点的节点设备同时参与了区块链主网和区块链子网。由于区块链主网与区块链子网之间相互独立,使得这两个区块链网络的身份体系也相互独立,因而即便第一区块链节点和第二区块链节点可以采用完全相同的公钥,仍然应当将两者视为不同的区块链节点。譬如在图4中,subnet0中的nodeA相当于第一区块链节点,而部署该nodeA的节点设备生成了属于subnet1的nodeA1,该nodeA1相当于第二区块链节点。可见,由于身份体系相互独立,所以即便第二区块链节点所采用的公钥区别于第一区块链节点,也不影响本说明书方案的实施。
当然,参与区块链子网的节点成员并不一定只是参与区块链主网的节点成员中的一部分。在一些情况下,参与区块链子网的节点成员可以与参与区块链主网的节点成员完全一致,此时所有的节点成员都可以获得区块链主网和区块链子网上的数据,但是区块链主网与区块链子网所产生的数据依然可以相互隔离,比如可以通过在区块链主网上实现一类业务、在区块链子网上实现另一类业务,从而可以使得这两类业务分别产生的业务数据之间相互隔离。
除了上述的节点成员的身份信息之外,配置信息还可以包括下述至少之一:所述区块链子网的网络标识、所述区块链子网的管理员的身份信息、针对区块链平台代码的属性配置等,本说明书并不对此进行限制。网络标识用于唯一表征该区块链子网,因而该区块链子网的网络标识应当区别于区块链主网和该区块链主网上组建的其他区块链子网。区块链子网的管理员的身份信息,譬如可以为作为管理员的节点成员的公钥;其中,区块链主网与区块链子网的管理员可以相同,也可以不同。
通过区块链主网来组建区块链子网的优势之一,就是由于生成第二区块链节点的节点设备上已经部署了第一区块链节点,因而可以将第一区块链节点所使用的区块链平台代码复用在第二区块链节点上,免去了区块链平台代码的重复部署,极大地提高了区块链子网的组建效率。那么,如果配置信息中未包含针对区块链平台代码的属性配置,第二区块链节点可以复用第一区块链节点上采用的属性配置;如果配置信息中包含了针对区块链平台代码的属性配置,第二区块链节点可以采用该属性配置,使得第二区块链节点所采用的属性配置不受限于第一区块链节点的属性配置、与第一区块链节点无关。针对区块链平台代码的属性配置可以包括下述至少之一:代码版本号、是否需要共识、共识算法类型、区块大小等,本说明书并不对此进行限制。
组建区块链子网的交易包括调用合约的交易。该交易中可以指明被调用的智能合约的地址、调用的方法和传入的参数。例如,调用的合约可以为前述的创世合约或系统合约,调用的方法可以为组建区块链子网的方法,传入的参数可以包括上述的配置信息。
举例而言,Subnet系统合约的结构可以包含如下信息:
struct SubnetInfo{
uint subnetId;
bytes[]pubkeys;
SubnetState subnetState;
string genesis;
}
其中,subnetId用于表示区块链子网的子网标识;pubkeys用于表示区块链子网的子网节点的身份信息;subnetState用于表示区块链子网的运行状态(启动、停止、无效等);genesis用于表示区块链子网的创世块信息。上述数据均可存储于Subnet系统合约的合约状态中。
用于组建区块链子网的交易可以包含如下信息:
from:Administrator
to:Subnet
method:AddSubnet(string)
string:genesis
其中,from字段为该交易的发起方的信息,譬如Administrator表明该发起方为管理员;to字段为被调用的智能合约的地址,譬如该智能合约可以为Subnet合约,则to字段具体为该Subnet合约的地址;method字段为调用的方法,譬如在Subnet合约中用于组建区块链子网的方法可以为AddSubnet(string),而string为AddSubnet()方法中的参数,上述示例中通过genesis表征该参数的取值,该genesis具体为前述的配置信息。
以Subnet0上的节点nodeA~nodeE执行调用Subnet合约中AddSubnet()方法的交易为例。在交易通过共识后,nodeA~nodeE分别执行AddSubnet()方法并传入配置信息,得到相应的执行结果。
合约的执行结果可以包括所述配置信息,该执行结果可以处于前文所述的收据中,该收据中可以包含与执行AddSubnet()方法相关的event,即组网事件。组网事件的topic可以包含预定义的组网事件标识,以区别于其他的事件。譬如在与执行AddSubnet()方法相关的event中,topic的内容为关键词subnet,且该关键词区别于其他方法所产生event中的topic。那么,nodeA~nodeE或者部署nodeA~nodeE的节点设备1~5通过监听生成的收据中各个event所含的topic,可以在监听到包含关键词subnet的topic的情况下,确定监听到与执行AddSubnet()方法相关的event,即组网事件。例如,收据中的event如下:
Event:
[topic:other][data]
[topic:subnet][data]
......
那么,在监听到第1条event时,由于所含topic的内容为other,确定该event与AddSubnet()方法无关;以及,在监听到第2条event时,由于所含topic的内容为subnet,确定该event与AddSubnet()方法相关,并进而读取该event对应的data字段,该data字段包含上述的配置信息。以配置信息包括区块链子网的节点成员的公钥为例,data字段的内容例如可以包括:
{subnet1;
nodeA的公钥,nodeA的IP、nodeA的端口号…;
nodeB的公钥,nodeB的IP、nodeB的端口号…;
nodeC的公钥,nodeC的IP、nodeC的端口号…;
nodeD的公钥,nodeD的IP、nodeD的端口号…;
}
其中,subnet1为希望创建的区块链子网的网络标识。区块链主网中的各个区块链节点可以记录该区块链主网上已创建的所有区块链子网的网络标识,或者与这些区块链子网相关的其他信息,这些信息譬如可以维护在上述的Subnet合约中,具体可以对应于该Subnet合约所含的一个或多个合约状态的取值。那么,可以根据记录的已创建的所有区块链子网的网络标识,确定上述的subnet1是否已经存在;如果不存在,说明subnet1是当前需要创建的新区块链子网,如果存在则说明subnet1已经存在。
除了采用希望创建的新的区块链子网的网络标识之外,还可以采用预定义的新建网络标识,该新建网络标识表明相应的组网事件用于组建新的区块链子网。例如,可以将上述的subnet1替换为newsubnet,该newsubnet为预定义的新建网络标识,nodeA~nodeE在识别到data字段包含newsubnet时,即可确定包含该newsubnet的event为组网事件,需要创建新的区块链子网。
除了网络标识subnet1之外,上述data字段中还包含参与组建区块链子网的各个节点成员的身份信息等内容。部署第一区块链节点的节点设备可以监听生成的收据,并在监听到所述组网事件且所述组网事件的内容包含第一区块链节点对应的节点成员的身份信息的情况下,由部署第一区块链节点的节点设备获取所述组网事件包含的配置信息或创世块。或者,第一区块链节点可以监听生成的收据,并在监听到所述组网事件且所述组网事件的内容表明第一区块链节点属于所述节点成员的情况下,触发部署第一区块链节点的节点设备获取所述组网事件包含的所述配置信息或所述创世块。
如前所述,节点设备可以直接监听收据。假定nodeA~nodeE分别部署在节点设备1~5上,节点设备1~5可以监听nodeA~nodeE分别生成的收据,那么在监听到subnet1是需要新组建的区块链子网的情况下,节点设备1~5会进一步识别data字段中包含的节点成员的身份信息,以确定自身的处理方式。以nodeA和节点设备1为例:如果节点设备1发现data字段包含nodeA的公钥、IP地址和端口号等身份信息,那么节点设备1在基于上述的消息机制从data字段获得配置信息的情况下,生成包含该配置信息的创世块,且节点设备1会在本地部署nodeA1,该nodeA1加载生成的创世块,从而成为subnet1的子网节点;类似地,节点设备2可以生成nodeB1、节点设备3可以生成nodeC1、节点设备4可以生成nodeD1。以及,节点设备5会发现data字段包含的身份信息与自身均不匹配,则该节点设备5不会根据data字段中的配置信息生成创世块,也不会生成subnet1中的区块链节点。
如前所述,区块链主网中的区块链节点可以监听收据,并根据监听结果触发节点设备执行相关处理。例如,nodeA~nodeE在确定subnet1是需要新组建的区块链子网的情况下,会进一步识别data字段中包含的节点成员的身份信息,以确定自身的处理方式。比如,nodeA~nodeD会发现在data字段包含自身的公钥、IP地址和端口号等身份信息,假定nodeA~nodeD分别部署在节点设备1~4上,以nodeA和节点设备1为例:nodeA会触发节点设备1,使得节点设备1在基于上述的消息机制从data字段获得配置信息的情况下,生成包含该配置信息的创世块,且节点设备1会在本地部署nodeA1,该nodeA1加载生成的创世块,从而成为subnet1的子网节点;类似地,nodeB会触发节点设备2生成nodeB1、nodeC会触发节点设备3生成nodeC1、nodeD会触发节点设备4生成nodeD1。以及,nodeE会发现data字段包含的身份信息与自身均不匹配,假定nodeE部署在节点设备5上,那么该节点设备5不会根据data字段中的配置信息生成创世块,也不会生成subnet1中的区块链节点。
如前所述,第一区块链节点与第二区块链节点并不一定采用相同的身份信息。因此,在上述实施例中,data字段中可以包含预先为nodeA1~nodeD1生成的身份信息,且区别于nodeA~nodeD的身份信息。仍以nodeA和节点设备1为例:节点设备1如果在data字段中发现了nodeA1的身份信息,可以生成创世块、部署nodeA1,并由nodeA1加载该创世块;或者,nodeA如果在data字段中发现了nodeA1的身份信息,那么nodeA会触发节点设备1生成创世块、部署nodeA1,并由nodeA1加载该创世块。其他区块链节点或节点设备的处理方式类似,此处不再一一赘述。
除了配置信息之外,合约的执行结果可以包括创世块。换言之,除了可以在data字段中包含配置信息,还可以直接在执行合约调用的过程中生成包含配置信息的创世块,从而将创世块包含于data字段中,那么对于上述的nodeA~nodeD而言,相应的节点设备1~4可以通过消息机制直接从data字段获得创世块,而无需自行生成,可以提升对nodeA1~nodeD1的部署效率。
在本说明书中,组建区块链子网的交易可以并非是调用智能合约的交易,使得不支持智能合约的区块链网络也可以实现本说明书的技术方案,从而在区块链主网的基础上快捷地创建出区块链子网。例如,可以预先定义一组网交易类型标识,当交易包含该组网交易类型标识时,就表明该交易用于组建新的区块链子网,即该交易为组建区块链子网的交易。区块链平台代码可以包含相关的用于组建区块链子网的处理逻辑,使得运行该区块链平台代码的第一区块链节点在执行交易时,如果发现该交易中包含上述的组网交易类型标识,且第一区块链节点对应的节点成员的身份信息被包含于该交易中的配置信息中,可以基于上述处理逻辑来触发部署第一区块链节点的节点设备生成包含该配置信息的创世块并启动第二区块链节点,由第二区块链节点加载该创世块,以形成为区块链子网中的区块链节点。
节点设备通过在进程中创建一个运行区块链平台代码的实例,实现在该节点设备上部署一区块链节点。对于第一区块链节点而言,由节点设备在上述进程中创建运行区块链平台代码的第一实例而形成。类似地,对于第二区块链节点而言,由节点设备在上述进程中创建运行区块链平台代码的第二实例而形成。例如,节点设备可以首先在进程中创建第一实例,以形成区块链主网中的第一区块链节点;而当该节点设备对应的节点成员希望参与组建区块链子网时,可以在上述进程中创建第二实例,该第二实例区别于上述的第一实例,并由该第二实例形成区块链子网中的第二区块链节点。当第一实例与第二实例位于同一进程时,由于不涉及跨进程交互,可以降低对第二区块链节点的部署难度、提高部署效率。当然,第二实例也可能与第一实例分别处于节点设备上的不同进程中,本说明书并不对此进行限制。例如,节点设备可以在第一进程中创建第一实例,以形成区块链主网中的第一区块链节点;而当该节点设备对应的节点成员希望参与组建区块链子网时,可以启动区别于第一进程的第二进程,并在该第二进程中创建第二实例,该第二实例区别于上述的第一实例,进而由该第二实例形成区块链子网中的第二区块链节点。
通过上述方式,可以在区块链主网上创建出区块链子网。以图4为例,subnet0原本包含nodeA~nodeE,而在subnet0的基础上可以组建出subnet1,该subnet1包含nodeA1~nodeD1,且nodeA与nodeA1、nodeB与nodeB1、nodeC与nodeC1、nodeD与nodeD1分别部署在同一节点设备上。类似地,还可以在subnet0上组建出subnet2或更多的区块链子网,其中subnet2包含nodeA2、nodeB2、nodeC2和nodeE2,且nodeA与nodeA1、nodeA2,nodeB与nodeB1、nodeB2,nodeC与nodeC1,nodeD与nodeD1,nodeE与nodeE2分别部署在同一节点设备上。以及,可以将subnet1、subnet2等作为新的区块链主网,并在此基础上进一步组建出区块链子网,其过程与subnet1或subnet2的组建相似,此处不再赘述。
节点设备中部署的各区块链节点实质是运行在所述节点设备上且由各自组件模块构成的不同区块链实例,各节点设备都部署有相应的组件管理器,用于管理相应节点设备上部署的各区块链节点(包括主网节点和子网节点)在运行时所依赖的组件模块,也即用于构成各区块链节点的组件模块。基于此,节点设备可以通过第一区块链子网的子网节点对应的组件管理器,启动用于构成第一区块链子网的子网节点的组件模块。
在一种情况下,节点设备中只会部署一个共享组件管理器,用于管理该节点设备中部署的所有区块链节点对应的组件模块,即该共享组件管理器对应于节点设备上部署的所有区块链节点。具体而言,共享组件管理器中可以维护有本地部署的各区块链节点的组件配置信息。由于同一区块链网络中的不同区块链节点的组件模块通常相同,所以区块链节点的组件配置信息与该区块链节点所属的区块链网络的组件配置信息通常是一致地,当然,同一区块链网络中的不同区块链节点的组件模块也可能不同。区块链节点的组件配置信息用于指示构成所述某一区块链节点的具体的组件模块,例如可以包括:业务网络组件、服务组件、P2P(peer-to-peer,点对点通讯)组件、区块链子网管理组件、Cache(高速缓存存储器)组件、验证组件、事件管理组件、共识组件、同步组件、执行组件、区块管理组件、存储组件等,本说明书对此并不做任何限制。
在另一种情况下,某一节点设备会根据该节点设备部署的每个区块链节点均单独分配一个对应的独立组件管理器,例如可以分配一独立组件管理器单独应用于构成第一区块链子网的子网节点。具体而言,任一独立组件管理器可以仅维护有对应区块链节点的组件配置信息,专门负责管理对应区块链节点的组件模块,例如开启、关闭、替换相应区块链节点的组件模块等。其中,节点设备中部署的组件管理器其能够通过读取前述子网管理列表获取第一区块链节点的组件配置信息。
节点设备上不同的区块链节点可能在运行时依赖于同一个组件模块,而这样的组件就是共享组件。例如节点设备A上目前处于开启状态的区块链节点包括nodeA和nodeA1,用于构成nodeA的组件模块包括组件1.0、组件2.0、组件3.0和组件4.0,用于构成nodeA1的组件模块包括组件1.1、组件2.0、组件3.1、组件4.1和组件5.1,其中,组件1.0和组件1.1、组件3.0和组件3.1、组件4.0和组件4.1虽然属于同一类型的组件模块,具有相同的组件功能,但依然是两个不同的组件模块被分别嵌入不同的区块链节点,彼此不会共享信息,本质上属于不同的组件模块。而组件2.0则是同时被nodeA和nodeA1所依赖,因此,像组件2.0这种同时被两个或两个以上的区块链节点共同使用的组件模块就属于节点设备A下的共享组件,与之对应地,仅被一个区块链节点单独依赖的组件模块则属于节点设备A下的独立组件,例如上述除组件2.0以外的组件均属于独立组件。
组件管理器中可以维护各组件模块之间的依赖关系。假如组件A的正常运行必须要求组件B已经运行,那么可以认为组件A与组件B之间具有依赖关系,并且组件A依赖于组件B。当节点设备根据所述节点启动信息启动用于构成第一区块链子网的子网节点的组件模块时,可以按照构成该节点的各个组件模块之间的依赖关系,依次启动各个组件模块。例如,在用于构成nodeA1的组件模块包括组件1.1、组件2.0、组件3.1、组件4.1和组件5.1,且组件4.1和组件5.1依赖于组件3.1、组件3.1依赖于组件1.1和组件2.0的情况下,节点设备可以先启动组件1.1和组件2.0,再启动组件3.1,最后启动组件4.1和组件5.1。
节点设备上部署的组件管理器,可以根据本地部署的各区块链节点的组件配置信息以及运行状态,维护一个组件信息属性列表,用于标注所有组件模块的属性信息,包括是共享组件还是独立组件,与其他组件模块的依赖关系等。组件信息属性列表可以实时更新地,例如,当组件管理器读取子网管理列表后,发现当前运行状态为开启状态的区块链子网只有mainnet0和subnet1,那么就会进一步查找得到本地部署的mainnet0和subnet1分别对应的nodeA与nodeA1的组件配置信息,进而比对可以得到nodeA与nodeA1所共同使用的组件模块为组件2.0,于是将组件信息属性列表中的组件2.0标注为共享组件。而当subnet1关闭后,组件管理器再次读取子网管理列表发现运行状态为开启状态的区块链子网只有mainnet0,那么就只能查找得到的nodeA的组件配置信息,此时不存在任何共享组件,于是可以将组件信息属性列表中的组件2.0从共享组件更改为独立组件。除了通过子网管理列表中各区块链子网的子网信息获取本地部署的各子网节点的组件配置信息、运行状态以外,组件管理器也可以单独维护本地部署的主网节点和各子网节点的组件配置信息与运行状态,而在对相应子网节点完成启动后,自行更新维护的运行状态等信息,从而可以更加及时、准确地更新组件信息属性列表中的各组件模块的属性信息。
进一步地,节点设备可以通过下述过程启动用于构成第一区块链子网中任一区块链节点的组件模块:
确定用于构成所述任一区块链节点的各组件模块的组件描述信息,以及各组件模块的运行需求。在本实施例中,可以通过查询任一区块链节点对应的组件信息属性列表,确定用于构成该节点的各组件模块的组件描述信息以及运行需求,其中,组件描述信息可以包括组件类型、组件名、组件功能中至少一项,用于指向具体的组件模块。
进而,在任一组件模块的运行需求为共享运行的情况下,若存在匹配于该组件模块的组件描述信息的已开启组件模块,而且所述已开启组件模块的运行模式为共享模式,则节点设备可以将所述已开启组件模块共享至所述任一区块链节点。其中,所述各组件模块的运行需求被定义于所述任一区块链节点对应的组件配置信息中,若组件配置信息中任一组件模块的运行需求为共享运行,说明需要使该任一组件模块以共享模式运行。并且,如果在启动该任一组件模块之前,第一节点设备就已经通过组件信息属性列表查找到该任一组件模块的组件描述信息对应的已开启组件模块,那么可以进一步在确定该已开启组件模块的运行模式为共享模式的情况下将该已开启组件模块共享至该任一组件模块所属的区块链节点。
或者,在所述任一组件模块的运行需求为共享运行的情况下,若不存在匹配于所述组件描述信息且运行模式为共享模式的已开启组件模块,则节点设备可以启动所述任一组件模块。若组件配置信息中任一组件模块的运行需求为共享运行,说明需要使该任一组件模块以共享模式运行。并且,如果在启动该任一组件模块之前,第一节点设备就已经通过组件信息属性列表查找到不存在该任一组件模块的组件描述信息对应的已开启组件模块,或者虽然存在该已开启组件模块但其运行模式不为共享模式,那么此时认为不存在匹配于所述组件描述信息且运行模式为共享模式的已开启组件模块,因此需要启动该任一组件模块。同时,在启动所述组件描述信息对应的组件模块时,还可以基于所述运行需求设置所启动的组件模块的运行模式,例如由于该任一组件模块的共享需求为共享运行。因此,可以将启动后的任一组件模块的运行模式设置为共享模式,以使后续需要使用该任一组件模块的区块链节点在启动时可以将该任一组件模块共享至后续启动的区块链节点。
再或者,在所述任一组件模块的运行需求为独立运行的情况下,节点设备可以启动所述任一组件模块。若组件配置信息中任一组件模块的运行需求为独立运行,说明需要使该任一组件模块以独享模式运行,因此可以直接启动该任一组件模块并将其运行模式设置为独享模式,以使后续需要使用该任一组件模块的区块链节点在启动时无法将该任一组件模块共享至后续启动的区块链节点,从而满足其独享模式的运行模式,确保组件配置信息中该任一组件模块独立运行的运行需求。
在上述情况下,各组件模块的运行需求被定义于所述任一区块链节点对应的组件配置信息中,而不同区块链节点对应的各个组件配置信息可以有所差异,因此对于不同的区块链节点可以分配不同的组件共享策略,这种对于不同的区块链节点的差异化管理能够灵活地满足用户的各类实际需求。在另一种情况下,各组件模块的运行需求为全局预定义信息,因此任一区块链节点对应的组件配置信息中可以无需记录各组件模块的运行需求,组件配置器根据不同的组件描述信息维护有各个组件模块的运行需求,那么在通过上述方式启动组件模块时,使得预设的组件模块总以共享模式运行,当需要启动用于构成任一区块链节点的组件模块时,如果该组件模块的组件描述信息表明该组件模块具有共享需求,则可以直接将对应该组件描述信息的已开启组件模块共享至该任一区块链节点,从而提供统一的共享策略。
综上所述,在区块链主网的基础上组建区块链子网时,会使得该区块链子网与区块链主网之间存在逻辑上的层次关系,从而构成多层区块链系统,本说明书将这种机制称之为动态组网机制。比如图4中的subnet0可以认为属于底层区块链网络类型的区块链主网;或者,区块链主网也可以通过动态组网机制成为其他区块链网络的子网,比如可以在图4中subnet1(或subnet2)的基础上进一步通过动态组网机制组建另一区块链子网,此时可以认为subnet1(或subnet2)为该区块链子网对应的区块链主网,而这并不影响该subnet1(或subnet2)同时属于subnet0的区块链子网。可见,区块链主网与区块链子网实际上是相对概念,同一区块链网络在一些情况下可以为区块链主网、另一些情况下可以为区块链子网。
由此可见,基于上述动态组网机制形成的多层区块链系统,同一节点设备上运行有分别属于不同区块链网络的多个节点实例,比如该不同的区块链网络包括区块链主网及其管理的多个区块链子网。当然,其他组建区块链系统的方式也可能存在上述情况。例如,为了充分利用节点设备的资源,可在同一节点设备上部署多个分别属于不同区块链网络的节点实例,该多个不同区块链网络之间相互独立,不存在上述管理关系。日志(Log)作为区块链中的节点在运行时输出的参考信息,可供区块链网络的用户或者运维人员用于审计该区块链网络的运行状态,比如审计整个交易流程是否合理、是否按照预期执行等等。针对上述同一节点设备上运行有分别属于不同区块链网络的多个节点实例的情况,节点设备输出的日志涉及多个不同的区块链网络,这给管理日志以及后续对日志进行审计带来不便。本说明书提供的区块链日志生成方案则是对节点设备生成日志的方式予以改进,以解决上述技术问题。下面结合图5进行详细说明。
请参见图5,图5是一示例性实施例提供的一种区块链日志的生成方法的流程图。如图5所示,该方法应用于节点设备,该节点设备上运行有分别属于不同区块链网络的多个节点实例;该方法可以包括以下步骤:
步骤502,响应于任一节点实例需处理的区块链任务,确定与所述区块链任务匹配的目标线程。
在同一节点设备上运行有分别属于不同区块链网络的多个节点实例的应用场景下,每个节点实例用于形成相应的区块链网络中的区块链节点,那么从逻辑上来看该节点设备上运行有多个区块链节点,各个区块链节点需要分别执行自身所属区块链网络中的区块链任务。比如上述利用动态组网机制得到的区块链系统中的节点设备,该节点设备上运行的节点实例包括区块链主网中主网节点的主网实例和该区块链主网管理的区块链子网中子网节点的子网实例。
以上述图4为例,区块链主网subnet0上节点A所属的节点设备,还部署有区块链子网subnet1上的节点A1,以及区块链子网subnet2上的节点A2;那么,该节点设备需要处理subnet0、subnet1和subnet2上的区块链任务。
而对于区块链任务,则与区块链节点当前处理事项和数据相关。举例而言,某个区块链节点接收到了区块链客户端提交的交易,该区块链节点需要将接收到的交易发送给其他区块链节点进行共识,则该情况下区块链任务为发送区块链交易。或者,当前区块链节点正在执行共识区块链交易的操作,那么当前的区块链任务则是共识区块链交易。或者,在共识通过后,区块链节点需要执行共识通过的交易,那么此时区块链任务为执行区块链交易。可见,区块链任务涉及包括区块链节点执行的各类与所属区块链网络相关的操作,根据当前区块链节点执行的操作而定,本说明书并不对此进行限制。比如,还包括同步区块链的世界状态、成块上链、验证交易的签名等等。
对于各个节点实例,每个节点实例通过创建的线程来执行自身需要处理的区块链任务。日志作为区块链节点在运行(也即运行节点实例)时输出的参考信息,可供区块链网络的用户或者运维人员用于审计该区块链网络的运行状态,比如审计整个交易流程是否合理、是否按照预期执行等等。由于同一节点设备上运行有分别属于不同区块链网络的多个节点实例,该节点设备的各个线程在执行区块链任务时打印的日志也可能属于不同的区块链网络,即同一节点设备输出的日志涉及多个不同的区块链网络。
对此,可将节点设备的每一线程与相应节点实例所属区块链网络的网络标识绑定,使得每个线程在打印日志信息时在日志信息中添加所绑定的网络标识。如此,日志信息也随之与生成该日志信息的线程所属的区块链网络绑定,那么后续便可根据日志中包含的网络标识来确定该日志由哪个区块链网络产生。换言之,在本说明书的日志生成方案中,同一节点设备运行的多个节点实例分别对应于不同的线程,且每一线程与相应节点实例所属区块链网络的网络标识绑定。
步骤504,在所述目标线程为所述任一节点实例对应的线程的情况下,通过所述目标线程执行所述区块链任务,使目标线程在打印所述区块链任务对应的日志信息时添加自身绑定的第一网络标识。
需要注意的是,节点设备上运行有分别属于不同区块链网络的多个节点实例,且每个节点实例分别对应于不同的线程。由于需要节点实例对应的线程来执行区块链任务,同一节点设备中运行的不同节点实例可能分别使用相互独立的线程,也可能共享线程。换言之,对于与节点实例当前需要处理的区块链任务匹配的目标线程(即用于处理该区块链任务的线程),存在两种不同的情况:1)目标线程与该节点实例相对应(即属于该节点实例);2)目标线程与其他节点实例相对应(即不属于该节点实例)。下面分别对上述两种情况进行说明。
在目标线程为上述任一节点实例对应的线程的情况下,通过目标线程执行区块链任务,使目标线程在打印区块链任务对应的日志信息时添加自身绑定的第一网络标识。在该情况下,可理解为每个节点实例分别使用各自的线程来执行区块链任务,而同时每个线程均绑定有相应的网络标识,那么每个线程打印的日志则被添加有相应的网络标识,通过日志中包含的网络标识则可以确定出日志属于哪种区块链网络。
在目标线程为节点设备上的另一节点实例对应的线程的情况下,向目标线程提供任一节点实例所属区块链网络的第二网络标识,使目标线程执行区块链任务并在打印区块链任务对应的日志信息时添加第二网络标识。在该情况下,由于目标线程不属于上述需要处理区块链任务的节点实例,而是属于另一节点实例,需要由该另一节点实例共享给该节点实例使用。同时由于目标线程与该另一节点实例绑定,若目标线程仍然按照与自身绑定的网络标识来打印日志,则打印的日志中包含的网络标识表明该日志属于上述另一节点实例对应的区块链网络,但实际上是需要处理区块链任务的节点实例产生的日志,不属于上述另一节点实例。因此,针对该问题,应当向目标线程提供第二网络标识,使得目标线程依据第二网络标识来打印日志,而非第一网络标识。
为了便于理解,下面结合利用上述动态组网机制组建的区块链系统中的节点设备为例进行说明。区块链系统中的节点设备上运行有区块链主网中主网节点的主网实例和区块链主网管理的区块链子网中子网节点的子网实例,主网实例对应的主网线程与区块链主网的主网标识绑定,子网实例对应的子网线程与区块链子网的子网标识绑定。那么,该节点设备在运行主网实例以处理属于主网任务的区块链任务的情况下,确定与区块链任务匹配的目标主网线程,通过目标主网线程执行区块链任务,并确定与目标主网线程绑定的主网标识,以生成包含确定出的主网标识的主网日志;以及,在运行子网实例以处理属于子网任务的区块链任务的情况下,确定与区块链任务匹配的目标子网线程,通过目标子网线程执行区块链任务,并确定与目标子网线程绑定的子网标识,以生成包含确定出的子网标识的子网日志。
如前所述,运行节点实例以成为区块链网络中的节点来执行区块链任务,依赖于节点实例运行的组件,而这些组件则是由节点实例对应的线程来承载。也就是说,节点设备的多个节点实例分别运行有各自使用的用于处理区块链任务的组件,各组件分别由相应节点实例对应的线程所承载。那么,针对上述第一种情况,在确定与需处理的区块链任务匹配的目标线程时,可确定与上述任一节点实例运行的用于处理区块链任务的组件,以将承载确定出的组件的线程作为目标线程;或者,针对上述第二种情况,确定节点设备上的其他节点实例运行的用于处理区块链任务的组件,以将承载确定出的组件的线程作为目标线程。
进一步的,针对上述第二种情况,上述另一节点实例运行的组件中包含供上述任一节点实例调用的共享组件,那么在用于处理区块链任务的组件属于共享组件的情况下,在通过目标线程打印日志时,运行上述任一节点实例以调用该共享组件,并向共享组件提供第二网络标识,使得承载共享组件的线程(即目标线程)执行区块链任务并在打印区块链任务对应的日志信息时添加第二网络标识。
承接于上述动态组网机制的举例,主网实例和子网实例分别运行有各自使用的用于处理区块链任务的组件,那么节点设备可确定主网实例运行的用于处理区块链任务的主网组件,从而通过主网组件的线程执行区块链任务;以及,确定子网实例运行的用于处理区块链任务的子网组件,通过子网组件的线程执行区块链任务。
进一步的,主网实例运行的组件中包含供子网实例调用的共享组件,那么节点设备在运行子网实例以处理属于子网任务的区块链任务的情况下,若用于处理区块链任务的组件属于共享组件,则运行子网实例以调用共享组件,并向共享组件提供子网实例对应的子网标识,使得共享组件的线程执行区块链任务并生成包含子网实例对应的子网标识的子网日志。
例如,主网节点和子网节点之间共享的组件为业务网络组件(ServiceNetworkPlugin)、服务组件(ServicePlugin)、P2P组件(P2pPlugin)和区块链子网管理组件(SubnetPlugin)等等。而主网节点和子网节点分别独立使用的组件为缓存组件(CachePlugin)、验证组件(VerifyPlugin)、事件管理组件(EventPlugin)、共识组件(ConsensusPlugin)、同步组件(SyncPlugin)、执行组件(ExecutionPlugin)、区块管理组件(BlockPlugin)和存储组件(StoragePlugin)等等。
对于节点实例与网络标识之间的绑定,可通过以下方式将每一线程与相应节点实例所属区块链网络的网络标识绑定:在创建每一节点实例的过程中为该节点实例所属区块链网络分配网络标识,并将该节点实例对应的线程设置为与所分配的网络标识绑定。具体的,可通过threadlocal的方式将该节点实例对应的线程的标识设置为所分配的网络标识。
承接于上述动态组网机制的举例,可在创建主网实例的过程中为区块链主网分配主网标识,并将主网线程设置为与主网标识绑定。以及,在创建子网实例的过程中为区块链子网分配子网标识,并将子网线程设置为与子网标识绑定。具体而言,threadLocal(本地线程级)是一个线程内部的存储类,可以在指定线程内存储数据,数据存储以后,只有指定线程可以得到存储数据。那么,可通过threadlocal的方式将主网线程的标识设置为主网标识;以及,通过threadlocal的方式将子网线程的标识设置为子网标识。
举例而言,可设计日志级别包括Info、Debug、Warn、Error、Fatal等常用级别,并且为了链上审计更加规范,可定义日志的格式标准为:[当前时间戳][进程号/线程号][二进制程序名:日志级别][文件名:行号:方法名][子网标识]打印信息。
例如以下表示主网上的同步线程打印的Debug信息:[2021-07-16 05:28:03:865]
[p:104823/t:105085][mychain:debug][synchronizer.cpp:102:DoWork]
[subnet:00000000]synchronizer do work。
与此同时,针对区块链主网,在启动区块链主网时,可由主网实例设置主网ID(比如00000000),然后主网实例的各个组件在启动时获取该主网ID,通过threadlocal的方式设置主网实例的各个组件对应的线程的标识,则主网实例的各个组件在打印日志内容时将添加主网ID。同理,当启动一个主网管理的区块链子网时,该子网的子网实例给该子网分配一个唯一的子网ID(比如子网ID采用递增的方式,第一个子网的ID为00000001),然后子网实例的各个组件在启动时获取该子网ID,通过threadlocal的方式设置子网实例的各个组件对应的线程的标识,则子网实例的各个组件在打印日志内容时将添加子网ID。
而对于共享组件的处理,由于共享组件对应的线程属于主网实例,设置的网络ID也是主网ID,因此子网实例在调用主网的共享组件时,需向共享组件提供自身的子网ID以表示当前是哪个子网在调用。那么,共享组件在打印日志进行输出时,可在日志中添加子网实例提供的子网ID。
如前所述,节点设备输出的日志涉及多个不同的区块链网络,而基于上述生成日志的方式,节点设备输出的日志信息也与部署的各个区块链网络相对应,那么为了降低输出日志时节点设备的性能损失,可将节点设备中多个节点实例分别对应的日志信息输出至同一日志文件中。
仍以上述动态组网为例,如前所述,不同子网在正常运行期间都是作为一个独立的区块链网络来运行,但整体是作为一个进程在运行(所有节点实例都在同一进程内),为了减少日志输出的性能损失,可将主网和子网的日志统一输出至一个日志文件中。换言之,本说明书提供的线程级别的日志生成方案可在保证主网和子网的日志统一输出至一个日志文件的前提下,使得输出的日志信息仍然与部署的各个区块链网络相对应,从而便于日志管理以及后续利用日志信息中的网络标识来对相应区块链网络的运行状况进行审计。
比如,后续用户可通过区块链客户端发起针对日志信息的查询交易,那么节点设备可响应于针对日志信息的查询交易,在日志文件中查询添加有所述查询交易指示的网络标识的日志信息,以由查询方获取并进行审计。比如,用户需要将某个数据存证至指定的子网中,那么可根据该指定的子网的id在日志文件中查询相应的日志信息,从而根据该日志信息确定该数据是否确实存证至指定的子网,而非存证至其他的子网上。
或者,区块链系统的运维人员在需要对某交易或者组件进行查看时,可以通过grep等脚本命令对各个子网的日志进行查看,从而加快了不同子网下的审计过程。通过上述线程级别的日志生成方案,可以降低不同子网间日志的查看难度,也确保了链上审计过程的可用性。
基于可通过上述动态组网机制来形成多层区块链系统,可构建不同的区块链网络来存证不同类型的业务数据。在该场景下,不同的区块链网络之间存在交互的需求,从而通过跨链交互来实现一些复杂的业务。比如,区块链主网下的某一区块链子网在执行业务时,需要使用另一区块链子网维护的数据,那么此时该区块链子网作为源区块链子网,该另一区块链子网作为目的区块链子网,由源区块链子网向目的区块链子网请求获取业务的待处理数据以完成相关业务的执行。并且,源区块链子网中的源子网节点可收到目的区块链子网中的目的子网节点返回的跨子网应答,而在此过程中应当保证区块链子网之间跨链交互的合法性、有效性,从而防止节点作恶所带来的不利影响。下面对源子网节点接收到跨子网应答后进行审计的过程进行详细说明。
请参见图6,图6是一示例性实施例提供的一种跨链交互的审计方法的流程图。如图6所示,该方法可以包括以下步骤:
步骤602,所述源子网节点获取各个目的子网节点分别响应于所述跨子网请求返回的跨子网应答,根据所述源子网节点所处节点设备上部署的主网节点在第一区块高度所维护的目的区块链子网节点列表对获取到的跨子网应答进行验签及拜占庭容错校验,并将验签成功且通过拜占庭容错校验的标准跨子网应答和第一区块高度构造为重构应答。
在本说明书实施例中,源区块链子网中的至少一个源子网节点向目的区块链子网发起跨链请求(即跨子网请求),包括:源区块链子网中的一个源子网节点向目的区块链子网中的一个目的子网节点发送跨链请求,以使该目的子网节点将所述跨链请求进一步在目的区块链网络中广播从而使目的区块链子网中的各目的子网节点分别获得所述跨链请求,该跨链请求所要求的应答返回方为源区块链子网中的每一个源子网节点;或者,源区块链子网中的一个源子网节点向目的区块链子网中的所有目的子网节点分别发送跨链请求,该跨链请求所要求的应答返回方为源区块链子网中的每一个源子网节点;或者,源区块链子网中的每一个源子网节点向目的区块链子网中的一个目的子网节点发送跨链请求,以使该目的子网节点将所述跨链请求进一步在目的区块链网络中广播从而使目的区块链子网中的各目的子网节点分别获得所述跨链请求,每一跨链请求所要求的应答返回方为发送该跨链请求的源子网节点;或者,源区块链子网中的每一个源子网节点向目的区块链子网中的所有目的子网节点分别发送跨链请求,该跨链请求所要求的应答返回方为发送该跨链请求的源子网节点。
在本说明书实施例中,所述源区块链子网中的至少一个源子网节点向目的区块链子网发起跨链请求,包括:所述源区块链子网中的至少一个源子网节点在其维护的业务合约执行过程中触发生成针对所述目的区块链子网的跨链请求的情况下,调用跨子网合约将所述跨链请求发送至所述各目的子网节点。源子网节点可以在执行业务合约的执行过程中,因业务合约所产生的一个跨链需求,可以触发生成一个针对目的区块链子网的跨链请求,并在通过本地交易调用该源子网节点上部署的跨子网合约,跨子网合约接收到该跨链请求后进行进一步的封装并调用源子网节点所处节点设备上部署的通讯插件将该跨链请求发送至目的区块链子网中相应的源子网节点。
本说明书实施例所涉及的本地交易不参与区块链共识的交易,仅作为节点本地的内部调用媒介;本说明书实施例所涉及的跨子网合约维护有区块链主网所管理的各区块链子网的通讯地址,参与跨链消息的封装以及调用本地的通讯插件,以实现跨链交互的功能。
在本说明书实施例中,所述根据所述源子网节点所处节点设备上部署的主网节点在第一区块高度所维护的目的区块链子网节点列表对获取到的跨链应答进行验签及拜占庭容错校验,包括:
根据所述目的区块链子网节点列表中包含的所述各目的子网节点对应的公钥,对所述获取到的跨链应答对应的应答签名信息进行验签;在所述获取到的跨链应答中内容相同的跨链应答超过(大于)第一预设数量且对应的应答签名信息验签成功的情况下,将所述内容相同的跨链应答之一确定为验签成功且通过拜占庭容错校验的标准跨链应答。
各目的子网节点在接收到所述跨链请求后,不仅会返回针对所述跨链请求的跨链应答,还会基于自身的节点私钥生成该跨链应答对应的应答签名信息并返回源子网节点,因此源子网节点可以通过对任一跨链应答对应的应答签名信息进行验签来确定该任一跨链应答的有效性。本说明书实施例所涉及的目的区块链子网节点列表包含目的区块链子网的节点成员信息,例如节点ID、节点公钥、通讯地址等,该目的区块链子网节点列表被维护在区块链主网的子网管理合约的合约状态中,由于合约状态会随着链上时间(区块高度)的更新而发生变化,因此源子网节点在使用目的区块链子网节点列表进行验签和拜占庭容错校验之前,需要指定使用的目的区块链节点列表是哪一区块高度所锚定的,例如源子网节点可以首先确定第一区块高度,然后指定区块链主网于第一区块高度下所维护的目的区块链子网节点列表为后续所需使用进行验签和拜占庭容错校验的目的区块子网节点列表。另外,源子网节点获取区块链主网上维护的目的区块链子网节点列表是通过访问自身所处节点设备上部署的主网节点所实现。
在本说明书实施例中,第一预设数量通过所述目的区块链子网节点列表包含的所述目的区块链子网对应的第一节点总数所确定。具体而言,在针对跨链应答的拜占庭容错校验中,假设所述目的区块链子网对应的第一节点总数,即目的区块链子网中包含的所有目的子网节点的数量为3a(a为正整数),那么第一预设数量应为a。
在本说明书实施例中,第一区块高度为所述源子网节点对获取到的跨链应答进行验签及拜占庭容错校验时所述主网节点所维护的最新区块的区块高度;或者,第一区块高度为所述源子网节点按照预设的区块选取规则从所述主网节点所维护的区块中所选取的目标区块的区块高度。源子网节点在确定第一区块高度时,可以将其确定为源子网节点对获取到的跨链应答进行验签及拜占庭容错校验时所述主网节点所维护的最新区块的区块高度,这样可以确保源子网节点进行验签和拜占庭容错校验时所使用的是最新的目的区块链子网节点列表,但由于源子网节点获取区块链主网上维护的目的区块链子网节点列表的方式是通过访问自身所处节点设备上部署的主网节点所实现,而不同的源子网节点所处节点设备上部署的主网节点可能在最新区块高度上存在差异,因此对于不同的源子网节点而言,其所分别获取到的目的区块链子网节点列表可能并不一致,这导致源子网节点所进行的针对跨链应答的验证和的拜占庭容错校验的过程不可靠。
或者,源子网节点在确定第一区块高度时,可以按照预设的区块选取规则从所述主网节点所维护的区块中所选取的目标区块的区块高度,例如区块选取规则可以包括:在主网节点所维护的最新区块的共识时刻超过所述跨链请求的发送时刻的情况下,在主网节点所维护的区块中先选取出共识时刻不超过所述发送时刻的至少一个区块,再从所述至少一个区块中筛选出区块高度最高的区块作为目标区块。在本说明书实施例中,由于跨链请求的发送时刻是源区块链子网中各源子网节点均知晓的统一参数,而在主网节点所维护的最新区块的共识时刻超过所述跨链请求的发送时刻的情况下,就意味着共识时刻在所述发送时刻之前的区块就已经固定,区块链主网中的其他主网节点也维护有这些固定的区块,此时在这些固定的区块中基于统一的规则(例如选取区块高度最大的区块)所选取的目标区块也必定是一致的,因此,各源子网节点基于上述区块选取规则所选取得到的目标区块必定是一致,而第一区块高度为目标区块对应的区块高度,那么各源子网节点所确定的第一区块高度也就必定是一致的,从而可以克服不同源子网节点分别获取到的目的区块链子网节点列表不一致的问题。
步骤604,所述源子网节点在所述源区块链子网中广播所述重构应答,并接收所述源区块链子网中的其他子网节点广播的重构应答。
每个源子网节点在对自身所接收到的跨链应答进行验签和拜占庭容错校验后,均会确定得到一个标准跨链应答,并将所述标准跨链应答和第一区块高度构造为重构应答,再将所述重构应答在源区块链子网中广播,以使除自身外的每个源子网节点都能获取所述重构应答,同时,也会接受其他源子网节点广播的重构应答。为了使验证方能够确认重构应答的合法性,每个源子网节点在构造得到对应的重构应答后,还会基于自身的节点私钥对该重构应答进行签名得到对应的共识签名信息,并在广播该重构应答时同时将对应的共识签名信息进行广播。每个重构应答可以反映出生成它的源子网节点在对跨链应答进行验签和拜占庭容错校验是所使用的目的区块链子网节点列表是基于哪个区块高度获取的。
步骤606,所述源子网节点根据源区块链子网节点列表对获取到的重构应答进行验签及拜占庭容错校验,并将验签成功且通过拜占庭容错校验的重构应答确定为响应所述跨子网请求的认证应答。
源子网节点在接收到其他源子网节点广播的若干重构应答后,会在这些广播接受到的重构应答以及自身生成的重构应答中确定出认证应答。具体而言,所述源子网节点从获得的重构应答中选取通过拜占庭容错校验的重构应答,包括:
根据源区块链子网节点列表中包含的各源子网节点对应的公钥,对所述获得的重构应答对应的共识签名信息进行验签;在所述获得的重构应答中内容相同的重构应答超过第二预设数量且对应的共识签名信息验签成功的情况下,将所述内容相同的重构应答之一确定为所述认证应答。
本说明书实施例所涉及的源区块链子网节点列表包含源区块链子网的节点成员信息,例如节点ID、节点公钥、通讯地址等,该源区块链子网节点列表与目的区块子网节点列表类似,同样可以被维护在区块链主网的子网管理合约的合约状态中,因此源子网节点在使用源区块链子网节点列表进行验签和拜占庭容错校验之前,也需要指定使用的源区块链节点列表是哪一区块高度所锚定的,例如源子网节点可以首先确定第二区块高度,然后指定区块链主网于第二区块高度下所维护的源区块链子网节点列表为后续所需使用进行验签和拜占庭容错校验的源区块子网节点列表。类似的,源子网节点获取区块链主网上维护的源区块链子网节点列表也是通过访问自身所处节点设备上部署的主网节点所实现。源区块链子网节点列表还可以被维护在源子网节点自身维护的节点成员信息中,该节点成员信息同样会随着源区块链子网区块高度的更新而发生变化。
在本说明书实施例中,第二预设数量通过所述源区块链子网节点列表包含的所述源区块链子网对应的第二节点总数所确定。具体而言,在针对重构应答的拜占庭容错校验中,假设所述源区块链子网对应的第二节点总数,即源区块链子网中包含的所有源子网节点的数量为3b(b为正整数),那么第二预设数量应为b。
可选的,所述重构应答还包含第二区块高度,第二区块高度为所述源子网节点构造重构应答时所述源区块链子网或所述主网节点所维护的最新区块的区块高度,第二区块高度用于在审计过程中获取所述源区块链子网节点列表。在本说明书实施例中,重构应答不仅会包括用于获取目的区块链子网节点列表的第一区块高度,还包括用于获取源区块链子网节点列表的第二区块高度,由此源子网节点可以直接在未验签的情况下对获取得到的重构应答中的第二区块高度进行统计,将占多数且内容相同的第二区块高度确定为最终获取源区块链子网列表的区块高度。在第二区块高度为所述源子网节点构造重构应答时所述主网节点所维护的最新区块的区块高度的情况下,源子网节点就直接从自身所处节点设备上部署的主网节点获取该主网节点在第二区块高度下维护的源区块链子网节点列表;在第二区块高度为所述源子网节点构造重构应答时所述源区块链子网所维护的最新区块的区块高度的情况下,源子网节点获取自身在第二区块高度下维护的源区块链子网节点列表。
步骤608,所述源子网节点对所述跨子网请求、所述认证应答、验签成功且通过拜占庭容错校验的所有跨子网应答对应的应答签名信息以及验签成功且通过拜占庭容错校验的所有重构应答对应的共识签名信息进行存证。
源子网节点可以将所述跨链请求、所述认证应答、验签成功且通过拜占庭容错校验的所有跨链应答对应的应答签名信息以及验签成功且通过拜占庭容错校验的所有重构应答对应的共识签名信息存证至所处节点设备上部署的通讯插件、自身维护的跨子网合约、和/或触发调用跨子网合约进行跨链交互的业务合约中,以便后续提供至其他验证方对所述跨链请求的认证应答进行合法性验证。
在本说明书实施例中,源子网节点会基于各目的子网节点响应跨链请求返回的跨链应答进行验签和拜占庭校验,从而确保跨链应答可信,然而不同的源子网节点在进行验签和拜占庭校验时所使用的目的区块链子网节点列表可能有差异,这使得单个源子网节点无法确保自身进行验签和拜占庭校验的有效性,因此本说明书实施例进一步提出了源子网节点还会将确定得到的标准跨链应答与第一区块高度构成重构应答并在源子网内部进行基于拜占庭容错原则的共识校验,从而使得源子网能够最终确定出一个经过源区块链子网中所有源子网节点所共同认可的重构应答作为所述跨链请求的认证应答,从而解决了不同源子网节点所确定的目标区块链子网节点列表不一致的失信问题,在保障区块链去中心化特性下完成了可靠、可监管的跨链通信。同时,最终对所述跨链请求、所述认证应答、验签成功且通过拜占庭容错校验的所有跨链应答对应的应答签名信息以及验签成功且通过拜占庭容错校验的所有重构应答对应的共识签名信息进行存证,也使得后续能够向验证方提供针对某跨链请求的可信验证,确保跨链过程中全流程数据的可追踪、可查和可验证。
可选的,还包括:所述源子网节点调用所述跨子网合约中的回调方法,将所述认证应答返回至所述业务合约。在本说明书实施例中,跨子网合约在被业务合约调用并触发跨链交互的处理逻辑后,会在跨链请求对应的认证应答生成后,将所述认证应答基于所述跨子网合约的回调方法返回至所述业务合约,该回调方法可以采用前述的本地交易的方式,将携带有所述认证应答的本地交易返回至所述业务合约,从而使业务合约获取其跨链需求对应的数据。当然,所述源子网节点还可以调用所述跨子网合约中的回调方法,将验签成功且通过拜占庭容错校验的所有跨链应答对应的应答签名信息以及验签成功且通过拜占庭容错校验的所有重构应答对应的共识签名信息返回至所述业务合约,以使业务合约能够对跨链交互的全流程和认证应答进行合法性验证。
可选的,所述响应于所述跨链请求返回的跨链应答包括所述跨链请求的描述信息,其中,所述跨链请求的描述信息包括所述跨链请求的请求标识或所述跨链请求。在本说明书实施例中,为了使源子网节点接收到的跨链应答与跨链请求之间的关联可信,可以使目的子网节点在返回的跨链应答中携带所述跨链请求的描述信息或所述跨链请求本身。
进一步的,在所述跨链请求的描述信息为所述跨链请求的请求标识的情况下,所述方法还包括:所述源子网节点获取所述各目的子网节点分别响应于所述跨链请求返回的请求签名信息,所述请求签名信息由所述各目的子网节点针对包含所述请求标识的所述跨链请求分别进行签名得到;所述源子网节点根据所述目的区块链子网节点列表对所述请求签名信息进行验签及拜占庭容错校验,并在验签成功且通过拜占庭容错校验的情况下,确定所述跨链请求与所述请求标识之间的关联可信。如前所述,跨链应答中可以包括跨链请求的描述信息,在该描述信息本身与跨链请求具有强关联的情况下,例如描述信息即跨链请求或跨链请求对应的哈希值,那么跨链请求对应的描述信息与跨链请求之间的关联性就无需额外证明,但假如描述信息与跨链请求之间只有弱关联,例如跨链请求对应的描述信息为该跨链请求对应的请求标识(由源子网节点自行分配并维护请求标识与跨链请求之间的对应关系),那么此时跨链请求对应的描述信息与跨链请求之间的关联性就是不可靠的,需要额外提供信任凭证。在本说明书实施例中,目的子网节点响应于接收到的跨链请求中包含有请求标识,此时目的子网节点不仅会返回跨链应答,还会返回根据自身节点私钥对该跨链请求进行签名得到的请求签名信息,源子网节点在接收到各目的子网节点返回的若干请求签名信息后,可以根据目的区块链子网节点列表对所述若干请求签名信息进行验签,并在确定验签得到的内容相同的解密值(利用目的子网节点的节点公钥对请求签名信息进行解密得到的解密值)超过第一预设数量、且该解密值为所述跨链请求或所述跨链请求对应的哈希值的情况下,确定所述请求签名信息验签成功且通过拜占庭容错校验,由于包含有对应请求标识的跨链请求被各目的子网节点所认可,因此这种情况下可以确定所述跨链请求与所述请求标识之间的关联可信,从而可以使验证方能够基于请求签名信息检测出源子网节点维护有错误的请求标识与跨链请求之间的对应关系的情况,防止源区块链子网中存在节点叛变或出错所带来的失信问题。
在本说明书实施例中,源子网节点会基于各目的子网节点响应跨链请求返回的跨链应答进行验签和拜占庭校验,从而确保跨链应答可信,然而不同的源子网节点在进行验签和拜占庭校验时所使用的目的区块链子网节点列表可能有差异,这使得单个源子网节点无法确保自身进行验签和拜占庭校验的有效性,因此本说明书实施例进一步提出了源子网节点还会将确定得到的标准跨链应答与第一区块高度构成重构应答并在源子网内部进行基于拜占庭容错原则的共识校验,从而使得源子网能够最终确定出一个经过源区块链子网中所有源子网节点所共同认可的重构应答作为所述跨链请求的认证应答,从而解决了不同源子网节点所确定的目标区块链子网节点列表不一致的失信问题,在保障区块链去中心化特性下实现了可靠、可监管的跨链通信。同时,最终对所述跨链请求、所述认证应答、验签成功且通过拜占庭容错校验的所有跨链应答对应的应答签名信息以及验签成功且通过拜占庭容错校验的所有重构应答对应的共识签名信息进行存证,也使得后续能够向验证方提供针对某跨链请求的可信验证,确保跨链过程中全流程数据的可追踪、可查和可验证。
与上述方法实施例相对应,本说明书还提供了相应的装置实施例,其具体实施过程可参考上述方法实施例,在此不再赘述。
图7是一示例性实施例提供的一种设备的示意结构图。请参考图7,在硬件层面,该设备包括处理器702、内部总线704、网络接口706、内存708以及非易失性存储器710,当然还可能包括其他业务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器702从非易失性存储器710中读取对应的计算机程序到内存708中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图8,区块链日志的生成装置可以应用于如图7所示的设备中,以实现本说明书的技术方案。其中,该装置应用于节点设备,该节点设备上运行有分别属于不同区块链网络的多个节点实例,所述多个节点实例分别对应于不同的线程,且每一线程与相应节点实例所属区块链网络的网络标识绑定;该装置可以包括:
确定单元81,响应于任一节点实例需处理的区块链任务,确定与所述区块链任务匹配的目标线程;
执行单元82,在所述目标线程为所述任一节点实例对应的线程的情况下,通过所述目标线程执行所述区块链任务,使目标线程在打印所述区块链任务对应的日志信息时添加自身绑定的第一网络标识。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。

Claims (26)

1.一种区块链日志的生成方法,应用于节点设备,所述节点设备上运行有分别属于不同区块链网络的多个节点实例,所述多个节点实例分别对应于不同的线程,且每一线程与相应节点实例所属区块链网络的网络标识绑定;所述方法包括:
响应于任一节点实例需处理的区块链任务,确定与所述区块链任务匹配的目标线程;
在所述目标线程为所述任一节点实例对应的线程的情况下,通过所述目标线程执行所述区块链任务,使目标线程在打印所述区块链任务对应的日志信息时添加自身绑定的第一网络标识。
2.根据权利要求1所述的方法,还包括:
在所述目标线程为所述节点设备上的另一节点实例对应的线程的情况下,向所述目标线程提供所述任一节点实例所属区块链网络的第二网络标识,使所述目标线程执行所述区块链任务并在打印所述区块链任务对应的日志信息时添加第二网络标识。
3.根据权利要求2所述的方法,所述多个节点实例分别运行有各自使用的用于处理区块链任务的组件,各组件分别由相应节点实例对应的线程所承载;所述确定与所述区块链任务匹配的目标线程,包括:
确定所述任一节点实例运行的用于处理所述区块链任务的组件,以将承载确定出的组件的线程作为所述目标线程;或者,
确定所述节点设备上的其他节点实例运行的用于处理所述区块链任务的组件,以将承载确定出的组件的线程作为所述目标线程。
4.根据权利要求3所述的方法,所述另一节点实例运行的组件中包含供所述任一节点实例调用的共享组件;所述向所述目标线程提供所述任一节点实例所属区块链网络的第二网络标识,使所述目标线程执行所述区块链任务并在打印所述区块链任务对应的日志信息时添加第二网络标识,包括:
在用于处理所述区块链任务的组件属于所述共享组件的情况下,运行所述任一节点实例以调用所述共享组件,并向所述共享组件提供第二网络标识,使得承载所述共享组件的线程执行所述区块链任务并在打印所述区块链任务对应的日志信息时添加第二网络标识。
5.根据权利要求1所述的方法,
通过以下方式将每一线程与相应节点实例所属区块链网络的网络标识绑定:在创建每一节点实例的过程中为该节点实例所属区块链网络分配网络标识,并将该节点实例对应的线程设置为与所分配的网络标识绑定。
6.根据权利要求5所述的方法,所述将该节点实例对应的线程设置为与所分配的网络标识绑定,包括:
通过threadlocal的方式将该节点实例对应的线程的标识设置为所分配的网络标识。
7.根据权利要求1所述的方法,还包括:
将所述多个节点实例分别对应的日志信息输出至同一日志文件中。
8.根据权利要求7所述的方法,还包括:
响应于针对日志信息的查询交易,在所述日志文件中查询添加有所述查询交易指示的网络标识的日志信息,以由查询方获取并进行审计。
9.根据权利要求1所述的方法,所述节点设备上运行的节点实例包括区块链主网中主网节点的主网实例和所述区块链主网管理的区块链子网中子网节点的子网实例。
10.根据权利要求9所述的方法,还包括:
所述区块链主网管理的源区块链子网中在所述节点设备上运行的源子网节点向所述区块链主网管理的目的区块链子网发起跨子网请求,以使所述目的区块链子网中的各目的子网节点分别获得所述跨子网请求,所述跨子网请求由所述源区块链子网中的至少一个源子网节点向目的区块链子网发起;
所述源子网节点获取各个目的子网节点分别响应于所述跨子网请求返回的跨子网应答,根据所述源子网节点所处节点设备上部署的主网节点在第一区块高度所维护的目的区块链子网节点列表对获取到的跨子网应答进行验签及拜占庭容错校验,并将验签成功且通过拜占庭容错校验的标准跨子网应答和第一区块高度构造为重构应答;
所述源子网节点在所述源区块链子网中广播所述重构应答,并接收所述源区块链子网中的其他子网节点广播的重构应答;
所述源子网节点根据源区块链子网节点列表对获取到的重构应答进行验签及拜占庭容错校验,并将验签成功且通过拜占庭容错校验的重构应答确定为响应所述跨子网请求的认证应答;
所述源子网节点对所述跨子网请求、所述认证应答、验签成功且通过拜占庭容错校验的所有跨子网应答对应的应答签名信息以及验签成功且通过拜占庭容错校验的所有重构应答对应的共识签名信息进行存证。
11.根据权利要求10所述的方法,所述源区块链子网中的至少一个源子网节点在其维护的业务合约执行过程中触发生成针对所述目的区块链子网的跨子网请求的情况下,调用跨子网合约将所述跨子网请求发送至所述各目的子网节点。
12.根据权利要求11所述的方法,所述方法还包括:
调用所述跨子网合约中的回调方法,将所述认证应答返回至所述业务合约。
13.根据权利要求10所述的方法,第一区块高度为所述源子网节点对获取到的跨子网应答进行验签及拜占庭容错校验时所述主网节点所维护的最新区块的区块高度;或者,
第一区块高度为所述源子网节点按照预设的区块选取规则从所述主网节点所维护的区块中所选取的目标区块的区块高度。
14.根据权利要求10所述的方法,所述重构应答还包含第二区块高度,第二区块高度为所述源子网节点构造重构应答时所述源区块链子网或所述主网节点所维护的最新区块的区块高度,第二区块高度用于在审计过程中获取所述源区块链子网节点列表。
15.根据权利要求10所述的方法,所述响应于所述跨子网请求返回的跨子网应答包括所述跨子网请求的描述信息,其中,所述跨子网请求的描述信息包括所述跨子网请求的请求标识或所述跨子网请求。
16.根据权利要求15所述的方法,在所述跨子网请求的描述信息为所述跨子网请求的请求标识的情况下,所述方法还包括:
所述源子网节点获取所述各目的子网节点分别响应于所述跨子网请求返回的请求签名信息,所述请求签名信息由所述各目的子网节点针对包含所述请求标识的所述跨子网请求分别进行签名得到;
所述源子网节点根据所述目的区块链子网节点列表对所述请求签名信息进行验签及拜占庭容错校验,并在验签成功且通过拜占庭容错校验的情况下,确定所述跨子网请求与所述请求标识之间的关联可信。
17.根据权利要求9所述的方法,所述区块链主网管理的源区块链子网中源子网节点存证有所述源区块链子网向所述区块链主网管理的目的区块链子网中各目的子网节点发送的跨子网请求及其对应的认证应答、验签成功且通过拜占庭容错校验的所有跨子网应答对应的应答签名信息以及验签成功且通过拜占庭容错校验的所有重构应答对应的共识签名信息;其中,所述认证应答为所述源区块链子网中的源子网节点构造的所有重构应答中基于源区块链子网节点列表验签成功且通过拜占庭容错校验的重构应答;其中,任一源子网节点构造的重构应答包括:所述任一源子网节点选取的区块高度以及所述任一源子网节点根据自身所处节点设备上部署的主网节点在所述任一源子网节点选取的区块高度所维护的目的区块链子网节点列表对获取到的跨子网应答进行验签及拜占庭容错校验后得到的验签成功且通过拜占庭容错的标准跨子网应答,所述跨子网应答由所述各目的子网节点分别响应于所述跨子网请求返回至所述任一源子网节点;所述方法还包括:
所述源子网节点接收针对所述跨子网请求的审计请求;
响应于所述审计请求获取所述源子网节点存证的所述跨子网请求及其对应的所述认证应答、应答签名信息以及共识签名信息,所述认证应答包括第一区块高度和待验证跨子网应答;
其中,所述认证应答通过审计的条件包括:根据所述共识签名信息和源区块链子网节点列表确定所述认证应答验签成功且通过拜占庭容错校验,且根据所述应答签名信息和所述区块链主网在第一区块高度下维护的目的区块链子网节点列表确定所述待验证跨子网应答验签成功且通过拜占庭容错校验。
18.根据权利要求17所述的方法,所述任一源子网节点选取的区块高度为所述任一源子网节点对获取到的跨子网应答进行验签及拜占庭容错校验时所述主网节点所维护的最新区块的区块高度;或者,
所述任一源子网节点选取的区块高度为所述任一源子网节点按照预设的区块选取规则从所述主网节点所维护的区块中所选取的目标区块的区块高度。
19.根据权利要求17所述的方法,所述任一源子网节点构造的重构应答还包含:所述任一源子网节点构造重构应答时所述任一源子网节点或所述主网节点所维护的最新区块的区块高度;所述认证应答还包含第二区块高度,该第二区块高度用于在针对所述认证应答进行审计的过程中确定所述源区块链子网节点列表。
20.根据权利要求17所述的方法,还包括:
根据获取的所述跨子网请求及其对应的所述认证应答、应答签名信息以及共识签名信息验证所述认证应答的可信情况;或者,
将获取的所述跨子网请求及其对应的所述认证应答、应答签名信息以及共识签名信息提供给所述审计请求对应的发起方。
21.根据权利要求17所述的方法,所述跨子网应答包括所述跨子网请求的描述信息,其中,所述跨子网请求的描述信息包括所述跨子网请求的请求标识或所述跨子网请求。
22.根据权利要求21所述的方法,在所述跨子网请求的描述信息为所述跨子网请求的请求标识的情况下,所述跨子网请求包含所述请求标识,所述源子网节点还存证有所述请求标识以及由所述各目的子网节点分别对接收到的所述跨子网请求进行签名并返回至所述源子网节点的请求签名信息;
所述认证应答通过审计的条件还包括:根据所述请求签名信息和所述源区块链子网节点列表确定所述跨子网请求验签成功且通过拜占庭容错校验。
23.根据权利要求17所述的方法,所述源子网节点所处的节点设备上还部署有所述区块链主网中的主网节点,所述方法还包括:
从所述源子网节点所处的节点设备上部署的主网节点处获取所述目的区块链子网节点列表。
24.一种区块链日志的生成装置,应用于节点设备,所述节点设备上运行有分别属于不同区块链网络的多个节点实例,所述多个节点实例分别对应于不同的线程,且每一线程与相应节点实例所属区块链网络的网络标识绑定;所述装置包括:
确定单元,响应于任一节点实例需处理的区块链任务,确定与所述区块链任务匹配的目标线程;
执行单元,在所述目标线程为所述任一节点实例对应的线程的情况下,通过所述目标线程执行所述区块链任务,使目标线程在打印所述区块链任务对应的日志信息时添加自身绑定的第一网络标识。
25.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-23中任一项所述的方法。
26.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1-23中任一项所述方法的步骤。
CN202111670011.7A 2021-12-31 2021-12-31 区块链日志的生成方法及装置、电子设备、存储介质 Active CN114363162B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111670011.7A CN114363162B (zh) 2021-12-31 2021-12-31 区块链日志的生成方法及装置、电子设备、存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111670011.7A CN114363162B (zh) 2021-12-31 2021-12-31 区块链日志的生成方法及装置、电子设备、存储介质

Publications (2)

Publication Number Publication Date
CN114363162A CN114363162A (zh) 2022-04-15
CN114363162B true CN114363162B (zh) 2024-05-03

Family

ID=81105346

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111670011.7A Active CN114363162B (zh) 2021-12-31 2021-12-31 区块链日志的生成方法及装置、电子设备、存储介质

Country Status (1)

Country Link
CN (1) CN114363162B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115102962A (zh) * 2022-06-22 2022-09-23 青岛中科曙光科技服务有限公司 集群管理方法、装置、计算机设备和存储介质
CN117955742B (zh) * 2024-03-26 2024-06-14 杭州高新区(滨江)区块链与数据安全研究院 数据跨链交互的验证方法、装置、挑战节点及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110633309A (zh) * 2019-08-30 2019-12-31 阿里巴巴集团控股有限公司 一种区块链交易处理方法及装置
CN111478962A (zh) * 2020-04-03 2020-07-31 广东奥维信息科技有限公司 一种区块链可信日志存储系统
WO2020216077A1 (zh) * 2019-04-26 2020-10-29 深圳前海微众银行股份有限公司 一种区块链事件去重方法、装置、计算机设备及存储介质
WO2021027956A1 (zh) * 2019-08-15 2021-02-18 深圳前海微众银行股份有限公司 一种基于区块链系统的交易处理方法及装置
CN112765684A (zh) * 2021-04-12 2021-05-07 腾讯科技(深圳)有限公司 区块链节点终端管理方法、装置、设备及存储介质
CN113626399A (zh) * 2021-08-17 2021-11-09 平安普惠企业管理有限公司 数据同步方法、装置、服务器及存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10713654B2 (en) * 2016-01-21 2020-07-14 International Business Machines Corporation Enterprise blockchains and transactional systems
US11803461B2 (en) * 2019-10-30 2023-10-31 Hewlett Packard Enterprise Development Lp Validation of log files using blockchain system

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020216077A1 (zh) * 2019-04-26 2020-10-29 深圳前海微众银行股份有限公司 一种区块链事件去重方法、装置、计算机设备及存储介质
WO2021027956A1 (zh) * 2019-08-15 2021-02-18 深圳前海微众银行股份有限公司 一种基于区块链系统的交易处理方法及装置
CN110633309A (zh) * 2019-08-30 2019-12-31 阿里巴巴集团控股有限公司 一种区块链交易处理方法及装置
CN111478962A (zh) * 2020-04-03 2020-07-31 广东奥维信息科技有限公司 一种区块链可信日志存储系统
CN112765684A (zh) * 2021-04-12 2021-05-07 腾讯科技(深圳)有限公司 区块链节点终端管理方法、装置、设备及存储介质
CN113626399A (zh) * 2021-08-17 2021-11-09 平安普惠企业管理有限公司 数据同步方法、装置、服务器及存储介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
SDNLog-Foren: Ensuring the Integrity and Tamper Resistance of Log Files for SDN Forensics using Blockchain;Phan The Duy等;《2019 6th NAFOSTED Conference on Information and Computer Science (NICS)》;全文 *
区块链全局账本数据的拆分技术研究;于雷;金岩;;高技术通讯;20171215(第Z2期);全文 *
基于区块链的RFID大数据安全溯源模型;刘耀宗;刘云恒;;计算机科学(第S2期);全文 *

Also Published As

Publication number Publication date
CN114363162A (zh) 2022-04-15

Similar Documents

Publication Publication Date Title
CN113067904B (zh) 组建区块链子网的方法和区块链系统
CN114363162B (zh) 区块链日志的生成方法及装置、电子设备、存储介质
CN113067895B (zh) 组建区块链子网的方法和区块链系统
CN113067897B (zh) 跨链交互方法及装置
CN113067901B (zh) 区块链子网的创建方法
CN113923232B (zh) 区块链子网的信息同步方法及装置
CN113055190B (zh) 针对客户端的访问控制方法
WO2022252996A1 (zh) 为业务流程合约调度计算服务的方法
CN113259458B (zh) 一种启动/关闭区块链节点服务的方法和装置
CN113259464B (zh) 组建区块链子网的方法和区块链系统
CN113886495B (zh) 验证区块链数据的方法、装置、电子设备和存储介质
CN113067899B (zh) 一种启动/关闭区块链节点服务的方法和装置
CN113259117B (zh) 同步节点信息列表的方法
CN113067896B (zh) 区块链子网中加入节点的方法和区块链系统
CN113259120B (zh) 同步节点信息列表的方法
CN113067914B (zh) 一种分配子网标识的方法、装置、电子设备和存储介质
CN113259118B (zh) 同步节点信息列表的方法
CN113326290B (zh) 跨网查询控制方法
CN113259454B (zh) 跨链交互方法及装置
CN114374699A (zh) 跨链交互方法和跨链交互的审计方法
CN113259466B (zh) 区块链子网运行状态的控制方法和区块链系统
CN113259465B (zh) 基于链外的计算服务的业务执行方法
CN113259459B (zh) 区块链子网运行状态的控制方法和区块链系统
CN114095507B (zh) 跨链交互方法和区块链系统
CN114363349B (zh) 区块链子网的启动方法及装置

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