组建区块链子网的方法和区块链系统与流程

文档序号:25730664发布日期:2021-07-02 21:18阅读:129来源:国知局
组建区块链子网的方法和区块链系统与流程

本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种组建区块链子网的方法和区块链系统。



背景技术:

区块链技术构建在传输网络(例如点对点网络)之上。区块链网络中的节点利用链式数据结构来验证与存储数据,并采用分布式节点共识算法来生成和更新数据。在一些区块链网络中,部分节点有时存在实现小范围交易的需求,以避免其他节点获得这些交易及其相关数据。



技术实现要素:

有鉴于此,本说明书一个或多个实施例提供一种组建区块链子网的方法和区块链系统。

为实现上述目的,本说明书一个或多个实施例提供技术方案如下:

根据本说明书一个或多个实施例的第一方面,提出了一种组建区块链子网的方法,包括:

区块链主网中的各主网节点分别获取并执行用于组建区块链子网的交易,所述交易包含子网类型信息,所述子网类型信息用于表明所述区块链子网是否支持可信执行环境;

在所述子网类型信息为隐私类型的情况下,部署所述区块链主网中主网节点的节点设备启动属于所述区块链子网的第一子网节点,并通过自身装配的可信硬件为第一子网节点创建子网可信执行环境。

根据本说明书一个或多个实施例的第二方面,提出了一种组建区块链子网的方法,包括:

区块链主网中的主网节点获取并执行用于组建区块链子网的交易,所述交易包含子网类型信息,所述子网类型信息用于表明所述区块链子网是否支持可信执行环境;

在所述子网类型信息为隐私类型的情况下,部署所述主网节点的节点设备启动属于所述区块链子网的第一子网节点,并通过自身装配的可信硬件为第一子网节点创建子网可信执行环境。

根据本说明书一个或多个实施例的第三方面,提出了一种区块链系统,包括:

区块链主网中的各主网节点,用于分别获取和执行用于组建区块链子网的交易,所述交易包含子网类型信息,所述子网类型信息用于表明所述区块链子网是否支持可信执行环境;

在所述子网类型信息为隐私类型的情况下,部署所述区块链主网中主网节点的节点设备启动属于所述区块链子网的第一子网节点,并通过自身装配的可信硬件为第一子网节点创建子网可信执行环境。

附图说明

图1是一示例性实施例提供的一种创建智能合约的示意图。

图2是一示例性实施例提供的一种调用智能合约的示意图。

图3是一示例性实施例提供的一种创建和调用智能合约的示意图。

图4是一示例性实施例提供的一种基于隐私区块链的隐私保护方法的流程图。

图5是一示例性实施例提供的一种组建区块链子网的方法的流程图。

图6是一示例性实施例提供的一种基于区块链主网组建区块链子网的示意图。

图7是一示例性实施例提供的另一种组建区块链子网的方法的流程图。

图8是一示例性实施例提供的一种区块链系统的结构示意图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。

需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。

区块链一般被划分为三种类型:公有链(publicblockchain),私有链(privateblockchain)和联盟链(consortiumblockchain)。此外,还有多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式。其中去中心化程度最高的是公有链。公有链以比特币、以太坊为代表,加入公有链的参与者可以读取链上的数据记录、参与交易以及竞争新区块的记账权等。而且,各参与者(即节点)可自由加入以及退出网络,并进行相关操作。私有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。简单来说,私有链可以为一个弱中心化系统,参与节点具有严格限制且少。这种类型的区块链更适合于特定机构内部使用。联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;参与者通过授权加入网络并组成利益相关联盟,共同维护区块链运行。

不论是公有链、私有链还是联盟链,都可能提供智能合约的功能。区块链上的智能合约是在区块链系统上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。

以以太坊为例,支持用户在以太坊网络中创建并调用一些复杂的逻辑,这是以太坊区别于比特币区块链技术的最大挑战。以太坊作为一个可编程区块链的核心是以太坊虚拟机(evm),每个以太坊节点都可以运行evm。evm是一个图灵完备的虚拟机,这意味着可以通过它实现各种复杂的逻辑。用户在以太坊中发布和调用智能合约就是在evm上运行的。实际上,虚拟机直接运行的是虚拟机代码(虚拟机字节码,下简称“字节码”)。部署在区块链上的智能合约可以是字节码的形式。

例如图1所示,bob将一个包含创建智能合约信息的交易发送到以太坊网络后,节点1的evm可以执行这个交易并生成对应的合约实例。图1中的“0x6f8ae93…”代表了这个合约的地址,交易的data字段保存的可以是字节码,交易的to字段为空。节点间通过共识机制达成一致后,这个合约成功创建,并且可以在后续过程中被调用。合约创建后,区块链上出现一个与该智能合约对应的合约账户,并拥有一个特定的地址,合约代码将保存在该合约账户中。智能合约的行为由合约代码控制。换句话说,智能合约使得区块链上产生包含合约代码和账户存储(storage)的虚拟账户。

如图2所示,仍以以太坊为例,bob将一个用于调用智能合约的交易发送到以太坊网络后,某一节点的evm可以执行这个交易并生成对应的合约实例。图2中交易的from字段是交易发起方(即bob)的账户的地址,to字段中的“0x6f8ae93…”代表了被调用的智能合约的地址,value字段在以太坊中是以太币的值,交易的data字段保存的调用智能合约的方法和参数。调用智能合约后,balance的值可能改变。后续,某个客户端可以通过某一区块链节点(例如图2中的节点6)查看balance的当前值。智能合约以规定的方式在区块链网络中每个节点独立的执行,所有执行记录和数据都保存在区块链上,所以当交易完成后,区块链上就保存了无法篡改、不会丢失的交易凭证。

创建智能合约和调用智能合约的示意图如图3所示。以太坊中要创建一个智能合约,需要经过编写智能合约、编译成字节码、部署到区块链等过程。以太坊中调用智能合约,是发起一笔指向智能合约地址的交易,智能合约代码分布式的运行在以太坊网络中每个节点的虚拟机中。

需要说明的是,除了可以由用户创建智能合约,也可以在创世块中由系统设置智能合约。这类合约一般称为创世合约。一般的,创世合约中可以设置一些区块链网络的数据结构、参数、属性和方法。此外,具有系统管理员权限的账户可以创建系统级的合约,或者修改系统级的合约(简称为系统合约)。另外除了以太坊中的evm外,不同的区块链网络还可能采用各种的虚拟机,这里并不限定。

区块链网络中的节点在执行调用智能合约的交易后,会生成相应的收据(receipt),以用于记录与执行该智能合约相关的信息。这样,可以通过查询交易的收据来获得合约执行结果的相关信息。合约执行结果可以表现为收据中的事件(event)。消息机制可以通过收据中的事件实现消息传递,以触发区块链节点执行相应的处理。事件的结构譬如可以为:

event:

[topic][data]

[topic][data]

......

在上述示例中,事件的数量可以为一个或多个;其中,每个事件分别包括主题(topic)和数据(data)等字段。区块链节点可以通过监听事件的topic,从而在监听到预定义的topic的情况下,执行预设处理,或者从相应事件的data字段读取相关内容,以及可以基于读取的内容执行预设处理。

上述的事件机制中,相当于在监听方(比如存在监听需求的用户)处存在具有监听功能的客户端,譬如该客户端上运行了用于实现监听功能的sdk等,由该客户端对区块链节点产生的事件进行监听,而区块链节点只需要正常生成收据即可。除了上述的事件机制之外,还可以通过其他方式实现交易信息的透出。例如,可以通过在区块链节点运行的区块链平台代码中嵌入监听代码,使得该监听代码可以监听区块链交易的交易内容、智能合约的合约状态、合约产生的收据等其中的一种或多种数据,并将监听到的数据发送至预定义的监听方。由于监听代码部署于区块链平台代码中,而非监听方的客户端处,因而相比于事件机制而言,这种基于监听代码的实现方式相对更加的主动。其中,上述的监听代码可以由区块链平台的开发人员在开发过程中加入区块链平台代码,也可以由监听方基于自身的需求而嵌入,本说明书并不对此进行限制。

区块链技术区别于传统技术的去中心化特点之一,就是在各个节点上进行记账,或者称为分布式记账,而不是传统的集中式记账。区块链系统要成为一个难以攻破的、公开的、不可篡改数据记录的去中心化诚实可信系统,需要在尽可能短的时间内做到分布式数据记录的安全、明确及不可逆。不同类型的区块链网络中,为了在各个记录账本的节点中保持账本的一致,通常采用共识算法来保证,即前述提到的共识机制。例如,区块链节点之间可以实现区块粒度的共识机制,比如在节点(例如某个独特的节点)产生一个区块后,如果产生的这个区块得到其它节点的认可,其它节点记录相同的区块。再例如,区块链节点之间可以实现交易粒度的共识机制,比如在节点(例如某个独特的节点)获取一笔区块链交易后,如果这笔区块链交易得到其他节点的认可,认可该区块链交易的各个节点可以分别将该区块链交易添加至自身维护的最新区块中,并且最终能够确保各个节点产生相同的最新区块。共识机制是区块链节点就区块信息(或称区块数据)达成全网一致共识的机制,可以保证最新区块被准确添加至区块链。当前主流的共识机制包括:工作量证明(proofofwork,pow)、股权证明(proofofstake,pos)、委任权益证明(delegatedproofofstake,dpos)、实用拜占庭容错(practicalbyzantinefaulttolerance,pbft)算法,honeybadgerbft算法等。

区块链作为分布式一致性的帐本,参与记账的联盟成员(以联盟链为例)都有一份各自独立的帐本,而帐本上的数据对联盟成员来说均是可见的。可见,区块链平台技术上面临隐私和性能的挑战,往往这两个挑战很难同时解决。大多解决方案都是通过损失性能换取隐私,或者不大考虑隐私去追求性能。常见的解决隐私问题的加密技术,如同态加密(homomorphicencryption)和零知识证明(zero-knowledgeproof)等复杂度高,通用性差,而且还可能带来严重的性能损失。

tee(trustedexecutionenvironment,可信执行环境)是另一种解决隐私问题的方式。tee是基于cpu硬件的安全扩展,且与外部完全隔离的可信执行环境。tee最早是由globalplatform提出的概念,用于解决移动设备上资源的安全隔离,平行于操作系统为应用程序提供可信安全的执行环境。arm的trustzone技术最早实现了真正商用的tee技术。伴随着互联网的高速发展,安全的需求越来越高,不仅限于移动设备,云端设备,数据中心都对tee提出了更多的需求。tee的概念也得到了高速的发展和扩充。现在所说的tee相比与最初提出的概念已经是更加广义的tee。例如,服务器芯片厂商intel,amd等都先后推出了硬件辅助的tee并丰富了tee的概念和特性,在工业界得到了广泛的认可。现在提起的tee通常更多指这类硬件辅助的tee技术。不同于移动端,云端访问需要远程访问,终端用户对硬件平台不可见,因此使用tee的第一步就是要确认tee的真实可信。因此可针对tee技术引入远程证明机制,由硬件厂商(主要是cpu厂商)背书并通过数字签名技术确保用户对tee状态可验证。同时仅仅是安全的资源隔离也无法满足的安全需求,进一步的数据隐私保护也被提出。包括intelsgx,amdsev在内的商用tee也都提供了内存加密技术,将可信硬件限定在cpu内部,总线和内存的数据均是密文防止恶意用户进行窥探。例如,英特尔的软件保护扩展(sgx)等tee技术隔离了代码执行、远程证明、安全配置、数据的安全存储以及用于执行代码的可信路径。在tee中运行的应用程序受到安全保护,几乎不可能被第三方访问。tee可以起到硬件中的黑箱作用,在tee中执行的代码和数据操作系统层都无法偷窥,只有代码中预先定义的接口才能对其进行操作。在效率方面,由于tee的黑箱性质,在tee中进行运算的是明文数据,而不是同态加密中的复杂密码学运算,计算过程效率没有损失,因此与tee相结合可以在性能损失较小的前提下很大程度上提升区块链的安全性和隐私性。目前工业界十分关注tee的方案,几乎所有主流的芯片和软件联盟都有自己的tee解决方案,包括软件方面的tpm(trustedplatformmodule,可信赖平台模块)以及硬件方面的intelsgx(softwareguardextensions,软件保护扩展)、armtrustzone(信任区)和amdpsp(platformsecurityprocessor,平台安全处理器)。

以intelsgx(以下简称sgx)技术为例。区块链节点可以基于sgx技术创建enclave(围圈或飞地),以作为用于执行区块链交易的tee。其中,区块链节点利用cpu中新增的处理器指令,在内存中可以分配一部分区域epc(enclavepagecache,围圈页面缓存或飞地页面缓存),以用于驻留上述的enclave。上述epc对应的内存区域被cpu内部的内存加密引擎mee(memoryencryptionengine)加密,该内存区域中的内容(enclave中的代码和数据)只有在cpu内核中才能够被解密,且用于加解密的密钥只有在epc启动时生成并存储在cpu中。可见,enclave的安全边界只包含其自身和cpu,无论是特权或非特权软件都无法访问enclave,即便是操作系统管理员和vmm(virtualmachinemonitor,虚拟机监视器;或称为,hypervisor)也无法影响enclave中的代码和数据,因而具有极高的安全性,并且在上述安全性保障的前提下,cpu能够在enclave中对明文形式的区块链交易进行处理,具有极高的运算效率,从而兼顾了数据安全性和计算效率。

一般的,提交至区块链的交易为明文形式,执行交易后生成的收据数据也以明文形式进行存储,那么联盟成员都可以看到交易和收据数据所含的上述各个收据字段的内容,无隐私保护的设置和能力。对此,可将区块链与tee相结合以使得该区块链支持tee,从而实现隐私保护。比如,向区块链提交的交易为密文形式,仅在区块链节点的tee内为明文形式,从而在tee内执行交易;进一步的,在tee内对执行交易生成的收据数据进行加密,然后再将密文形式的收据数据输出至tee外。

举例而言,图4是一示例性实施例提供的一种基于隐私区块链的隐私保护方法的流程图。如图4所示,保护用户隐私的过程可包括如下步骤:

步骤402,用户a创建一笔调用业务合约的交易,并将创建好的交易提交至区块链节点。

用户a可通过创建一笔交易(包含所调用智能合约的账户地址)来调用部署于隐私区块链上的智能合约(即业务合约),以使得区块链节点执行业务合约来完成相应的业务。出于隐私保护,用户a可采用数字信封加密的方式对创建好的交易进行加密,该数字信封加密结合对称加密算法和非对称加密算法。具体而言,采用对称加密算法加密交易内容(即采用自身使用的对称密钥对交易内容进行加密),再采用非对称加密算法的公钥(区块链节点的公钥)对该对称密钥进行加密。

与此同时,隐私区块链支持tee,即隐私区块链中的区块链节点维护有tee。当然,隐私区块链可同时支持明文形式的交易(明文交易)和密文形式的交易(密文交易)。比如,隐私区块链中的区块链节点在tee外的常规环境执行明文交易,在tee内执行密文交易。

步骤404,隐私区块链中的区块链节点执行业务合约。

隐私区块链中的区块链节点在接收到被加密的交易后,将该交易读入tee内部,先采用该非对称加密算法的私钥(区块链节点的私钥)进行解密得到对称密钥,再采用解密得到的对称密钥对交易进行解密得到交易内容,进而响应于该交易,在tee内部执行业务合约的业务代码。

步骤406,区块链节点存储与交易相关的隐私数据。

区块链节点可将交易(被采用数字信封的形式进行加密)存证至区块链。同时,区块链节点在tee内执行交易后,可进一步在tee内对执行交易得到的合约状态(即上述合约涉及到的世界状态)和/或收据数据等隐私数据进行加密,然后将加密后的隐私数据从tee输出并存储。

由于区块链网络的去中心化特性,使得区块链网络中的所有区块链节点均会维护相同的区块数据,无法满足部分节点的特殊需求。以联盟链为例,所有联盟成员(即联盟内的节点成员)可以组成一区块链网络,所有联盟成员在该区块链网络中分别存在对应的区块链节点,并可以通过对应的区块链节点获得该区块链网络上发生的所有交易和相关数据。但在一些情况下,可能存在部分联盟成员希望完成一些具有保密需求的交易,这些联盟成员既希望这些交易能够在区块链上存证或借助于区块链技术的其他优势,又能够避免其他联盟成员查看到这些交易和相关数据。虽然这些联盟成员可以额外组建一新的区块链网络,其建立方式与上述包含所有联盟成员的区块链网络类似,但是从头开始建立一条新的区块链网络需要消耗大量的资源,且无论是该区块链网络的建立过程或是建成后的配置过程都非常耗时。联盟成员之间的需求往往是临时的或者具有一定的时效性,使得新建的区块链网络很快就会由于需求消失而失去存在的意义,从而进一步增加了上述区块链网络的建链成本。而联盟成员之间的需求经常会变化,而每一需求所对应的联盟成员也往往不同,因而每当联盟成员发生变化时就可能需要组建一新的区块链网络,从而造成资源和时间的大量浪费。

本说明书可以将已组建的区块链网络作为区块链主网,并在该区块链主网的基础上组建区块链子网。并且,可根据是否存在隐私保护的需求来相应地组建隐私区块链子网(支持tee)和非隐私区块链子网。那么,在诸如上述的联盟链场景下,联盟成员可以在已经参与区块链主网的情况下,基于自身需求而在区块链主网的基础上组建所需的区块链子网。由于区块链子网是在区块链主网的基础上所建立,使得区块链子网的组建过程相比于完全独立地组建一条区块链网络,所消耗的资源和所需的耗时等都极大地降低,灵活性极高。以下结合图5对本说明书的区块链子网的组建方案进行说明。

请参见图5,图5是一示例性实施例提供的一种组建区块链子网的方法的流程图。如图5所示,该方法可以包括以下步骤:

步骤502,区块链主网中的各主网节点分别获取并执行用于组建区块链子网的交易,所述交易包含子网类型信息,所述子网类型信息用于表明所述区块链子网是否支持可信执行环境。

以联盟链为例,联盟链成员参与的业务并非都需要隐私保护的功能。比如,支付转账等业务涉及用户隐私,需要隐私保护功能;而类似于捐款投票等需具备公开特点的业务,则不需要隐私保护功能。因此,针对需要隐私保护功能的业务,可在区块链主网的基础上组建支持tee的区块链子网(以下称为隐私子网)以实施该业务;而针对无需隐私保护功能的业务,可在区块链主网的基础上组建不支持tee的区块链子网(以下称为非隐私子网)以实施该业务。由于存在在区块链主网的基础上组建支持tee的区块链子网的需求,部署区块链主网各个主网节点的节点设备均需配置有可信硬件以用于创建tee。通过上述根据隐私保护需求灵活组建隐私子网和非隐私子网的方式,可实现“业务-区块链子网tee属性(是否支持tee)”的搭配,节约节点设备在硬件上用于在tee内运行程序的空间,从而有效节约tee资源。

以sgx为例,sgx1.0的enclave可用内存空间为128m,程序可用空间为93m,如果一个进程启用多个enclave实例,则可用内存存在限制。当某一区块链子网无需隐私保护功能时,若组建该区块链子网的过程中为该区块链子网的区块链节点部署tee,则导致浪费了相应节点设备的tee资源。因此,支持“业务-子网tee属性”的搭配可有效节约tee资源。具体而言,本说明书中通过在组建区块链子网时,先明确待组建的区块链子网的tee属性,也即是否需要具备隐私保护功能。然后,针对需具备隐私保护功能的区块链子网,相应的节点设备在启动属于该区块链子网的子网节点时,为该子网节点创建tee;针对无需具备隐私保护功能的区块链子网,相应的节点设备在启动属于该区块链子网的子网节点时,则无需为该子网节点创建tee。基于上述支持“业务-子网tee属性”搭配的方式,可充分利用节点设备配置的可信硬件的tee资源,将该tee资源均用于部署支持tee的子网节点,避免该tee资源被无需支持tee的子网节点占用。

可通过向区块链主网提交用于组建区块链子网的交易,以实现在区块链主网的基础上组建区块链子网。其中,可在交易中添加子网类型信息,以指示待组建的区块链子网是否支持tee。当子网类型信息为隐私类型时,待组建的区块链子网为隐私子网;当子网类型信息为非隐私类型时,待组建的区块链子网为非隐私子网。

用于组建区块链子网的交易可由区块链主网的管理员发起,即仅允许管理员在区块链主网的基础上组建区块链子网,而避免将区块链子网的组建权限开放给普通用户,以防止由此导致的安全性问题。在一些情况下,也可以允许区块链主网的普通用户发起上述组建区块链子网的交易,以满足普通用户的组网需求,使得普通用户能够在管理员不便于发起交易的情况下依然能够快捷地组建区块链子网。

以图6所示为例,区块链主网为subnet0,该subnet0包含的区块链节点(主网节点)为nodea、nodeb、nodec、noded和nodee等,并且部署上述主网节点的节点设备均配置有用于创建tee的可信硬件。假定nodea、nodeb、nodec和noded分别对应的节点成员希望组建一隐私子网subnet1(支持tee):如果nodea为管理员且仅允许管理员发起组建区块链子网的交易,那么可由nodea向subnet0发起上述组建区块链子网的交易;如果nodee为管理员且仅允许管理员发起组建区块链子网的交易,那么nodea~noded需要向nodee进行请求,使得nodee向subnet0发起上述组建区块链子网的交易;如果nodee为管理员但允许普通用户发起组建区块链子网的交易,那么nodea~nodee均可以向subnet0发起上述组建区块链子网的交易。当然,不论是管理员或者普通用户,发起组建区块链子网的交易的区块链节点对应的节点成员并不一定参与所组建的区块链子网,比如虽然最终由nodea、nodeb、nodec和noded分别对应的节点成员组建区块链子网,但可由nodee向subnet0发起上述组建区块链子网的交易,而并不一定由nodea~noded来发起该组建区块链子网的交易。类似的,nodea、nodeb、nodec和nodee分别对应的节点成员还可组建一非隐私子网subnet2(不支持tee)。

在区块链主网的基础上组建区块链子网时,容易理解的是,会使得该区块链子网与区块链主网之间存在逻辑上的层次关系。比如在图6所示的subnet0上组建区块链子网subnet1时,可以认为subnet0处于第一层、subnet1处于第二层。在一种情况下,本说明书中的区块链主网可以为底层区块链网络,即区块链主网并非在其他区块链网络的基础上组建的区块链子网,比如图6中的subnet0可以认为属于底层区块链网络类型的区块链主网。在另一种情况下,本说明书中的区块链主网可以为其他区块链网络的子网,比如可以在图6中subnet1的基础上进一步组建另一区块链子网,此时可以认为subnet1为该区块链子网对应的区块链主网,而这并不影响该subnet1同时属于subnet0上创建的区块链子网。可见,区块链主网与区块链子网实际上是相对概念,同一区块链网络在一些情况下可以为区块链主网、另一些情况下可以为区块链子网。

步骤504,在所述子网类型信息为隐私类型的情况下,部署所述区块链主网中主网节点的节点设备启动属于所述区块链子网的第一子网节点,并通过自身装配的可信硬件为第一子网节点创建子网可信执行环境。

上述组建区块链子网的交易在被发送至区块链主网后,由区块链主网内的共识节点进行共识,并在通过共识后由各主网节点执行该交易,以完成区块链子网的组建。共识过程取决于所采用的共识机制,譬如上文所述的任一共识机制,本说明书并不对此进行限制。

可通过在用于组建区块链子网的交易中添加关于子网可信执行环境的环境信息,以指示节点设备按照该信息来创建相应的子网可信执行环境。比如,子网可信执行环境的环境信息可用于指示该子网可信执行环境使用的密钥(加密数据所使用的密钥,比如可以为对称密钥)。具体而言,交易中可包含对应于区块链子网的可信执行环境(即子网可信执行环境)的第一环境标识,那么子网可信执行环境所使用的密钥可由kms(keymanagementservice,密钥管理服务)服务器根据第一环境标识下发得到。又如,子网可信执行环境的环境信息还可用于指示在该子网可信执行环境内并行处理交易的数量。当然,环境信息可包含于区块链子网的配置信息中,也可包含于交易中区别于该配置信息的其他交易内容中。

以sgx为例,kms服务器可以key-value的形式维护enclaveid和密钥的映射关系。在创建用于组建隐私子网的交易时,可在该交易中存放指定的enclaveid。那么,kms服务器可以先通过远程证明的方式确定子网tee可信,从而在确定子网tee可信后将与该交易中enclaveid对应的密钥加密传输至子网tee内。除此之外,交易中还可包含参数tcs_num,参数tcs_num用于控制enclave中的线程数(即并行处理交易的数量)。那么,节点设备在创建子网tee时,可根据交易中存放的参数tcs_num的取值,为该子网tee创建相应数量的线程。

除上述子网tee使用的密钥由子网tee的环境标识来控制之外,子网tee使用的密钥还可由区块链子网内各子网节点之间通过协商得到,或者继承自区块链主网的主网可信执行环境。

比如,区块链子网内各子网节点之间可通过dh(diffie-hellman)或ecdh(ellipticcurvediffie–hellman)等算法协商得到子网tee使用的密钥。或者,在区块链主网内的各个主网节点维护有tee的情况下(部署主网节点的节点设备必须配置有用于创建tee的可信硬件,但不一定为主网节点创建了tee,即区块链主网不一定支持tee),说明部署主网节点的节点设备基于自身的可信硬件为该主网节点创建了主网tee,那么子网可信执行环境所使用的密钥可继承自该主网可信执行环境。例如,节点设备可通过可信硬件复用主网节点的tee插件(通过可信硬件为主网节点创建主网tee时开启的tee插件)来继承主网tee使用的密钥(即子网tee使用的密钥与主网tee使用的密钥相同)。当然,子网tee所使用的密钥可以与主网tee所使用的密钥无关。那么,节点设备在创建子网tee时则不复用主网节点的tee插件,而是通过可信硬件重新启用一新的tee插件。

而对于主网tee使用的密钥的来源,与上述类似的,可由区块链主网内各主网节点之间通过协商得到;或者,可由kms服务器根据主网tee对应的第二环境标识下发得到,在此不再赘述。

需要说明的是,主网tee使用的密钥与子网tee使用的密钥可以相同,也可以不同,在组建支持tee的区块链子网时,可根据实际需求灵活设定。比如,可通过上述“继承自主网tee”的方式、主网tee与子网tee采用相同enclaveid(在上述重新启用新的tee插件的情况下)、区块链子网与区块链主网协商密钥所采用的依据相同(在上述重新启用新的tee插件的情况下)等方式,来使得子网tee与主网tee使用相同的密钥。相应的,在上述重新启用新的tee插件的情况下,可通过主网tee与子网tee采用不同enclaveid和区块链子网与区块链主网协商密钥所采用的依据不同等方式,来使得子网tee与主网tee使用不同的密钥。

需要说明的是,tee加密数据所使用的密钥可以为对称密钥。对称加密采用的加密算法可以包括des算法、3des算法、tdea算法、blowfish算法、rc5算法和idea算法等,本说明书并不对此进行限制。对称密钥可以是seal(simpleencryptedarithmeticlibrary)密钥,该seal密钥可在tee通过远程证明后由kms服务器发送给相应的区块链节点,或者可以是各个区块链节点之间协商得到,进而区块链节点使用该seal密钥对隐私数据进行加密和解密。当然,通过远程证明后由kms服务器发送给区块链节点,或者各个区块链节点之间协商得到的对称密钥,可以并非上述的seal密钥,而是root密钥(根密钥),且上述的seal密钥可以为该root密钥的衍生密钥。例如,root密钥可以不可逆地依次衍生出若干版本的衍生密钥,且任意相邻的两个密钥之间由高版本密钥不可逆地衍生出低版本密钥,从而形成链式的密钥衍生结构。比如,如果需要衍生出版本号分别为0~255的256个版本的密钥,可以将root密钥与版本因子0xff(十进制的取值为255,即需要生成的密钥的版本号;当然,也可以采用其他取值)进行哈希计算,得到版本号为255的密钥key-255;通过将密钥key-255与版本因子0xfe进行哈希计算,得到版本号为254的密钥key-254;……通过将密钥key-1与版本因子0x00进行哈希计算,得到版本号为0的密钥key-0。由于哈希算法的特性,使得高版本密钥与低版本密钥之间的计算不可逆,比如可以由密钥key-1与版本因子0x00计算得到密钥key-0,但是不能够通过密钥key-0与版本因子0x00反推出密钥key-1。那么,可以指定某一版本的衍生密钥,作为上述的seal密钥对隐私数据进行加密。进一步地,还可以对seal密钥进行版本更新,且基于上文所述的特性,应当从低版本密钥向高版本密钥进行更新,使得即便低版本密钥泄露后,也无法反推出高版本密钥,确保足够的数据安全性。

在组建区块链子网的过程中,可在交易中存放区块链子网的配置信息,区块链主网中的各区块链节点(主网节点)可分别执行交易以透出配置信息。通过在上述组建区块链子网的交易中存放配置信息,该配置信息可以用于对所组建的区块链子网进行配置,使得组建的区块链子网符合组网需求。例如,通过在配置信息中包含参与组建区块链子网的节点成员的身份信息,可以指定组建的区块链子网对应于哪些节点成员。

节点成员的身份信息可以包括公钥,或者采用节点id等其他能够表征节点成员的身份的信息,本说明书并不对此进行限制。以公钥为例,每个区块链节点都存在对应的一组或多组公私钥对,由区块链节点持有私钥而公钥被公开且唯一对应于该私钥,因而可以通过公钥来表征相应区块链节点的身份,也可以通过该公钥来表征该区块链节点对应的节点成员的身份。因此,对于希望参与组建区块链子网的节点成员,可以将这些节点成员在区块链主网上对应的区块链节点的公钥添加至上述组建区块链子网的交易中,以作为上述节点成员的身份信息。上述的公私钥对可以用于签名验证的过程。例如,在采用有签名的共识算法中,譬如subnet1上述的nodea1采用自身维护的私钥对消息进行签名后,将经过签名的消息在subnet1中广播,而nodeb1、nodec1和noded1可以用nodea1的公钥对收到的消息进行签名验证,以确认自身收到的消息确实来自nodea1且没有经过篡改。

基于上述配置信息中包含有参与组建区块链子网的节点成员的身份信息,针对交易中包含的子网类型信息指示待组建的区块链子网为隐私类型(即待组建的区块链子网为隐私子网)的情况,当配置信息包含目标主网节点对应的节点成员的身份信息时,部署目标主网节点的节点设备基于上述交易生成包含该配置信息的创世块,并基于该创世块启动第一子网节点。针对上述子网类型信息指示待组建的区块链子网为非隐私类型(即待组建的区块链子网为非隐私子网)的情况,节点设备启动属于区块链子网且不运行于可信执行环境中的第二子网节点。实际上,启动第二子网节点的过程与上述启动第一子网节点的过程类似,差别仅在于启动第一子网节点的过程涉及创建子网tee。下面以第一子网节点为例对区块链子网内的子网节点进行详细说明,第二子网节点与此类似。

目标主网节点可以为区块链主网上属于配置信息所指示的节点成员对应的区块链节点。在组建区块链子网时,并非由目标主网节点直接参与组建区块链子网,而是需要由用于部署该目标主网节点的节点设备生成第一子网节点,并由第一子网节点参与组建区块链子网。目标主网节点和第一子网节点对应于同一个节点成员,比如在联盟链场景下对应于同一联盟链成员,但目标主网节点属于区块链主网、第一子网节点属于区块链子网,使得该节点成员可以分别参与到区块链主网和区块链子网的交易中。并且,由于区块链主网和区块链子网属于相互独立的两个区块链网络,使得目标主网节点生成的区块与第一子网节点生成的区块分别存入所述节点设备上的不同存储(采用的存储譬如可以为数据库),实现了目标主网节点与第一子网节点分别使用的存储之间的相互隔离,因而区块链子网所产生的数据仅会在区块链子网中的各个区块链节点之间同步,使得仅参与了区块链主网的节点成员无法获得区块链子网上产生的数据,实现了区块链主网与区块链子网之间的数据隔离,满足了部分节点成员(即参与区块链子网的节点成员)之间的交易需求。

目标主网节点和第一子网节点是在逻辑上划分出来的区块链节点,而从物理设备的角度来说,相当于上述部署了目标主网节点和第一子网节点的节点设备同时参与了区块链主网和区块链子网。由于区块链主网与区块链子网之间相互独立,使得这两个区块链网络的身份体系也相互独立,因而即便目标主网节点和第一子网节点可以采用完全相同的公钥,仍然应当将两者视为不同的区块链节点。譬如在图6中,subnet0中的nodea相当于目标主网节点,而部署该nodea的节点设备生成了属于subnet1的nodea1,该nodea1相当于第一子网节点。可见,由于身份体系相互独立,所以即便第一子网节点所采用的公钥区别于目标主网节点,也不影响本说明书方案的实施。

当然,参与区块链子网的节点成员并不一定只是参与区块链主网的节点成员中的一部分。在一些情况下,参与区块链子网的节点成员可以与参与区块链主网的节点成员完全一致,此时所有的节点成员都可以获得区块链主网和区块链子网上的数据,但是区块链主网与区块链子网所产生的数据依然可以相互隔离,比如可以通过在区块链主网上实现一类业务、在区块链子网上实现另一类业务,从而可以使得这两类业务分别产生的业务数据之间相互隔离。

除了上述的节点成员的身份信息之外,配置信息还可以包括下述至少之一:所述区块链子网的网络标识、所述区块链子网的管理员的身份信息、针对区块链平台代码的属性配置等,本说明书并不对此进行限制。网络标识用于唯一表征该区块链子网,因而该区块链子网的网络标识应当区别于区块链主网和该区块链主网上组建的其他区块链子网。区块链子网的管理员的身份信息,譬如可以为作为管理员的节点成员的公钥;其中,区块链主网与区块链子网的管理员可以相同,也可以不同。

通过区块链主网来组建区块链子网的优势之一,就是由于生成子网节点(包括第一子网节点和第二子网节点)的节点设备上已经部署了目标主网节点,因而可以将目标主网节点所使用的区块链平台代码复用在子网节点上,免去了区块链平台代码的重复部署,极大地提高了区块链子网的组建效率。那么,如果配置信息中未包含针对区块链平台代码的属性配置,子网节点可以复用目标主网节点上采用的属性配置;如果配置信息中包含了针对区块链平台代码的属性配置,子网节点可以采用该属性配置,使得子网节点所采用的属性配置不受限于目标主网节点的属性配置、与目标主网节点无关。针对区块链平台代码的属性配置可以包括下述至少之一:代码版本号、是否需要共识、共识算法类型、区块大小等,本说明书并不对此进行限制。

用于组建区块链子网的交易包括调用合约的交易。该交易中可以指明被调用的智能合约的地址、调用的方法和传入的参数。例如,调用的合约可以为前述的创世合约或系统合约,调用的方法可以为组建区块链子网的方法,传入的参数可以包括上述的配置信息。

举例而言,subnet系统合约的结构可以包含如下信息:

structsubnetinfo{

uintsubnetid;

bytes[]pubkeys;

subnetstatesubnetstate;

stringgenesis;

subnettypesubnettype;

stringsubnetconf;

}

其中,subnetid用于表示区块链子网(包括隐私子网和非隐私子网)的子网标识;pubkeys用于表示区块链子网的子网节点的身份信息;subnetstate用于表示区块链子网的运行状态;genesis用于表示区块链子网的创世块信息;subnettype用于表示区块链子网的子网类型;subnetconf用于表示区块链子网的子网tee的环境信息,比如上述enclaveid和tcs_num(控制enclave中的线程数)等等。上述数据均可存储于subnet系统合约的合约状态中。

用于组建区块链子网的交易可以包含如下信息:

from:administrator;

to:subnet;

method:addsubnet(string);

string:genesis;

subnetconf等。

其中,from字段为该交易的发起方的信息,譬如administrator表明该发起方为管理员;to字段为被调用的智能合约的地址,譬如该智能合约可以为subnet合约,则to字段具体为该subnet合约的地址;method字段为调用的方法,譬如在subnet合约中用于组建区块链子网的方法可以为addsubnet(string),而string为addsubnet()方法中的参数,上述示例中通过genesis表征该参数的取值,该genesis具体为前述的配置信息;subnetconf字段为区块链子网的子网tee的环境信息,比如上述enclaveid和tcs_num等等。

以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的部署效率。

在本说明书中,组建区块链子网的交易可以并非是调用智能合约的交易,使得不支持智能合约的区块链网络也可以实现本说明书的技术方案,从而在区块链主网的基础上快捷地创建出区块链子网。例如,可以预先定义一组网交易类型标识,当交易包含该组网交易类型标识时,就表明该交易用于组建新的区块链子网,即该交易为组建区块链子网的交易。区块链平台代码可以包含相关的用于组建区块链子网的处理逻辑,使得运行该区块链平台代码的目标主网节点在执行交易时,如果发现该交易中包含上述的组网交易类型标识,且目标主网节点对应的节点成员的身份信息被包含于该交易中的配置信息中,可以基于上述处理逻辑来触发部署目标主网节点的节点设备生成包含该配置信息的创世块并启动子网节点,由子网节点加载该创世块,以形成为区块链子网中的区块链节点。

节点设备通过在进程中创建一个运行区块链平台代码的实例,实现在该节点设备上部署一区块链节点。对于目标主网节点而言,由节点设备在上述进程中创建运行区块链平台代码的第一实例而形成。例如,节点设备可以首先在进程中创建第一实例,以形成区块链主网中的第一区块链节点;而当该节点设备对应的节点成员希望参与组建区块链子网时,可以在上述进程中创建第二实例,该第二实例区别于上述的第一实例,并由该第二实例形成区块链子网中的第二区块链节点。类似地,对于子网节点而言,由节点设备在上述进程中创建运行区块链平台代码的第二实例而形成。当第一实例与第二实例位于同一进程时,由于不涉及跨进程交互,可以降低对子网节点的部署难度、提高部署效率。当然,第二实例也可能与第一实例分别处于节点设备上的不同进程中,本说明书并不对此进行限制。例如,节点设备可以在第一进程中创建第一实例,以形成区块链主网中的第一区块链节点;而当该节点设备对应的节点成员希望参与组建区块链子网时,可以启动区别于第一进程的第二进程,并在该第二进程中创建第二实例,该第二实例区别于上述的第一实例,进而由该第二实例形成区块链子网中的第二区块链节点。

通过上述方式,可以在区块链主网上创建出区块链子网。以图6为例,subnet0原本包含nodea~nodee,而在subnet0的基础上可以组建出subnet1(支持tee,为隐私子网),该subnet1包含nodea1~noded1,且nodea与nodea1、nodeb与nodeb1、nodec与nodec1、noded与noded1分别部署在同一节点设备上。类似地,还可以在subnet0上组建出subnet2(不支持tee,为非隐私子网)或更多的区块链子网,其中subnet2包含nodea2、nodeb2、nodec2和nodee2,且nodea与nodea1、nodea2,nodeb与nodeb1、nodeb2,nodec与nodec1,noded与noded1,nodee与nodee2分别部署在同一节点设备上。以及,可以将subnet1、subnet2等作为新的区块链主网,并在此基础上进一步组建出区块链子网,其过程与subnet1或subnet2的组建相似,此处不再赘述。

在上述如图5所示的实施例中,实际上是从整个区块链系统的角度来描述了本说明书的组建区块链子网的过程,而在该过程中,并非所有的节点成员都参与了区块链子网,接下来将结合图7,从参与区块链子网的主网节点及其所处的节点设备的角度,对本说明书的技术方案进行描述。容易理解的是,图7所示的实施例与图5所示的实施例并不存在本质上的差异,前文针对图5所示实施例的描述,均适用于图7所示的实施例。

图7是一示例性实施例提供的另一种组建区块链子网的方法的流程图。如图7所示,该方法可以包括以下步骤:

步骤702,区块链主网中的主网节点获取并执行用于组建区块链子网的交易,所述交易包含子网类型信息,所述子网类型信息用于表明所述区块链子网是否支持可信执行环境。

步骤704,在所述子网类型信息为隐私类型的情况下,部署所述主网节点的节点设备启动属于所述区块链子网的第一子网节点,并通过自身装配的可信硬件为第一子网节点创建子网可信执行环境。

如前所述,所述区块链子网内各子网节点之间通过协商得到所述子网可信执行环境所使用的密钥。

如前所述,所述交易包含对应于所述区块链子网的可信执行环境的第一环境标识,所述子网可信执行环境所使用的密钥由密钥管理服务器根据第一环境标识下发得到。

如前所述,所述节点设备还用于:基于所述可信硬件为自身部署的主网节点创建主网可信执行环境;

其中,所述子网可信执行环境所使用的密钥继承自所述主网可信执行环境;或者,所述子网可信执行环境所使用的密钥与所述主网可信执行环境所使用的密钥无关。

如前所述,所述主网可信执行环境所使用的密钥由所述区块链主网内各主网节点之间通过协商得到;

或者,所述主网可信执行环境所使用的密钥由密钥管理服务器根据所述主网可信执行环境对应的第二环境标识下发得到。

如前所述,所述交易包含所述区块链子网的配置信息,所述配置信息包含参与组建所述区块链子网的节点成员的身份信息;所述部署所述主网节点的节点设备启动属于所述区块链子网的第一子网节点,包括:

当所述配置信息包含所述主网节点对应的节点成员的身份信息时,部署所述主网节点的节点设备基于包含所述配置信息的创世块启动第一子网节点。

如前所述,所述用于组建区块链子网的交易包括调用合约的交易。

如前所述,所述合约的执行结果包括所述配置信息,部署所述主网节点的节点设备通过消息机制获得所述配置信息,并根据获得的配置信息生成所述创世块;或者,

所述合约的执行结果包括所述创世块,部署所述主网节点的节点设备通过消息机制获得所述创世块。

如前所述,所述合约执行后生成的收据中包含与组建新的区块链子网相关的组网事件;所述部署所述主网节点的节点设备通过消息机制获得所述配置信息或所述创世块,包括:

所述主网节点监听生成的收据,并在监听到所述组网事件且所述组网事件的内容表明所述主网节点属于所述节点成员的情况下,触发部署所述主网节点的节点设备获取所述组网事件包含的所述配置信息或所述创世块;或者,

部署所述主网节点的节点设备监听生成的收据,并在监听到所述组网事件且所述组网事件的内容表明所述主网节点属于所述节点成员的情况下,获取所述组网事件包含的所述配置信息或所述创世块。

如前所述,所述组网事件包括:所述收据中的主题名称包含预定义的组网事件标识的事件。

如前所述,当所述组网事件的内容包含下述标识时,表明所述组网事件与组建新的区块链子网相关:

待组建的区块链子网的网络标识,且所述网络标识区别于已有区块链子网;或者,

预定义的新建网络标识,所述新建网络标识表明所述组网事件用于组建新的区块链子网。

如前所述,所述配置信息还包括下述至少之一:所述区块链子网的网络标识、所述区块链子网的管理员的身份信息、针对区块链平台代码的属性配置。

如前所述,针对区块链平台代码的属性配置包括下述至少之一:代码版本号、是否需要共识、共识算法类型、区块大小。

如前所述,在所述子网类型信息为非隐私类型的情况下,所述节点设备启动属于所述区块链子网且不运行于可信执行环境中的第二子网节点。

如前所述,所述节点设备启动第一子网节点包括:所述节点设备创建运行区块链平台代码的第二实例,第二实例区别于所述节点设备上运行所述区块链平台代码且对应于所述主网节点的第一实例。

如前所述,所述主网节点生成的区块与第一子网节点生成的区块分别存入所述节点设备上的不同存储。

图8是一示例性实施例提供的一种区块链系统的示意结构图。如图8所示,该区块链系统包括:

区块链主网800中的各主网节点,用于分别获取和执行用于组建区块链子网的交易,所述交易包含子网类型信息,所述子网类型信息用于表明所述区块链子网是否支持可信执行环境;

其中,在所述子网类型信息为隐私类型的情况下,部署所述区块链主网中主网节点801的节点设备启动属于所述区块链子网的第一子网节点,并通过自身装配的可信硬件为第一子网节点创建子网可信执行环境。

可选的,

所述区块链子网内各子网节点之间通过协商得到所述子网可信执行环境所使用的密钥。

可选的,所述交易包含对应于所述区块链子网的可信执行环境的第一环境标识,所述子网可信执行环境所使用的密钥由密钥管理服务器根据第一环境标识下发得到。

可选的,所述节点设备还用于:基于所述可信硬件为自身部署的主网节点801创建主网可信执行环境;

其中,所述子网可信执行环境所使用的密钥继承自所述主网可信执行环境;或者,所述子网可信执行环境所使用的密钥与所述主网可信执行环境所使用的密钥无关。

可选的,

所述主网可信执行环境所使用的密钥由所述区块链主网800内各主网节点之间通过协商得到;

或者,所述主网可信执行环境所使用的密钥由密钥管理服务器根据所述主网可信执行环境对应的第二环境标识下发得到。

可选的,所述交易包含所述区块链子网的配置信息,所述配置信息包含参与组建所述区块链子网的节点成员的身份信息;当所述配置信息包含目标主网节点801对应的节点成员的身份信息时,部署所述目标主网节点801的节点设备基于包含所述配置信息的创世块启动第一子网节点。

可选的,所述用于组建区块链子网的交易包括调用合约的交易。

可选的,所述合约包括创世合约或系统合约。

可选的,

所述合约的执行结果包括所述配置信息,部署所述目标主网节点801的节点设备通过消息机制获得所述配置信息,并根据获得的配置信息生成所述创世块;或者,

所述合约的执行结果包括所述创世块,部署所述目标主网节点801的节点设备通过消息机制获得所述创世块。

可选的,所述合约执行后生成的收据中包含与组建新的区块链子网相关的组网事件;所述目标主网节点801监听生成的收据,并在监听到所述组网事件且所述组网事件的内容表明目标主网节点801属于所述节点成员的情况下,触发部署目标主网节点801的节点设备获取所述组网事件包含的所述配置信息或所述创世块;或者,

部署目标主网节点801的节点设备监听生成的收据,并在监听到所述组网事件且所述组网事件的内容表明目标主网节点801属于所述节点成员的情况下,获取所述组网事件包含的所述配置信息或所述创世块。

可选的,所述组网事件包括:所述收据中的主题名称包含预定义的组网事件标识的事件。

可选的,当所述组网事件的内容包含下述标识时,表明所述组网事件与组建新的区块链子网相关:

待组建的区块链子网的网络标识,且所述网络标识区别于已有区块链子网;或者,

预定义的新建网络标识,所述新建网络标识表明所述组网事件用于组建新的区块链子网。

可选的,所述配置信息还包括下述至少之一:所述区块链子网的网络标识、所述区块链子网的管理员的身份信息、针对区块链平台代码的属性配置。

可选的,所述区块链主网800与所述区块链子网的管理员相同或不同。

可选的,针对区块链平台代码的属性配置包括下述至少之一:代码版本号、是否需要共识、共识算法类型、区块大小。

可选的,

在所述子网类型信息为非隐私类型的情况下,所述节点设备启动属于所述区块链子网且不运行于可信执行环境中的第二子网节点。

可选的,所述交易包括组网交易类型标识,所述组网交易类型标识表明所述交易用于组建新的区块链子网。

可选的,

所述组建区块链子网的交易由所述区块链主网800的管理员发起;或者,

所述组建区块链子网的交易由所述区块链主网800的普通用户发起。

可选的,所述节点设备启动第一子网节点包括:所述节点设备创建运行区块链平台代码的第二实例,第二实例区别于所述节点设备上运行所述区块链平台代码且对应于所述主网节点801的第一实例。

可选的,所述主网节点801生成的区块与第一子网节点生成的区块分别存入所述节点设备上的不同存储。

可选的,所述主网节点801与第一子网节点使用的存储之间相互隔离。

可选的,所述存储为数据库。

可选的,所述区块链主网800为底层区块链网络;或者,所述区块链主网800为其他区块链网络的子网。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。在一个典型的配置中,计算机包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1