可信执行环境中基于纠错编码的共享区块链数据存储的制作方法

文档序号:22688547发布日期:2020-10-28 12:58阅读:132来源:国知局
可信执行环境中基于纠错编码的共享区块链数据存储的制作方法

本文涉及可信执行环境中基于纠错编码(errorcorrectioncoding,ecc)的共享区块链数据存储。



背景技术:

分布式账本系统(dls),也可以被称为共识网络和/或区块链网络,使得参与的实体能够安全且不可篡改地存储数据。在不引用任何特定用例的情况下,分布式账本系统通常被称为区块链网络。区块链网络的示例类型可以包括公有区块链网络、私有区块链网络和联盟区块链网络。联盟区块链网络针对选定的实体组群提供,该实体组群控制共识过程,并且所述联盟区块链网络包括访问控制层。

基于区块链的程序能够由分布式计算平台执行。例如,分布式计算平台可以包括为执行智能合约提供运行时环境的虚拟机。区块链计算平台可以被看作是基于交易的状态机。平台中的状态数据可以被聚集到也被称为世界状态的全局共享状态。世界状态包括账户地址和账户状态之间的映射。世界状态可以被存储在诸如默克尔帕特里夏树(mpt)的数据结构中。

除了状态数据,区块链网络还能够存储诸如区块数据和索引数据的其它类型的数据。区块数据可以包括区块头和区块体。区块头可以包括特定区块的身份信息,并且区块体可以包括使用区块确认的交易。随着交易被逐渐增加地进入到区块链中,状态数据和区块数据在大小上可能会增长得非常大。在一些分布式账本系统中,每一个节点存储区块链的整个副本,这会占用大量的存储空间。这是因为,所有区块数据和状态数据都被存储而回到记录到区块链的第一交易。在一些分布式账本系统中,一些共享节点存储整个区块链副本,并且与其它可能导致“数据不对等”的区块链节点共享区块链数据。即,当数据不均匀地分布在不同节点之间时,当存储大多数数据的节点发生故障时,数据安全的风险会变高。

因此,期望能够按照减少诸如计算资源和存储器的技术资源消耗的方式将数据存储在分布式账本系统中的节点上。还期望能够按照维持数据对等性和数据处理效率的方式实现这样的存储。



技术实现要素:

本申请描述了用于基于可信执行环境(tee)中的纠错编码而存储区块链数据的技术。这些技术通常涉及从区块链网络的区块链节点接收在可信执行环境中执行的一个或多个软件指令的请求;确定用于执行所述一个或多个软件指令的一个或多个区块不被频繁访问,其中,所述一个或多个区块被存储在区块链节点上并且被追加到区块链;在所述可信执行环境中执行所述一个或多个区块的纠错编码以生成一个或多个编码区块;基于所述一个或多个软件指令将所述一个或多个编码区块中的每一个划分为多个数据集;以及基于所述一个或多个软件指令向所述区块链网络的区块链节点发送所述多个数据集和数据存储安排,其中,所述数据存储安排指示所述多个数据集中的至少一个由每一个所述区块链节点存储。

本申请还提供耦接到一个或多个处理器并且其上存储有指令的一个或多个非暂态计算机可读存储介质,所述指令在由所述一个或多个处理器执行时使得所述一个或多个处理器根据本文提供的方法实施例来执行操作。

本申请还提供一种用于实现本文提供的方法的系统。所述系统包括一个或多个处理器、以及耦接到所述一个或多个处理器并且其上存储有指令的计算机可读存储介质,所述指令在由所述一个或多个处理器执行时,使得所述一个或多个处理器执行根据本文提供的方法实施例的操作。

将意识到,根据本申请的方法可以包括本文描述的方面和特征的任意组合。即,根据本申请的方法不局限于本文专门描述的方面和特征的组合,而是还包括所提供的方面和特征的任意组合。

在附图和下面的描述中阐述了本申请的一个或多个实施例的细节。通过说明书和附图以及权利要求书,本申请的其它特征和优点将变得明显。

附图说明

图1描绘了可以用于执行本文实施例的环境的示例。

图2描绘了根据本文实施例的架构的示例。

图3描绘了根据本文实施例的区块数据编码和哈希处理的示例。

图4描绘了根据本文实施例的数据存储安排的示例。

图5描绘了根据本文实施例的区块数据编码和哈希处理的另一示例。

图6描绘了基于可信执行环境(tee)的共享区块链数据存储的处理的示例。

图7描绘了基于可信执行环境的共享区块链数据存储的处理的另一示例。

图8描绘了根据本文实施例执行的处理的示例。

图9描绘了根据本文实施例的装置的模块的示例。

各个附图中类似的附图标记和标号指示类似的元件。

具体实施方式

本文描述了用于基于可信执行环境(tee)中的纠错编码(ecc)而存储区块链数据的技术。这些技术通常涉及:从区块链网络的区块链节点接收在可信执行环境中执行一个或多个软件指令的请求;确定用于执行所述一个或多个软件指令的一个或多个区块不被频繁访问,其中,所述一个或多个区块被存储在所述区块链节点上并且被追加到区块链;在所述可信执行环境中执行所述一个或多个区块的纠错编码以生成一个或多个编码区块;基于所述一个或多个软件指令将所述一个或多个编码区块中的每一个划分为多个数据集;以及基于所述一个或多个软件指令将所述多个数据集和数据存储安排发送到所述区块链网络的区块链节点,其中,所述数据存储安排指示所述多个数据集中的至少一个由每一个所述区块链节点存储。

本文中描述的技术产生几个技术效果。例如,主题的实施例减少了区块链节点的存储资源的负担,同时维持了区块链节点的计算效率和数据对等性。由于有些区块被不频繁地访问(例如,较旧的区块),因此通过仅将ecc编码区块(或者简单地,编码区块)的一部分保存在每一个区块链节点上并且与其它区块链节点共享数据的剩余部分,节省了区块链节点的存储资源。

在一些实施例中,区块链节点能够存储ecc编码区块的选定子集以及与编码区块的其它子集相对应的哈希值。为了从其它区块链节点检索编码区块的未保存的子集,区块链节点可以向其它区块链节点发送相对应的哈希值。由于哈希值是不可逆的,因此区块链节点能够通过哈希处理接收到的数据并且将经哈希处理的值与本地存储的哈希值进行比较来验证接收到的数据是否真实。这样,能够确保数据安全性,并且能够识别故障节点。即使区块链节点从故障区块链节点接收到不真实数据,相对应的区块也能够被恢复,只要不真实数据的百分比小于或者等于ecc允许的错误位(bit)的最大分数。

在一些实施例中,代替在每一个区块链节点上执行ecc,能够在与可信节点相关联的可信执行环境中执行ecc。通过使用可信执行环境技术,可信节点能够生成可验证的编码区块,将编码区块划分为数据集,并且将数据集和数据存储安排发送到每一个区块链节点用于存储。在可信执行环境下生成的数据集能够由区块链节点验证以确保数据真实性。每一个区块链节点接着能够基于数据存储安排来存储数据集的一部分,以节约存储空间。通过使可信执行环境启用可信节点,ecc仅需要被执行一次,而不是由每一个区块链节点单独执行。这样,能够显著地降低区块链网络的整体计算资源消耗。

在一些实施例中,每一个区块链节点能够使可信执行环境执行ecc。在计算资源消耗为低或者存储装置的使用率为高时,每一个区块链节点能够单独请求相对应的可信执行环境执行ecc。区块链节点还能够与彼此同步并且从与其它区块链节点相关联的可信执行环境请求编码区块。这样,能够进一步优化区块链网络的计算资源和存储资源的使用。

为了提供本文实施例的进一步的背景,并且如上面介绍的,也被称为共识网络(例如,由点对点节点组成)和区块链网络的分布式账本系统(dls),使得参与实体能够安全地且不可篡改地进行交易,并且存储数据。尽管术语区块链通常与特定网络和/或用例相关联,但是在不参考任何特定用例的情况下,本文中使用的区块链通常指代分布式账本系统。

区块链是以交易不可篡改的方式存储交易的数据结构。因而,记录在区块链上的交易是可靠的和值得信任的。区块链包括一个或多个区块。链中的每一个区块通过包括在链中紧邻其之前的前一区块的加密哈希值(cryptograghichash)而被链接到该前一区块。每一个区块还包括时间戳、自身的加密哈希值以及一个或多个交易。已经由区块链网络的节点验证的交易经哈希处理并且编码到默克尔(merkle)树中。默克尔树是一种数据结构,在该树的每一个叶子节点处的数据被哈希处理,并且在该树的每一个分支中的所有哈希值(hash)在该分支的根处被级联(concatenated)。这一过程沿着树持续一直到达整个树的根,在整个树的根处存储代表树中所有数据的哈希值。通过确定哈希值是否与该树的结构一致而快速验证该哈希值是否为存储在树中的交易的哈希值。

区块链是用于存储交易的去中心化或者至少部分去中心化的数据结构,而区块链网络是通过广播、验证和确认交易等来管理、更新和维护一个或多个区块链的计算节点的网络。如上面介绍的,区块链网络可以作为公有区块链网络、私有区块链网络或者联盟区块链网络而被提供。本文参照联盟区块链网络进一步详细地描述本文的实施例。然而,可以预期,可以在任何合适的类型的区块链网络中来实现本文的实施例。

通常,联盟区块链网络在参与实体之间是私有的。在联盟区块链网络中,共识处理由授权的节点集控制,这些节点集可以被称为共识节点,一个或多个共识节点由相应的实体(例如,金融机构、保险公司)操作。例如,由十(10)个实体(例如,金融机构、保险公司)组成的联盟能够操作联盟区块链网络,其中的每一个实体可以操作联盟区块链网络中的至少一个节点。

在一些示例中,在联盟区块链网络内,提供全局区块链作为跨所有节点复制的区块链。即,所有共识节点相对于全局区块链处于完全共识的状态。为了达成共识(例如,同意向区块链添加区块),在联盟区块链网络中实施共识协议。例如,联盟区块链网络能够实现下面进一步详细描述的实用拜占庭容错(pbft)共识。

图1是描绘了能够用于执行本文实施例的环境100的示例的图。在一些示例中,环境100使得实体能够参与联盟区块链网络102。环境100包括计算系统106、108以及网络110。在一些示例中,网络110包括局域网(lan)、广域网(wan)、因特网或其组合,并且连接网站,用户设备(例如计算设备)和后端系统。在一些示例中,网络110能够在有线和/或无线通信链路上被访问。在一些示例中,网络110使得能够与联盟区块链网络102通信并且在联盟区块链网络102内进行通信成为可能。通常,网络110代表一个或多个通信网络。在一些示例中,计算系统106、108能够是云计算系统(未示出)的节点,或者每一个计算系统106、108能够是单独云计算系统,该单独云计算系统包括通过网络互连并且用作分布式处理系统的多个计算机。

在描绘的示例中,计算系统106、108能够分别包括能够作为节点参与至联盟区块链网络102中的任何合适的计算系统。计算设备的示例包括但不限于服务器、台式计算机、笔记本计算机、平板计算设备和智能手机。在一些示例中,计算系统106、108承载用于与联盟区块链网络102交互的一个或多个计算机实现的服务。例如,计算系统106能够承载第一实体(例如,用户a)的由计算机实现的、例如交易管理系统的服务,第一实体使用该交易管理系统来管理其与一个或多个其它实体(例如,其它用户)的交易。计算系统108能够承载第二实体(例如,用户b)的由计算机实现的、例如交易管理系统的服务,例如第二实体使用该交易管理系统来管理其与一个或多个其它实体(例如,其它用户)的交易。在图1的示例中,联盟区块链网络102被表示为节点的点对点网络(peer-to-peernetwork),并且计算系统106、108分别提供参与联盟区块链网络102的第一实体和第二实体的节点。

图2描绘了根据本文实施例的架构200的示例。示例性概念架构200包括分别与参与者a、参与者b和参与者c相对应的参与者系统202、204、206。每一个参与者(例如,用户、企业)参与到作为点对点网络提供的区块链网络212中,该点对点网络包括多个节点214,节点中的至少一些节点不可篡改地将信息记录在区块链216中。尽管在区块链网络212中示意性描述了单个区块链216,但是在区块链网络212上提供并维护了区块链216的多个副本,如本文进一步详细描述的。

在描述的示例中,每一个参与者系统202、204、206分别由参与者a、参与者b和参与者c提供或者代表参与者a、参与者b和参与者c,并且在区块链网络中作为各自的节点214发挥作用。如这里所使用的,节点通常指连接到区块链网络212并且使得相应参与者能够参与区块链网络中的单独系统(例如,计算机、服务器)。在图2的示例中,参与者与每一个节点214相对应。然而,应该预期到,一个参与者能够操作区块链网络212内的多个节点214,和/或多个参与者能够共享一个节点214。在一些示例中,参与者系统202、204、206使用协议(例如,超文本传输协议安全(https)),和/或使用远程过程调用(rpc)与区块链网络212通信或者经过区块链网络212进行通信。

节点214能够在区块链网络212内具有不同的参与程度。例如,一些节点214能够参与共识处理(例如,作为将区块添加到区块链216的监视节点),而其它节点214不参与共识处理。作为另一示例,一些节点214存储区块链216的完整副本,而其它节点214仅存储区块链216的一部分的副本。例如,数据访问权限会限制相应的参与者在其相应的系统内存储的区块链数据。在图2的示例中,参与者系统202、204和206存储区块链216的相应的完整副本216'、216”和216”'。

区块链(例如,图2的区块链216)由一系列区块组成,每一个区块存储数据。数据的示例包括表示两个或更多个参与者之间的交易的交易数据。尽管本文通过非限制性示例的方式使用了交易,但是可以预期到,任何合适的数据可以被存储在区块链中(例如,文档、图像、视频、音频)。交易的示例可以包括但不限于有价物(例如,资产、产品、服务、货币)的交换。交易数据被不可篡改地存储在区块链内。即,交易数据不能够被改变。

在将交易数据存储在区块中之前,对交易数据进行哈希处理。哈希处理是将交易数据(作为串数据提供)转换为固定长度哈希值(也作为串数据提供)的过程。不可能将哈希值进行去哈希(un-hash)处理来获得交易数据。哈希处理可确保即使交易数据微小改变也会导致完全不同的哈希值。进而,并且如上面指出的,哈希值具有固定长度。即,无论交易数据的大小如何,哈希值的长度固定。哈希处理包括经过哈希函数处理交易数据以生成哈希值。哈希函数的示例包括但不限于输出256位哈希值的安全哈希算法(sha)-256。

多个交易的交易数据被哈希处理并且存储在区块中。例如,提供两个交易的哈希值,并且他们本身被哈希处理以提供另一哈希值。这一过程重复进行,直到对于所有要存储在区块中的交易提供了单个哈希值为止。这一哈希值被称为默克尔根哈希值,并且被存储在区块的头中。任何交易中的改变将导致其哈希值的改变,并且最终,将导致默克尔根哈希值的改变。

区块经过共识协议被添加到区块链中。区块链网络内的多个节点参与共识协议,并且执行将区块添加到区块链中的工作。这样的节点被称为共识节点。上面介绍的pbft用作共识协议的非限制示例。共识节点执行共识协议以向区块链添加交易,并且更新区块链网络的整体状态。

进一步详细地,共识节点生成区块头,对区块中的所有交易进行哈希处理,并且将所得的哈希值成对地组合以生成进一步的哈希值,直到对于区块中的所有交易提供了单个哈希值(默克尔根哈希值)。这一哈希值被添加到区块头。共识节点还确定区块链中最近的区块的哈希值(即,添加到区块链中的最后一个区块)。共识节点还向区块头添加随机数值(noncevalue)和时间戳。

通常,pbft提供容忍拜占庭故障(例如,故障节点、恶意节点)的实用拜占庭状态机复制。这通过在pbft中假设将发生故障(例如,假设存在独立节点故障和/或由共识节点发送的被操纵的消息)来实现。在pbft中,以包括主共识节点和备共识节点的顺序提供共识节点。主共识节点被周期性改变。通过由区块链网络内的所有共识节点针对区块链网络的全局状态达成一致,来将交易添加到区块链中。在该处理中,在共识节点之间传输消息,并且每一个共识节点证明消息被从指定的对等节点(peernode)接收,并且验证消息在传输期间没有被修改。

在pbft中,在所有共识节点在相同状态开始的情况下,共识协议分多个阶段提供。首先,客户端向主共识节点发送调用服务操作(例如,在区块链网络内执行交易)的请求。对接收到请求做出响应,主共识节点将请求组播到备共识节点。备共识节点执行该请求,并且分别向客户端发送应答。客户端等待直到接收到阈值数量的应答。在一些示例中,客户端等待直到接收到f+1个应答,其中f是在区块链网络内能够容忍的错误共识节点的最大数量。最终结果是,足够数量的共识节点就将记录添加到区块链的顺序上达成一致,并且该记录或者被接受或者被拒绝。

在一些区块链网络中,用加密处理以维护交易的隐私。例如,如果两个节点想要使交易保持隐私,使得区块链网络中的其它节点不能够察觉交易的细节,则节点可以对交易数据加密。加密的示例包括但不限于对称加密和非对称加密。对称加密是指使用单个密钥既进行加密(根据明文生成密文)又进行解密(根据密文生成明文)的加密过程。在对称加密中,相同密钥对于多个节点可用,因此每一个节点能够对交易数据进行加密/解密。

非对称加密使用密钥对,每个密钥对包括私钥和公钥,私钥仅对相应的节点已知,并且公钥对于区块链网络中的任何或者所有其它节点已知。节点能够使用另一节点的公钥来加密数据,并且经加密的数据能够使用其他节点的私钥进行解密。例如,再次参见图2,参与者a能够使用参与者b的公钥来加密数据,并且将经加密的数据发送到参与者b。参与者b能够使用其私钥对经加密的数据(密文)进行解密并且提取原始数据(明文)。使用节点的公钥加密的消息仅能够使用该节点的私钥进行解密。

非对称加密用于提供数字签名,其使得交易中的参与者能确认交易中的其它参与者,以及交易的有效性。例如,节点能够对消息进行数字签名,并且另一节点能够基于参与者a的该数字签名确认该消息被节点发送。数字签名还能够用于确保消息在传输中不被篡改。例如,并且再次参见图2,参与者a要向参与者b发送消息。参与者a生成该消息的哈希值,然后接着,使用其私钥,对该哈希值进行加密以提供作为加密哈希值的数字签名。参与者a将数字签名追加到该消息上,并且将具有数字签名的消息发送到参与者b。参与者b使用参与者a的公钥对数据签名进行解密,并且提取哈希值。参与者b对该消息进行哈希处理并且比较哈希值。如果哈希值相同,则参与者b能够确认该消息确实来自参与者a,并且没有被篡改。

在一些实施例中,区块链网络的节点和/或与区块链网络通信的节点能够使用可信执行环境操作。在高层级处,可信执行环境是硬件(一个或多个处理器、存储器)内的可信环境,其与硬件的操作环境(例如,操作系统(os)、基本输入/输出系统(bios))隔离。更详细地,可信执行环境是处理器的分离的安全区域,其确保在主处理器内加载的执行代码和数据的保密性和完整性。在处理器内,可信执行环境与操作系统并行运行。所谓的可信应用(ta)的至少部分在可信执行环境内执行,并且访问处理器和存储器。经过可信执行环境,可信应用被保护免受运行在主操作系统中的其它应用影响。进而,可信执行环境在其内部将可信应用彼此加密地隔离。

可信执行环境的示例包括由美国加利福尼亚的圣克拉拉的英特尔公司提供的软件保护扩展(sgx)。尽管sgx在本文中通过示例来讨论,但是可以预期,本申请的实施例可以使用任何合适的可信执行环境来实现。

sgx提供基于硬件的可信执行环境。在sgx中,可信硬件是中央处理单元(cpu)的裸片,并且一部分物理存储器被隔离以保护选择代码和数据。存储器的被隔离部分被称为飞地(enclave)。更加具体地,飞地被提供作为存储器中的飞地页高速缓存(epc)并且被映射到应用地址空间。存储器(例如,dram)包括对于sgx预留的随机存储器(prm)。随机存储器是最低基本输入/输出系统水平中的连续存储器空间并且不能够由任何软件访问。每一个飞地页高速缓存是由操作系统分配以将应用数据和代码加载到随机存储器中的存储器集(4kb)。飞地页高速缓存元数据(epcm)是相应飞地页高速缓存的进入地址并且确保每一个飞地页高速缓存能够仅由一个飞地共享。即,单个飞地能够使用多个飞地页高速缓存,而飞地页高速缓存专用于单个飞地。

在可信应用的执行期间,处理器在访问存储在飞地中的数据时在所谓的飞地模式中操作。飞地模式中的操作强制对于每一个存储器访问的额外硬件检查。在sgx中,可信应用被编译到可信部分和不可信部分。可信部分例如对于操作系统、基本输入/输出系统、特权系统代码、虚拟机管理器(vmm)、系统管理模式(smm)等不可访问。在操作中,可信应用在存储器的随机存储器内运行和创建飞地。由飞地内的可信部分执行的可信功能被不可信部分调用,并且在飞地内执行的代码将数据看作是明文数据(未加密),并且对数据的外部访问被拒绝。可信部分向调用提供经加密的响应,并且可信应用继续执行。

证实过程能够执行以验证期望的节点(例如,可信应用的可信部分)正在sgx提供的可信执行环境内安全地执行。通常,证实过程包括可信应用从挑战者(例如,区块链网络中的另一节点,区块链网络的密钥管理系统(kms))接收证实请求。作为响应,可信应用请求其飞地产生远程证实,也被称为引用。产生远程证实包括本地证实被从飞地发送到所谓的引用飞地,其验证本地证实,并且通过使用非对称证实密钥对本地证实进行签名来将本地证实转换为远程证实。远程证实(引用)被提供给挑战者(例如,区块链网络的kms)。

挑战者使用证实验证服务来验证远程证实。对于sgx,英特尔提供英特尔证实服务(ias),其从挑战者接收远程证实,并且验证远程证实。更具体地说,ias处理远程证实,并且提供报告(例如,证实验证报告(avr)),指示远程证实是否被验证。如果没有被验证,则会指示错误。如果被验证(期望的代码在可信执行环境中安全执行),则挑战者能够开始或者继续与可信应用交互。例如,对验证做出响应,kms(作为挑战者)能够向执行可信执行环境的节点发布非对称加密密钥(例如,公钥和私钥对)(例如,经过密钥交换过程,例如椭圆曲线diffie-hellman(ecdh))以使得节点能够与其它节点和/或客户端安全地通信。

如本文描述的,区块链网络能够存储不同类型的数据,例如状态数据、区块数据和索引数据。区块数据包括区块链网络中的所有交易,随着新的区块持续添加到区块链,其会占用大量的存储空间。对于区块链节点分别存储区块数据的整体副本会是效率低下的,特别是对于不频繁访问的区块(例如,很久以前添加到区块链的区块)。因此,本申请的实施例提供每个区块链节点存储不频繁访问的区块的一部分,并且在需要时从其它节点检索区块数据的剩余部分,以减少存储消耗。然而,如果在区块链网络中存在故障节点或不可靠节点,则检索到的数据会不可信并且会发生数据丢失。

在一些实施例中,区块链节点可以执行如纠删编码(erasurecode)的ecc,以对不被频繁访问的区块编码。通过共享ecc编码区块,即使存在不真实数据或发生数据丢失,原始区块数据能够被恢复,只要不真实数据或数据丢失小于或等于能够由ecc纠正的错误位或丢失位的最大分数。

在一些实施例中,代替在每一个区块链节点上执行ecc,能够在与可信节点相关联的可信执行环境下执行ecc。通过使用可信执行环境技术,可信节点能够生成可验证的编码区块,将编码区块划分为数据集,并且将数据集和数据存储安排发送到每一个区块链节点而用于存储。在可信执行环境下生成的数据集能够由区块链节点验证。每一个区块链节点能够然后基于数据存储安排来存储数据集的一部分以便节约存储空间。通过可信执行环境启用可信节点,ecc仅需要被执行一次,而不是被每一个区块链节点单独执行。这样,能够显著地降低区块链网络的整体计算资源消耗。

在一些实施例中,每一个区块链节点能够使可信执行环境执行ecc。当计算资源消耗为低且存储的使用率为高时,每一个区块链节点能够单独请求相对应的可信执行环境执行ecc。区块链节点还能够彼此同步并且从与其它区块链节点相关联的可信执行环境请求编码区块。这样,能够进一步优化区块链网络的计算和存储资源的使用。

图3描绘了根据本申请实施例的区块数据编码和哈希处理300的示例。在这一示例中,描绘了具有四个区块链节点的区块链网络,分别是区块链节点302、304、306和308。使用区块链节点302作为示例来说明编码和哈希处理300,区块链节点302能够将区块链网络的区块数据存储到区块312的区块体。在图示的示例中,在区块数据被存储在区块(即,区块100)之后,区块链节点302能够从事与其它区块链节点302、304、306和308的共识处理。在共识处理期间,区块链节点302能够执行共识算法,例如工作证据(pow)或者标桩(stake)证据(pos),以便在区块链上创建相对应的区块。

在实施例中,区块链节点302能够识别一个或多个不被频繁访问的区块。实际上,区块被创建得越久,相对应的区块数据就越不太可能被需要用于诸如执行智能合约的操作。区块链节点302能够确定的是,当本地存储的区块已经被追加到区块链一预定时间量时,该本地存储的区块是不被频繁访问的区块。例如,预定时间量能够是创建区块的平均时间的一倍或者两倍。在一些示例中,当在预定时间量内区块中没有区块数据被检索用于执行智能合约时,该区块也可以被确定为不被频繁访问。

在识别不被频繁访问的区块之后,区块链节点302能够执行每一个不被频繁访问的区块的区块体中的区块数据的ecc314。ecc能够用于通过向数据添加冗余位来控制数据在不可靠传输上的错误或者丢失。冗余性能够允许在不再次传输数据的情况下修正数据的错误或者丢失。一个示例,ecc能够是纠删编码。使用纠删编码,k个符号的消息能够被编码到具有n个符号的码字,其中k和n是自然数,并且k<n。消息能够从n-符号码字的子集恢复。分数r=k/n是纠删代码的代码率。

通过使用ecc,每一个区块链节点能够存储编码区块数据的一部分,并且在需要时从其它区块链节点检索编码区块数据的剩余部分。在一些实施例中,当区块链节点302的计算资源的利用率低于预定值(例如40%)时,能够执行ecc。这样,能够降低对区块链节点302上的其它计算操作的干扰。在一些实施例中,当区块链节点302的存储空间的使用率大于或者等于预定百分比时,能够执行ecc,使得在ecc之后,编码区块数据的一些部分能够被删除以释放存储空间。

再次使用区块100作为示例,并且假设区块链节点302将区块100确定为不被频繁访问的区块,并且执行ecc314,ecc编码数据能够基于数据存储安排而被划分为多个数据集。通常,数据存储安排可以包括用于基于区块链网络中的区块链节点的数量将编码数据划分为多个数据集的一个或多个预定规则。数据存储安排还可以包括分配多个数据集中的一个或多个数据集,以被每一个区块链节点存储或者进行哈希处理。为了确保数据均等,数据存储安排能够包括分配至少一个数据集以被区块链网络的每一个区块链节点存储。

在图3所示的示例中,区块100的编码区块数据被划分为四个数据集,分别是data1、data2、data3和vdata1,每一个由区块链节点302、304、306和308中的一个保持。vdata1能够代表ecc的用于纠错的冗余位。data1根据数据存储安排而被选择由区块链节点302存储。data2、data3和vdata1被选择分别进行哈希处理316以分别生成哈希值dhash2、dhash3和vhash1。根据本申请的实施例,当区块链网络具有多于四个节点时,编码数据能够被划分为多于四个数据集。在一些示例中,每一个区块链节点能够存储多于一个数据集并且对被分配由其他节点存储的数据集的剩余部分进行哈希处理。

现在参照图4,图4描绘了根据本申请实施例的数据存储安排400的示例。如先前讨论的,根据数据存储安排400,data1被选择由区块链节点302存储。基于数据存储安排400,区块链节点304存储data2并且分别对data1、data3和vdata1进行哈希处理以分别生成哈希值dhash1、dhash3和vhash1。区块链节点306存储data3,并且分别对data1、data2和vdata1进行哈希处理以分别生成哈希值dhash1、dhash2和vhash1。区块链节点308存储vdata1,并且分别对data1、data2和vdata3进行哈希处理以分别生成哈希值dhash1、dhash2和dhash3。

返回参照图3,由于哈希值与相同区块的编码数据集相对应,因此它们能够由区块的区块id索引。例如,区块链节点302能够索引与具有区块id100的区块100相关联的data1、dhash1、dhash2和vhash1。这样,区块链节点302能够使用经索引的区块id来将哈希值映射到其相对应的区块。

应该理解,根据数据存储安排,可以做出其他数据存储安排用于区块链节点302、304、306和308。在一些示例中,区块100的编码区块数据能够被划分为多于四个数据集。应该理解,根据数据存储安排,可以做出其它数据存储安排用于区块链节点502、504、506和508。

在生成和存储dhash2、dhash3和vhash1之后,区块链节点302能够从存储中删除data2、data3和vdata1以便节约存储空间。这样,对于每一个区块,区块链节点302仅存储一个ecc编码数据集(即,data1)和三个哈希值(即,dhash2、dhash3和vhash1),而不是整个区块。这样,能够显著降低存储空间。与区块100类似,能够对于由区块链节点304、306和308存储的其它不被频繁访问的区块执行编码和哈希处理。

当区块链节点302确定区块100的区块数据被需要用于执行智能合约时,根据数据存储安排,它能够分别从区块链节点304、306和308检索data2、data3和vdata1。为了从其它区块链节点304、306和308检索数据集,区块链节点302能够根据数据存储安排发送与要被检索的数据集相对应的哈希值。

例如,为了检索data2,区块链节点302能够向区块链节点304发送dhash2。如果区块链节点304已经存储了data2,其能够对接收到dhash2做出响应而将data2发送回到区块链节点302。在从区块链节点304接收到data2之后,区块链节点302能够对接收到的数据集进行哈希处理并且将哈希值与dhash2进行比较。如果哈希值与dhash2相同,则区块链节点302能够确定接收到的数据是真实的。否则,接收到的数据集被确定为不真实。当接收到的数据集被确定为不真实时,区块链节点302能够报告区块链节点304为故障节点(或者拜占庭节点)。如果由区块链节点302接收到的不真实数据的百分比小于或者等于能够由ecc纠正的错误位或者丢失位的最大分数,则区块100能够被从本地存储和接收的数据集恢复。

图5描绘了根据本申请实施例的区块数据编码和哈希处理500的另一示例。在这一示例中,描绘了具有四个区块链节点的区块链网络,其分别是区块链节点502、504、506和508。使用区块链节点502作为示例来说明编码和哈希处理500,当新的区块数据被添加到区块512时,区块链节点502能够执行ecc514以对区块数据进行编码。与在图3的描述中讨论的编码和哈希处理300相比较,区块链节点502在区块数据被写入到区块时对该区块数据执行ecc。这样,基于数据存储安排,区块链节点502不需要存储整个区块,而是能够替代地,存储ecc编码区块数据的选定部分以及与编码区块数据的剩余部分相对应的哈希值。这一编码和哈希处理500能够特别适合于区块链节点502具有低磁盘空间的情况。

在一些实施例中,代替将数据存储为区块,区块链节点502能够存储预写式日志(wal)文件或者其他类似的前滚日志文件(roll-forwardjournalfile)。预写式日志文件能够记录已经被区块链节点502提交(commint)但是还没有被存储的区块数据。使用预写式日志文件,原始区块链数据能够被保存在数据库文件中,而区块链数据的改变能够被写入单独的预写式日志文件。能够利用更改提交前滚,而无需写入原始区块链数据。这一安排允许在更改被提交到预写式日志文件时对区块数据进行继续的操作。通过使用预写式日志文件存储经过编码和哈希处理500进行的更改,区块链节点502能够指示其具有用于共识的区块数据,同时在合适时在后台中执行ecc。这样,当区块链节点502的计算资源的利用率低时,能够执行ecc,以便降低对计算效率的影响或者共识处理的延时。

在一些实施例中,区块链节点502能够将区块数据存储在缓冲器中。当数据的大小大于预定阈值时或者当缓冲器满时,区块链节点502能够对存储在缓冲器中的区块数据执行ecc。在执行ecc之后,区块链节点502能够遵循编码和哈希处理500,以存储编码区块数据和哈希值,如在下面的描述中讨论的。

再次使用区块100作为示例,在执行ecc之后,编码区块数据能够基于数据存储安排被划分为多个数据集。与在图3的描述中所讨论的示例类似,区块100的编码区块数据能够被划分为四个数据集,即,data1、data2、data3和vdata1,每一个数据集由区块链节点502、504、506和508中的一个保持。vdata1能够表示ecc的冗余位。根据数据存储安排,data1被选择由区块链节点502存储。data2、data3和vdata1被选择分别进行哈希处理516以分别生成哈希值dhash2、dhash3和vhash1。哈希值能够由哈希值的相对应的区块的区块id索引。例如,区块链节点502能够索引与具有区块id100的区块100相关联的data1、dhash1、dhash2和vhash1。这样,区块链节点502能够使用索引的区块id来将哈希值映射到其相对应的区块。

应该理解,根据数据存储安排,能够对于一个或多个区块链节点502、504、506和508做出其他数据存储安排。例如,区块100的编码区块数据能够被划分为多于四个数据集。每一个区块链节点502、504、506和508能够存储多于一个数据集,并且对由其他节点存储的数据集的剩余部分进行哈希处理。

在生成dhash2、dhash3和vhash1之后,区块链节点502能够存储data1、dhash2、dhash3和vhash1,并且从存储中删除data2、data3和vdata1以便节省存储空间。这样,对于区块链的每一个区块,区块链节点502仅存储ecc编码区块数据的一个数据集(例如,data1)和三个哈希值(即,dhash2、dhash3和vhash1),而不是原始区块数据,以便节约存储空间。当区块链节点502确定区块100的区块数据被执行智能合约时,它能够根据数据存储安排而分别从区块链节点504、506和508检索data2、data3和vdata1。

为了从其它区块链节点504、506和508检索数据集,区块链节点502能够根据数据存储安排发送与要被检索的数据集相对应的哈希值。例如,为了检索data2,区块链节点502能够向区块链节点504发送dhash2。如果区块链节点504已经存储了data2,则它能够对接收到dhash2做出响应而将data2发送回到区块链节点502。在从区块链节点504接收到data2之后,区块链节点502能够对接收到的数据集进行哈希处理并且将哈希值与dhash2进行比较。如果哈希值与dhash2相同,则区块链节点502能够确定接收到的数据集是真实的。否则,接收到的数据集能够被确定为不真实。当接收到的数据集被确定为不真实时,区块链节点502能够将区块链节点504报告为故障节点(或者拜占庭节点)。如果由区块链节点502接收的不真实数据的百分比小于或者等于能够由ecc纠正的错误位或者丢失位的最大分数时,区块100能够从本地存储或接收的数据集中被恢复。

图6描绘了基于可信执行环境的共享区块链数据存储的处理600的示例。在这一示例中,假设区块链网络610包括四个区块链节点,其为区块链节点630a-d。区块链网络610还包括承载可信执行环境的可信节点620或者与可信节点620通信。可信节点620可以是计算设备、计算系统或者云计算系统。如先前讨论的,可信执行环境能够由可信节点620的一个或多个数据处理器承载,其中该可信节点与一个或多个数据处理器的操作系统隔离,并且该可信执行环境被配置为在一个或多个数据处理器内提供代码执行和数据加载的增强的保密性和完整性。

在一些实施例中,可信节点620可以是具有权威证明(poa)的节点。在一些示例中,可以基于可信节点620的状态提供poa。例如,可信节点620可以是由区块链网络610的部署方所管理的节点。在这样的情况下,可信节点620可以是区块链网络610的一部分或者在区块链网络610外侧。在一些示例中,权威证明可以经过投票来获得。例如,假设区块链网络包括3f+1个节点(在图6中图示的示例中,f=1,当可信节点620参与区块链网络620的共识时),能容忍的最大故障共识节点或者拜占庭节点(不能够动作的节点、或者恶意动作的节点)为f。这样,如果2f+1个节点获得投票(由它们相应的数字签名认可)来选择可信节点620,则投票2f+1能够用作权威证明用于信任可信节点620。

如早前讨论的,可信应用,诸如能够启用sgx的应用,能够包括可信组件(或者飞地组件)和不可信组件(应用组件)。应用组件位于可信执行环境的外侧并且能够经过飞地接口功能而访问可信执行环境的可信计算基(tcb)。在一些实施例中,这些飞地接口功能是由应用组件使用的应用编程接口(api)。应用组件能够使用api来进行“电子调用”以调用可信执行环境中的虚拟机来执行智能合约。虚拟机可以是执行以特定编程语言或者以诸如比特流的二进制格式所编码的程序指令。在一些示例中,虚拟机可以提供抽象层,该抽象层在执行虚拟机的计算设备的程序指令和底层硬件之间。这样的配置可以允许相同的程序指令在具有不同硬件的不同计算设备之间按照相同的方式执行。

在一些实施例中,电子调用可以由应用组件做出以执行智能合约,用于根据如在图3和图5的描述中讨论的编码和哈希处理300和500来执行用于执行一个或多个软件指令的智能合约。可信执行环境接着可以在贯穿处理300、500的多个步骤发生的多个事件期间执行数据处理。从与处理300、500的多个步骤相关联的事件推导的经验证的数据记录比仅基于处理300、500的最后结果的记录更加可靠。换句话说,通过使用可信执行环境技术,对于需要被验证的每一条数据,不仅是该条数据本身被验证,包括生成该条数据的多个步骤的过程也被验证。这确保了最后一条数据高度可靠,这是由于处理的每一步骤都已经被欺骗性修改的概率比较低。这样,编码和哈希处理300、500,如果在可信执行环境620下执行,则能够被仅仅执行一次。计算结果基于处理300、500的步骤可验证,并且能够由区块链节点630a-d信任和使用。相比而言,在没有可信执行环境的情况下,每一个区块链节点需要单独地执行编码和哈希处理300或500,这会明显增加整个区块链网络的计算资源消耗。

在一些实施例中,一个或多个区块链节点603a-d能够向可信节点620发送区块链数据。区块链数据可以包括不被频繁访问的区块,如在图3的描述中讨论的。可信节点620可以基于数据存储安排而调用可信执行环境的飞地组件,以执行一个或多个软件指令。例如,数据存储安排能够是在图4的描述中所讨论的安排400。在对不被频繁访问的区块的每一个进行编码以生成ecc编码区块之后,每一个ecc编码区块能够基于数据存储安排被划分为四个数据集。数据集可以被表示为data1、data2、data3和vdata1,每一个数据集由区块链节点630a-d中的一个保持。vdata1能够代表ecc的用于纠错的冗余位。在一些实施例中,可信节点620还可以在可信执行环境下计算data1、data2、data3和vdata1的哈希值,并被分别表示为dhash1、dhash2、dhash3和vhash1。

在一些实施例中,数据集和哈希值可以由它们相对应的区块id索引。例如,区块链节点630a能够索引与具有区块id100的区块100相关联的data1、dhash1、dhash2和vhash1。这样,区块链节点630a-d能够使用索引的区块id来将哈希值映射到它们相对应的区块用于数据恢复。

在将每一个编码区块划分为数据集data1、data2、data3和vdata1之后,可信节点620能够向每一个区块链节点630a-d发送数据集和数据存储安排。在接收到数据集之后,每一个区块链节点可以基于数据存储安排而存储数据集中的一个或多个,并且对数据集的剩余部分进行哈希处理。例如,区块链节点630a可以存储data1并且对data2、data3和vdata1进行哈希处理以生成dhash2、dhash3和vhash1。在data1、dhash2、dhash3和vhash1被存储之后,相对应的区块能够被删除以节约存储空间。

在一些实施例中,可信节点620能够生成基于区块链数据推导的校验和。校验和也可以被发送到区块链节点630a-d用于误差检测以确保数据完整性。当区块链节点630a确定需要区块100的区块链数据用于执行智能合约时,它能够从可信节点检索data2、data3和vdata1,或者发送相对应的哈希值以从区块链节点630b、630c和630d检索。之后,检索的数据集能与data1组合以恢复相对应的区块。

如本文描述的,通过将数据加载到在可信节点上执行的可信执行环境进行处理,加载在可信执行环境内部的数据能够关于保密性和完整性上而被保护。可信节点可以被信任以生成可验证的编码区块,将编码区块划分为数据集,并且将数据集和数据存储安排发送到每一个区块链节点用于存储。每一个区块链节点可以接着基于数据存储安排而存储数据集的一部分,以节约存储空间。通过可信执行环境启用可信节点,ecc仅需要被执行一次,而不是由每一个区块链节点单独执行。这样,能够显著降低区块链网络的整体计算资源消耗。

图7描绘了基于可信执行环境的共享区块链数据存储的处理700的另一示例。在这一示例中,假设区块链网络710包括四个区块链节点,它们是区块链节点720a-d。区块链节点720a-d中的每一个包括可信执行环境或者通信地耦接到可信执行环境。在一些示例中,可信执行环境730a-d可以各自由与区块链节点720a-d的一个或多个数据处理器的操作系统所隔离的一个或多个数据处理器承载。在一些示例中,可信执行环境730a-d可以由通信地耦接到区块链节点720a-d的一个或多个可信节点的处理器承载。

由于区块链节点720a-d中的每一个具有使用可信执行环境用于可信计算的能力,数据区块的ecc能够根据来自每一个区块链节点的可信执行环境的飞地组件的指令而被单独编码。可信执行环境下被单独编码的区块能够被区块链网络700的其它节点信任。在一些实施例中,当一个或多个不被频繁访问的区块被识别或者当区块链节点具有低计算资源使用或高存储使用时,能够对该一个或多个不被频繁访问的区块执行ecc。在一些实施例中,要在可信执行环境下进行ecc编码的区块的数量可以基于它的数据存储或者计算资源使用状况而针对每一个区块链节点720a-d被动态调节。因此,对于每一个区块链节点720a-d可用的ecc编码区块的数量可以不同。

例如,假设区块链节点720a调用可信执行环境730a的飞地组件来对不被频繁访问的区块91-100执行ecc。在对每一个不被频繁访问的区块进行编码以生成ecc编码区块之后,每一个ecc编码区块能够基于数据存储安排而被划分为四个数据集。例如,数据存储安排可以是在图4的描述中讨论的安排400。数据集能够被表示为data1、data2、data3和vdata1,每一个由区块链节点630a-d中的一个保持。vdata1可以代表ecc的用于纠错的冗余位。在一些实施例中,可信执行环境还能够执行一个或多个软件指令,来在可信执行环境730a下计算data1、data2、data3和vdata1的哈希值,其被分别表示为dhash1、dhash2、dhash3和vhash1。

在一些实施例中,数据集和哈希值可以通过它们相对应的区块id索引。例如,区块链节点720a可以索引与具有区块id100的区块100相关联的data1、dhahs1、dhash2和vhash1。这样,区块链节点720a-d可以使用索引的区块id来将哈希值映射到它们相对应的区块用于数据恢复。

在将每一个编码区块划分为数据集data1、data2、data3和vdata1之后,可信节点620可以向每一个区块链节点630a-d发送数据集和数据存储安排。在接收到数据集之后,每一个区块链节点可以基于数据存储安排而存储数据集中的一个或多个并且对数据集的剩余部分进行哈希处理。例如,区块链节点630a能够存储data1并且对data2、data3和vdata1进行哈希处理以生成dhash2、dhash3和vhash1。在data1、dhash2、dhash3和vhash1被存储之后,相对应的区块能够被删除以节约存储空间。

由于区块91-100在可信执行环境730a下被可靠地编码,因此它们能够由其它区块链节点720b-d验证和信任。例如,如果区块链节点720b对区块91-95执行ecc,则它能够直接从可信执行环境730a和数据存储安排请求ecc编码区块96-100,而不是必须对区块96-100单独地执行ecc。在从可信执行环境730a接收到ecc编码区块96-100之后,区块链节点720可以基于数据存储安排将每一个编码区块划分为data1、data2、data3和vdata1且存储data2,并且对其它数据集进行哈希处理。通过同步在可信执行环境下编码的数据,如果已经由可信执行环境执行了ecc编码处理,则区块链节点720a-d不需要重复相同的ecc编码处理。因此,当每一个区块链节点具有专用可信执行环境时,每一个区块链节点可以单独地将数据加载到相对应的可信执行环境进行处理,以确保数据保密性和完整性。而且,当计算资源消耗为低或者存储的使用率为高时,区块链节点可以请求相对应的可信执行环境执行ecc。区块链节点还可以与区块链网络中的其它区块链节点同步并且从与其它区块链节点相关联的可信执行环境中请求编码区块。这样,能够进一步优化区块链网络的计算资源和存储资源的使用。

在一些实施例中,区块链节点720a-d还可以生成基于在图6的描述中讨论的区块链数据所推导的校验和。校验和也可以在区块链节点720a-d之间同步,用于误差检测以确保数据完整性。

图8图示出根据本申请实施例能够执行的处理800的示例。为了方便,处理800将被描述为由一个或多个计算机的系统执行、位于一个或多个位置中并且根据本说明书被合适地编程。例如,被适当地编程的计算系统(例如,图1的计算系统106、108)中的计算设备能够执行处理800。

在802,计算设备从区块链网络的区块链节点接收在可信执行环境中执行一个或多个软件指令的请求。

在804,计算设备确定用于执行一个或多个软件指令的一个或多个区块不被频繁访问,其中一个或多个区块被存储在区块链节点上并且被追加到区块链。

在806,计算设备在可信执行环境中执行一个或多个区块的纠错编码,以生成一个或多个编码区块。

在808,计算设备基于一个或多个软件指令将一个或多个编码区块中的每一个划分为多个数据集。

在810,计算设备基于一个或多个软件指令向区块链网络的区块链节点发送多个数据集和数据存储安排,其中,数据存储安排指示多个数据集中的至少一个由每一个区块链节点。

在一些实施例中,如果一个或多个区块被创建了预定的时间量或者与一个或多个区块相关联的区块数据持续预定的时间量没有被检索用于执行智能合约,则该一个或多个区块被确定为不被频繁访问的区块。

在一些示例中,响应于确定计算设备的计算资源的利用率小于或等于预定值,或者响应于计算设备的存储空间的使用率大于或等于预定百分比,执行纠错编码。

在一些示例中,通过向一个或多个区块添加冗余位来执行纠错编码。

在一些示例中,纠错编码是纠删编码。

在一些示例中,数据存储安排还指示存储多个数据集的剩余部分的哈希值。

在一些示例中,过程800还包括:在存储了多个数据集的剩余部分的哈希值之后,删除存储在区块链节点上的一个或多个区块。

在一些示例中,过程800还包括:使用一个或多个区块的相对应区块的区块id索引多个数据集中的每一个。

在一些示例中,请求包括一个或多个输入参数并且经过与可信执行环境相关联的应用编程接口被接收。

图9图示出根据本申请实施例的装置900的模块的示例。装置900可以是被配置为通信和共享区块链数据的区块链节点的实施例的示例。装置900可以与上面描述的实施例相对应,并且装置900包括以下:接收模块902,其从区块链网络的区块链节点接收在可信执行环境中执行一个或多个软件指令的请求;确定模块904,其确定用于执行一个或多个软件指令的一个或多个区块不被频繁访问,其中,一个或多个区块被存储在区块链节点上并且被追加到区块链;编码模块906,其在可信执行环境中执行对一个或多个区块的纠错编码,以生成一个或多个编码区块;划分模块908,其基于一个或多个软件指令将一个或多个编码区块中的每一个划分为多个数据集;以及发送模块910,其基于一个或多个软件指令向区块链网络的区块链节点发送多个数据集和数据存储安排,其中,数据存储安排表示多个数据中的至少一个由每一个区块链节点存储。

在可选实施例中,如果一个或多个区块被创建了预定的时间量或者与一个或多个区块相关联的区块数据持续预定的时间量没有被检索用于执行智能合约,则该一个或多个区块被确定为不被频繁访问。

在可选实施例中,响应于确定计算设备的计算资源的使用率小于或等于预定值,或者响应于计算设备的存储空间的使用率大于或等于预定百分比,执行纠错编码。

在可选实施例中,通过向一个或多个区块添加冗余位来执行纠错编码。

在可选实施例中,纠错编码是纠删编码。

在可选实施例中,数据存储安排还指示存储多个数据集的剩余部分的哈希值。

在可选实施例中,装置900还包括:在存储了多个数据集的剩余部分的哈希值之后,删除存储在区块链节点上的一个或多个区块。

在可选实施例中,装置900还包括:使用一个或多个区块的相对应区块的区块id索引多个数据集中的每一个。

在可选实施例中,请求包括一个或多个输入参数并且经过与可信执行环境相关联的应用编程接口而被接收。

先前实施例中示出的系统、装置、模块或者单元能够通过使用计算机芯片或者实体实现,或者能够通过使用具有特定功能的产品实现。典型的实现设备是计算机,并且该计算机可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备,电子邮件收发设备、游戏控制台、平板电脑、可穿戴设备,或者这些设备的任意组合。

对于装置中每一个模块的功能和角色的实施过程,可以参照前一方法中相对应步骤的实施过程。这里出于简化而省去了细节。

由于装置实施例基本与方法实施例相对应,因此对于相关部件,可以参照方法实施例中的相关描述。前面描述的装置实施例只是示例。被描述为单独部分的模块可以是或者可以不是物理上分离的,并且被显示为模块的部分可以是或者可以不是物理模块,可以位于一个位置中,或者可以分布在多个网络模块上。可以基于实际需求选择一些或所有模块以实现本文技术方案的目的。本领域普通技术人员将在不需要创造性劳动的情况下就能理解和实现本申请实施例。

再次参照图9,它可以将被解释为示出了区块链节点的内部功能模块和结构。执行体本质上可以是电子设备,并且电子设备包括如下:一个或多个处理器;以及被配置为存储一个或多个处理器的可执行指令的一个或多个计算机可读存储器。在一些实施例中,一个或多个计算机可读存储器耦接到一个或多个处理器并且其上存储有编程指令,该指令能够由一个或多个处理器执行以执行本文中描述的算法、方法、功能、处理、流程和进程。

本文中描述的技术产生几个技术效果。例如,主题的实施例减小了区块链节点的存储资源的负担,同时维持了区块链节点的计算效率和数据均衡。由于一些区块不被频繁访问(例如,较旧的区块),通过仅将ecc编码区块(简单地,编码区块)的一部分保存在每个区块链节点上并且通过与其它区块链节点共享数据的剩余部分,能够节约区块链节点的存储资源。

在一些实施例中,区块链节点可以存储ecc编码区块的选定子集以及与编码区块的其它子集相对应的哈希值。为了从其它区块链节点检索编码区块的未被保存的子集,区块链节点能够将相对应的哈希值发送到其它区块链节点。由于哈希值是不可逆的,因此通过对接收到的数据进行哈希处理并且将经哈希处理的值与本地存储的哈希值进行比较,区块链节点能够验证接收到的数据是否真实。这样,能够确保数据安全并且能够识别故障节点。即使区块链节点从故障区块链节点接收到不真实数据,相对应的区块也能够被恢复,只要不真实数据的百分比小于或等于ecc允许的错误位的最大分数。

在一些实施例中,代替在每一个区块链节点上执行ecc,可以在与可信节点相关联的可信执行环境中执行ecc。通过使用可信执行环境技术,可信节点能够生成可验证的编码区块,将编码区块划分为数据集,并且将数据集和数据存储安排发送到每一个区块链节点用于存储。在可信执行环境下生成的数据集能够由区块链节点验证以确定数据真实性。每一个区块链节点可以接着基于数据存储安排而存储数据集的一部分以节约存储空间。通过可信执行环境启用可信节点,ecc仅需要被执行一次,而不是由每一个区块链节点单独执行。这样,能够显著减少区块链网络的整体计算资源消耗。

在一些实施例中,每一个区块链节点可以使可信执行环境执行ecc。当计算资源消耗为低或者存储的使用率为高时,每一个区块链节点可以单独地请求相对应的可信执行环境执行ecc。区块链节点也可以与彼此同步并且从与其它区块链节点相关联的可信执行环境请求编码区块。这样,能够进一步优化区块链网络的计算资源和存储资源的使用。

所描述的主题的实施例可以单独或者组合地包括一个或多个特征。例如,在第一实施例中,一种计算机实现的用于通信共享的区块链数据的方法,所述方法包括:从区块链网络的区块链节点接收在可信执行环境中执行一个或多个软件指令的请求;确定用于执行一个或多个软件指令的一个或多个区块不被频繁访问,其中,一个或多个区块被存储在区块链节点上并且被追加到区块链;在可信执行环境中执行一个或多个区块的纠错编码以生成一个或多个编码区块;基于一个或多个软件指令将一个或多个编码区块中的每一个划分为多个数据集;以及基于一个或多个软件指令向区块链网络的区块链节点发送多个数据集和数据存储安排,其中,数据存储安排指示多个数据集中的至少一个由每一个区块链节点存储。

前面和其它描述的实施例可以分别可选地包括下面特征中的一个或多个:

第一特征,能够与下面特征的中的任意一个组合,如果一个或多个区块被创建了预定的时间量,或者与一个或多个区块相关联的区块数据持续预定的时间量没有被检索以执行智能合约,则该一个或多个区块被确定为不被频繁访问。

第二特征,能够与下面特征中的任意一个组合,响应于确定计算设备的计算资源的使用率小于或等于预定值,或者响应于计算设备的存储空间的使用率大于或等于预定百分比,执行纠错编码。

第三特征,能够与下面特征中的任意一个组合,通过向一个或多个区块添加冗余位执行纠错编码。

第四特征,能够与下面特征中的任意一个组合,纠错编码是纠删编码。

第五特征,能够与下面特征中的任意一个组合,数据存储安排还指示存储多个数据集的剩余部分的哈希值。

第六特征,能够与下面特征中的任意一个组合,还包括:在存储了多个数据集的剩余部分的哈希值之后,删除存储在区块链节点上的一个或多个区块。

第七特征,能够与下面特征中的任意一个组合,还包括:使用一个或多个区块的相对应区块的区块id索引多个数据集中的每一个。

第八特征,能够与下面特征中的任意一个组合,请求包括一个或多个输入参数并且该请求经过与可信执行环境相关联的应用编程接口而被接收。

本文中描述的主题、以及动作和操作的实施例可以被实现在数字电子电路中、有形体现的计算机软件或固件中、包括在本文中公开的结构及其结构等同物的计算机硬件中,其或者被实现在它们中的一个或多个的组合中。本文描述的主题的实施例可以被实现为一个或多个计算机程序,例如,一个或多个计算机程序指令模块,编码在计算机程序载体上用于由数据处理装置执行,或者以控制数据处理装置的操作。例如,计算机程序载体可以包括一个或多个计算机可读存储介质,其上编码或者存储有指令。载体可以是有形的非暂态计算机可读介质,例如,磁盘、磁光盘或者光盘、固态驱动器、随机存取存储器(ram)、只读存储器(rom)或者其它媒体类型。可选地或者此外,载体可以是人工生成的传播信号,例如机器生成的电、光学或者电磁信号,其被生成以对信息进行编码用于传输到合适的接收机装置来供数据处理装置执行的信息。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或者串行访问存储器设备或者他们中的一个或多个的组合,或者是机器可读存储设备、机器可读存储基板、随机或者传送访问存储器设备或者他们中的一个或多个的组合的一部分。计算机存储介质不是传播的信号。

计算机程序也可以被称为或者描述为程序、软件、软件应用、app、模块、软件模块、引擎、脚本或者代码,能够被以任何形式的编程语言写入,该编程语言包括编译语言或演绎性语言,或者说明语言或程序性语言;并且它能够被配置为任何形式,包括作为独立程序或者作为模块、组件、引擎、子例程或者适合于在计算环境中执行的其他单元,其中该环境可以包括由数据通信网络的位于一个或多个位置的而互连的一台或多台计算机。

计算机程序可以但是没有必需对应于文件系统中的文件。计算机程序可以被存储在:保持其他程序或数据的文件的一部分中,例如存储在标记语言文档中的一个或多个脚本、存储在专用于所讨论的程序的单个文件中、或者存储在多个协调文件,例如,存储一个或多个模块、子程序或者代码部分的多个文件。

用于执行计算机程序的处理器通过示例的方式既包括通用微处理器和专用微处理器,又包括任何种类的数字计算机的任意一个或多个处理器。通常,处理器将接收用于执行的计算机程序的指令、以及接收来自耦接到处理器的非暂态计算机可读介质的数据。

术语“数据处理装置”包含用于处理数据的所有种类的装置、设备和机器,通过示例的方式包括可编程处理器、计算机或者多个处理器或计算机。数据处理装置可以包括专用逻辑电路,例如fpga(现场可编程门阵列)、asic(专用集成电路)或者gpu(图形处理单元)。除了硬件,装置还可以包括为计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统或者它们中的一个或多个的组合的代码。

本文描述的过程和逻辑流程可以由如下的一台或多台计算机或者处理器执行:该一台或多台计算机或者处理器执行一个或多个计算机程序,以通过对输入数据进行运算并且生成输出来执行操作。过程或者逻辑流程也可以由例如fpga、asic、gpu等的专用逻辑电路执行,或者由专用逻辑电路和一个或多个编程计算机的组合执行。

适合于执行计算机程序的计算机可以基于通用微处理器或者专用微处理器或者二者,或者任何其它种类的中央处理单元。通常,中央处理单元将从只读存储器或随机存取存储器或者二者接收指令和数据。计算机的元件可以包括用于执行指令的中央处理单元、以及用于存储指令和数据的一个或多个存储器设备。中央处理单元和存储器可以由专用逻辑电路补充或者被并入在专用逻辑电路中。

通常,计算机也将包括或者可操作地耦接为从一个或多个存储设备接收数据或者将数据传输到一个或多个存储设备。存储设备可以例如是磁盘、磁光盘或者光盘、固态驱动器或者任何其它类型的非暂态计算机可读介质。然而,计算机不需要具有这样的设备。因而,计算机可以耦接到一个或多个存储设备,例如位于本地和/或远程的一个或多个存储器。例如,计算机可以包括一个或多个本地存储器,该一个或多个本地存储器是计算机的集成组件;或者计算机可以耦接到位于云网络中的一个或多个远程存储器。而且,计算机可以被嵌入在另一设备中,例如,移动电话、个人数字助理(pda)、移动音频或视频播放器、游戏控制器、全球定位系统(gps)接收机或者例如,通用串行总线(usb)闪存驱动器的便携式存储设备,仅举几例。

组件可以通过诸如直接地连接或通过一个或多个中间组件彼此电学连接或光学连接可通信地连接而彼此“耦接”。如果一个组件被集成到另一个中,则该组件也可以彼此“耦接”。例如,被集成到处理器(例如,l2高速缓存组件)中的存储组件“耦接到”处理器。

为了提供与用户的交互,本文描述的主题的实施例能被实现在计算机上或者被配置为与该计算机通信,该计算机具有:诸如lcd(液晶显示器)监视器的显示设备,用于向用户显示信息;以及输入设备,用户能够通过该输入设备向计算机提供输入,例如,键盘和例如鼠标、轨迹球或者触摸板的指针设备。也使用其它种类的设备来提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如,视觉反馈、听觉反馈或者触觉反馈;以及接收来自用户的任何形式的输入,包括声学、语音或者触觉输入。此外,计算机能够通过向由用户使用的设备发送文档并且从该设备接收文档来与用户交互;例如,通过向用户设备上的web浏览器发送web页面以响应从web浏览器收到的请求,或者通过与在用户设备上运行的应用程序(app)交互,例如智能电话或者电子平板。而且,计算机能够通过向个人设备(例如,运行消息应用的智能手机)轮流发送文本消息或者其他形式的消息并接收来自用户的响应消息来与用户交互。

本文使用系统、装置和计算机程序组件有关的术语“配置为”。对于要被配置为执行特定操作或者动作的一个或多个计算机的系统,意指该系统已经在上面安装了在运行中促使系统执行操作或者动作的软件、固件、硬件或者它们的组合。对于要被配置为执行特定操作或动作的一个或多个计算机程序,意指一个或多个程序包括指令,所述指令在由数据处理系统执行时,使得装置执行该操作或者动作。对于要被配置为执行特定操作或动作的专用逻辑电路,意指电路具有执行操作或动作的电子逻辑。

尽管本文包含许多具体实施例细节,但是这些不应该被解释为由权利要求书本身限定的要求保护的范围的限制,而是作为对可以特定于特定实施例的特征的描述。在本文中在单独实施例的上下文中描述的某些特征也可以在单个实施例中组合地实现。相反,在单个实施例的上下文中描述的各种特征也可以单独或者以任何适合的子组合方式实现在多个实施例中。而且,尽管以上可能将特征描述为以某种组合形式起作用,并且甚至初始是被这样地请求保护,但是在一些示例中,来自要求保护的组合的一个或多个特征可以从该组合中删除,并且要求保护可以指向子组合或者子组合的变体。

类似地,尽管以特定顺序在附图中描绘了操作并且在权利要求中叙述了操作,但是这不应该被理解为:要求这样的操作按照所示出的特定顺序或者次序执行,或者要执行所有示出的操作,来达到期望的结果。在某些情况下,多任务和并行处理会是有利的。而且,在上述实施例中各种系统模块和组件的划分不应该被理解为在所有实施例中要求这样的划分,并且应该理解,所描述的程序组件和系统通常能够在单个软件产品中被集成到一起,或者被打包成多个软件产品。

已经描述了主题的特定实施例。其它实施例在下面权利要求的范围内。例如,权利要求中记载的动作能够按照不同的顺序执行并且仍然达到期望的结果。作为一个示例,在相应附图中描绘的过程不必要求所示出的特定顺序示或者次序,来达到期望的结果。在一些示例中,多任务和并行处理会是有利的。

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