具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在介绍本公开提供的基于区块链的数据处理方法、装置及存储介质之前,首先对区块链网络进行简单介绍。区块链是由区块链网络中所有节点共同参与维护的去中心化分布式数据库***,它是由一系列基于密码学方法产生的数据块组成,每个数据块即为区块链中的一个区块。根据产生时间的先后顺序,区块被有序地链接在一起,形成一个数据链条,被形象地称为区块链(Blockchain)。下面对区块链网络的一些概念进行介绍。
区块链网络中的节点可以称为区块链节点,其中区块链网络基于P2P(Peer toPeer,对等网络)网络,每个参与交易和区块存储、验证、转发的P2P网络节点都是一个区块链网络中的节点。
区块链中的用户身份可以使用公钥或者是根据该公钥生成的账户地址表示,并且公钥和私钥是成对出现的,其中私钥由用户掌握而不发布到上述的区块链网络中,公钥或者上述的账户地址可随意发布在区块链网络中。其中,公钥可以通过特定的哈希和编码后成为上述的账户地址。值得一提的是,用户身份和区块链节点不存在一一对应关系,用户可以在任意一个区块链节点上使用自己的私钥。
通常意义上,在区块链的形成过程中,每一个参与计算的节点均享有相同的权限(去中心、无信任),其中包括交易(Transaction),计算区块(俗称挖矿,即mining)等核心功能。其中,交易代表将被写入区块的数据,而区块(Block)则采用特定生成机制,保证最长的链(最长的链包含最多前后关联的区块)为有效链。在交易的数据中,通常包括了一定属性或货币,比如交易拥有者的数字签名(即拥有者的私钥对其交易进行加密处理,通常意义上称为数字签名),交易接受者的账户地址等,在该交易通过了对拥有者数字签名的验证,并被写入区块后,即将该货币的所有权转移到接受者一方。
关于区块链的数据写入区块的过程,是由区块链节点通过向区块链网络发布交易(Transaction)实现向区块链写入数据。该交易包括:区块链节点按照预设的交易数据格式对生成的交易数据包,以及利用该区块链节点自己的私钥对该交易数据包进行的数字签名,该数字签名用于证明该区块链节点的用户的身份。而后,该交易被区块链网络中的“矿工”(即执行PoW共识竞争机制的区块链节点)记录入区块链中产生的新区块,并将该交易发布到区块链网络中,在该交易被其他区块链节点验证通过(其他节点可以从该区块链节点生成的交易中获取该区块链节点的公钥,并根据该区块链节点的公钥对上述的数字签名进行验证,除了验证数字签名之外还可以验证交易数据包是否为规定的数据结构)和接受后,该交易即被写入区块链。其中,区块链中的新区块是由上述的“矿工”通过执行PoW共识竞争机制(该机制可以理解为:各个“矿工”按照区块的预设技术要求,例如按照预设的随机数要求来共同计算随机数,哪一个“矿工”先计算出符合该随机数要求的随机数,该“矿工”产生的区块就作为该新区块)而定期产生的,因此产生新区块的时间间隔通常和上述的预设技术要求相关,通过设置不同的预设技术要求可以改变区块链产生新区块的时间间隔。
智能合约(Smart Contract):智能合约实际上是存储在区块链上的可执行代码,不是严格意义上的账户因其不一定设有实际拥有人,但其特性和行为在很多情况下能够被看作是一种受编程逻辑控制的机器账户。
为了使公开技术方案更加易于理解,再对本公开各个实施例所涉及的可能的区块链网络结构进行介绍。图1是根据本公开一示例性实施例示出的实施环境示意图。如图1所示,该实施环境可以包括由若干节点组成的区块链网络10,该区块链网络10部署管理合约,所述管理合约为区块链网络中的所有节点都能够执行的合约。所述管理合约定义了能够执行智能合约的可信节点,这里所提的所述智能合约可以为任何智能合约,包括了具有隐私交易的智能合约;所述智能合约也可以是只指具有隐私交易的智能合约。该区块链网络10可以包括:第一区块链节点11、第二区块链节点12、参与节点13。其中:
第一区块链节点11,可以包括但不限于各种终端,是能够执行具有隐私交易的智能合约的可信节点,同步区块链网络的区块数据。
第二区块链节点12,可以包括但不限于各种终端,是能够执行该智能合约的可信节点,同步区块链网络的区块数据。
参与节点13,可以包括但不限于各种终端,区块链网络中除可信节点外的任意节点,数量不限。所述第一区块链节点11与所述第二区块链节点12,能够执行具有隐私交易的智能合约,参与节点13不能执行具有隐私交易的智能合约。其中,所述第一区块链节点11、所述第二区块链节点12与参与节点13都能够执行所述管理合约。
图2是根据本公开第一方面一示例性实施例提供的一种基于区块链的数据处理方法的流程图。该方法应用于区块链网络中的第一区块链节点。如图2所示,该方法可以包括以下步骤。
步骤S21,接收所述区块链网络中的区块;所述区块包括子区块,所述子区块包括智能合约代码和所述智能合约代码对应的数据。所述智能合约代码可以是指具有隐私交易的智能合约的代码,所述智能合约代码对应的数据是指隐私交易的数据。
步骤S22,通过预先获取的私钥从所述管理合约的数字信封中获取秘钥。
步骤S23,根据所述秘钥获取所述子区块中的所述智能合约代码,以使所述第一区块链节点执行所述智能合约代码。
步骤S24,将所述智能合约代码和所述第一区块链节点执行所述智能合约代码产生的数据加密并写入子区块中。
步骤S25,将所述子区块写入所述第一区块链节点的区块中。
本公开的技术方案基于能够支持智能合约的区块链,例如,以太坊就是一个支持智能合约的区块链,基于以太坊可以实施本公开的技术方案。以太坊本身没有接入限制,需要将以太坊改造为许可链,并在改造的许可链中部署管理合约和智能合约,所述管理合约定义了能够执行智能合约的可信节点,比如,所述管理合约可以定义可信节点能够执行所有的智能合约,特别是包括了具有隐私交易的智能合约;所述管理合约也可以定义只有可信节点能够执行具有隐私交易的智能合约。在图1中,所述可信节点包括第一区块链节点11和第二区块链节点12。
在该许可链中包括EOA(External Owned Account)账号和合约账号两类。其中,EOA账号包括ExtInfo字段、账号的nonce和账号的余额balance。其中,nonce是防止回放攻击的一个数字,账号每发一个交易,nonce需要加1。原生的以太坊账号没有ExtInfo字段,通过增加该字段可以为用户增加权限的定义,其数据与账号的nonce、余额一起形成账号的属性标识,受区块链的数据防篡改保护。合约账号除了包括EOA账号所拥有的数据项外,还包括智能合约代码和智能合约代码对应的数据,该数据为可信节点执行智能合约代码产生的持久化的数据。本方案需要保护区块链节点的隐私信息包括智能合约代码和智能合约代码对应的数据。
在步骤S21中,所述第一区块链节点从所述区块链网络中接收邻近节点广播的区块。其中,所述子区块里存有隐私交易的数据。如图1所示,一个参与节点13广播自己的区块,第一区块链节点11从接收该参与节点13的区块,假设该区块中包括子区块,所述子区块包括智能合约代码和所述智能合约代码对应的数据。
所述管理合约可以定义交易接口,通过该交易接口可以向可信节点发送隐私交易;所述管理合约可以定义增加可信节点的接口,如图1所示,可以通过该接口将其中一个参与节点13增加为可信节点;所述管理合约可以定义删除可信节点的接口,如图1所示,可以通过该接口将第二区块链节点12从可信节点中删除,以使第二区块链节点12作为参与节点;所述管理合约还可以定义修改可信节点的接口。以下是管理合约的伪代码示例:
DealTx接口是管理合约的交易接口。本公开可以通过改造以太坊的EVM(合约执行虚拟机),使其执行DealTx接口时,完成部署可信节点、启动可信节点进行隐私交易等功能。
在接收区块后,执行步骤S22,通过预先获取的私钥从所述管理合约的数字信封中获取秘钥。其中,所述秘钥可以是所述可以是通过非对称加密方式加密后放入所述管理合约的数字信封中,所述秘钥可以为对称秘钥,所述私钥为非对称私钥。所述第一区块链节点首先获取所述管理合约的中的数字信封,然后,通过私钥解密加密的秘钥,以获取秘钥。
在获取秘钥后,就可以执行步骤S23,根据所述秘钥解密所述子区块中的经过加密的所述智能合约代码,以获取所述智能合约代码。所述第一区块链节点在获取所述智能合约代码后,执行获取的所述智能合约代码,进而产生对应的数据。然后,执行步骤S24,将所述智能合约代码和所述第一区块链节点执行所述智能合约代码产生的数据加密并写入子区块中。
其中,步骤S24中对所述智能合约代码和所述第一区块链节点执行所述智能合约代码产生的数据的加密方式包括但不限于以下两种实施方式:
第一种实施方式:如图3所示,图3是根据本公开一示例性实施例提供的一种基于区块链的数据处理方法中加密的流程示意图,所述将所述智能合约代码和所述第一区块链节点执行所述智能合约代码产生的数据加密,可以包括以下步骤。
在步骤S241中,随机生成所述秘钥,并获取本次随机生成的秘钥。
在步骤S242中,利用本次随机生成的秘钥加密所述智能合约代码和所述第一区块链节点执行所述智能合约代码产生的数据。
在步骤S243中,将本次随机生成的秘钥更新到所述管理合约的数字信封中。
采用第一种实施方式,在每次对所述智能合约代码和所述第一区块链节点执行所述智能合约代码产生的数据进行加密之前,第一区块链节点随机生成秘钥,并利用本次随机生成的秘钥,执行步骤S24。由于每次生成秘钥的规则都是随机生成,所以第一区块链节点每次随机生成的秘钥不同,即第一区块链节点每次执行步骤S24所使用的秘钥不同,并且,当前执行步骤S24所使用的秘钥会更新到管理合约的数字信封中,因此,第一区块链节点以往各次执行步骤S24产生的子区块将不能再被解密,能够适用于需要清除历史记录的应用场景。
第二种实施方式:利用所述秘钥加密所述智能合约代码和所述第一区块链节点执行所述智能合约代码产生的数据;其中,所述秘钥为所述第一区块链节点第一次对所述智能合约代码和所述第一区块链节点执行所述智能合约代码产生的数据进行加密之前,随机生成的秘钥,并将第一次随机生成的秘钥存入所述数字信封中。
采用第二种实施方式,在第一次对所述智能合约代码和所述第一区块链节点执行所述智能合约代码产生的数据进行加密之前,第一区块链节点随机生成秘钥,并利用第一次随机生成的秘钥,执行步骤S24。在第一次随机生成秘钥之后,第一区块链节点以后每次执行步骤S24都使用第一次随机生成的秘钥。也就是说,只要第一区块链节点在第一次对智能合约代码和所述第一区块链节点执行所述智能合约代码产生的数据进行加密之前随机生成秘钥,此后都无需再次随机生成秘钥,该第一次随机生成的秘钥固定为第一区块链节点执行步骤S24所使用的秘钥,因而,第一区块链节点每次执行步骤S24所使用的秘钥相同。
在对所述智能合约代码和所述第一区块链节点执行所述智能合约代码产生的数据加密后,将加密后的智能合约代码和数据写入子区块中,然后执行步骤S25,将所述子区块写入所述第一区块链节点的区块中。
图4是根据本公开一示例性实施例提供的一种基于区块链的数据处理方法中子区块写入区块的流程示意图。如图4所示,所述将所述子区块写入所述第一区块链节点的区块中,可以包括以下步骤。
在步骤S251中,根据所述子区块,由所述第一区块链节点所在的设备进行挖矿。
在步骤S252中,将挖矿完成后的所述子区块写入所述第一区块链节点的区块中。
为了节约资源,即避免为了子区块而另外分配挖矿的CPU和内存资源,在生成子区块后,由生成该子区块的第一区块链节点所在的设备进行挖矿,挖矿完成后,将所述子区块写入所述第一区块链节点的区块中。进而,所述第一区块链节点可以将该区块通过广播的形式发送给区块链网络中的其它节点。
为了使得子区块所在的进程能够独立运行,逻辑上与区块所在的进程没有关系。物理部署上为了方便管理,所述子区块存在于所述区块所在的区块目录的下一级子目录中,且所述子区块所在的子目录与所述区块目录的目录结构一致。目录结构可以如下所示:
区块所在的进程与子区块所在的进程之间从逻辑和物理上完全解耦,所以它们之间的通信是进程间的消息通信。以太坊已经支持RPC(远程过程调用),本方案只需要在RPC的基础上扩展消息即可。
举例来讲,如图1所示的区块链网络10,该区块链网络10部署的管理合约定义了第一区块链节点11和第二区块链节点12为可信节点,参与节点13为不可信节点,且所述管理合约的数字信封中存有秘钥。以第二区块链节点12发起隐私交易,第一区块链节点11执行隐私交易为例(当然,在其它实施例中,也可以是第一区块链节点11发起隐私交易,第二区块链节点12执行隐私交易):
第二区块链节点12的区块包括子区块,子区块中包含隐私交易的信息。第二区块链节点12发起隐私交易后,第二区块链节点12的区块通过点对点网络透传给邻近的参与节点13,参与节点13再将第二区块链节点12的区块通过点对点网络透传给邻近的第一区块链节点11。由于参与节点13不是可信节点,因此,参与节点13不能从所述管理合约的数字信封中获取秘钥,即不能解密第二区块链节点12的区块中的子区块;
第一区块链节点11收到第二区块链节点12的区块后,将第二区块链节点12的区块通过点对点网络透传给邻近节点的同时,通过预先获取的私钥从所述管理合约的数字信封中获取秘钥。第一区块链节点11根据所述秘钥解密所述子区块中经过加密的智能合约代码;接着,第一区块链节点11执行所述智能合约代码,并产生对应的数据;然后,第一区块链节点11将所述智能合约代码和对应的数据加密并打包到子区块中;接着,第一区块链节点11将所述子区块写入所述第一区块链节点的区块中;最后,第一区块链节点11将该区块进行广播。
可见,通过本公开上述技术方案,通过部署管理合约,所述管理合约可以定义能够执行具有隐私交易的智能合约的可信节点,即可以由所述管理合约定义隐私交易的对象,只有隐私交易的对象能够通过预先获取的私钥从所述管理合约的数字信封中获取秘钥,并通过获取的秘钥来解密子区块中经过加密的隐私交易,并且由于子区块只是区块中独立的一部分,并不影响其它节点验证区块中其它数据的有效性,而子区块数据的有效性只有隐私交易的对象(即可信节点)能够验证。因而,采用上述方法实现了对隐私交易的保护。
基于同一发明构思,本公开实施例还提供一种基于区块链的数据处理装置,用于执行本公开实施例提供的上述基于区块链的数据处理方法。图5是根据本公开一示例性实施例提供的一种基于区块链的数据处理装置的框图。如图5所示,基于区块链的数据处理装置500配置于区块链网络中的第一区块链节点,所述区块链网络部署一管理合约,所述管理合约定义了能够执行该智能合约的可信节点,所述可信节点至少包括所述第一区块链节点;该装置500包括:
所述装置包括:
接收模块510,被配置为接收所述区块链网络中的区块;所述区块包括子区块,所述子区块包括智能合约代码和所述智能合约代码对应的数据;
获取模块520,被配置为通过预先获取的私钥从所述管理合约的数字信封中获取秘钥;
解密模块530,被配置为根据所述秘钥获取所述子区块中的所述智能合约代码,以使所述第一区块链节点执行所述智能合约代码;
第一写入模块540,被配置为将所述智能合约代码和所述第一区块链节点执行所述智能合约代码产生的数据加密并写入子区块中;以及
第二写入模块550,被配置为将所述子区块写入所述第一区块链节点的区块中。
可选地,如图7所示,所述第二写入模块550包括:
挖矿子模块551,被配置为根据所述子区块,由所述第一区块链节点所在的设备进行挖矿;以及
写入子模块552,被配置为将挖矿完成后的所述子区块写入所述第一区块链节点的区块中。
可选地,如图6所示,所述第一写入模块540包括:
获取子模块541,被配置为随机生成所述秘钥,并获取本次随机生成的秘钥;
加密子模块542,被配置为利用本次随机生成的秘钥加密所述智能合约代码和所述第一区块链节点执行所述智能合约代码产生的数据;以及
更新子模块543,被配置为将本次随机生成的秘钥更新到所述管理合约的数字信封中。
可选地,所述第一写入模块540还被配置为:
利用所述秘钥加密所述智能合约代码和所述第一区块链节点执行所述智能合约代码产生的数据;
其中,所述秘钥为所述第一区块链节点第一次对所述智能合约代码和所述第一区块链节点执行所述智能合约代码产生的数据进行加密之前,随机生成的秘钥,并将第一次随机生成的秘钥存入所述管理合约的所述数字信封中。
可选地,所述子区块存在于所述区块所在的区块目录的下一级子目录中,且所述子区块所在的子目录与所述区块目录的目录结构一致。
可选地,所述管理合约至少定义了交易接口、以及增加、删除、修改可信节点的接口。
可选地,所述私钥为非对称私钥,所述秘钥为对称秘钥,所述秘钥通过非对称加密后放入所述管理合约的数字信封中。
所属本领域的技术人员应该清楚地了解到,为描述的方便和简洁,上述描述的基于区块链的数据处理装置的各模块的具体工作过程,可以参考前述方法实施例中对应的过程,此处不再赘述。
另外,上述对基于区块链的数据处理装置组成模块进行的划分,仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。并且,各个模块的物理实现也可以有多种方式,本公开对此不做限定。
图8是根据一示例性实施例示出的一种电子设备800的框图。如图8所示,该电子设备800可以包括:处理器801,存储器802,多媒体组件803,输入/输出(I/O)接口804,以及通信组件805。
其中,处理器801用于控制该电子设备800的整体操作,以完成上述的基于区块链的数据处理方法中的全部或部分步骤。存储器802用于存储各种类型的数据以支持在该电子设备800的操作,这些数据例如可以包括用于在该电子设备800上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器802可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,简称EPROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。多媒体组件803可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器802或通过通信组件805发送。音频组件还包括至少一个扬声器,用于输出音频信号。I/O接口804为处理器801和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件805用于该电子设备800与其他设备之间进行有线或无线通信。无线通信,例如Wi-Fi,蓝牙,近场通信(Near FieldCommunication,简称NFC),2G、3G或4G,或它们中的一种或几种的组合,因此相应的该通信组件805可以包括:Wi-Fi模块,蓝牙模块,NFC模块。
在一示例性实施例中,电子设备800可以被一个或多个应用专用集成电路(Application Specific Integrated Circuit,简称ASIC)、数字信号处理器(DigitalSignal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field Programmable Gate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的基于区块链的数据处理方法。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,例如包括程序指令的存储器802,上述程序指令可由电子设备800的处理器801执行以完成上述的基于区块链的数据处理方法。
以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。
此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。