优先处理共享区块链数据存储的制作方法

文档序号:21484468发布日期:2020-07-14 17:10阅读:223来源:国知局
优先处理共享区块链数据存储的制作方法
本说明书涉及基于纠错码优先处理区块链数据共享存储。
背景技术
:分布式账本系统(dls),也可称为共识网络和/或区块链网络,使参与的实体能够安全地且不可篡改地存储数据。在不引用任何特定用例的情况下,分布式账本系统通常被称为区块链网络。区块链网络的示例类型可以包括公有区块链网络、私有区块链网络和联盟区块链网络。联盟区块链网络针对选定的实体组群提供,该实体组群控制共识过程,并且所述联盟区块链网络包括访问控制层。基于区块链的程序可以由分布式计算平台执行。例如,分布式计算平台可以包括提供用于执行智能合约的运行时环境的虚拟机。区块链计算平台可以被视为基于交易的状态机。平台中的状态数据可以集合成称为世界状态的全局共享状态。世界状态包括账号地址和账号状态之间的映射。世界状态可以被存储在诸如默克尔帕特里夏树(mpt)的数据结构中。除了状态数据,区块链网络还可以存储其他类型的数据,例如区块数据和索引数据。区块数据可以包括区块头和区块体。区块头可以包括特定区块的身份信息,并且区块体可以包括该区块确认的交易。随着越来越多的交易进入区块链,状态数据和区块数据的大小可能会变得非常大。在某些dls中,每个节点都存储整个区块链副本,这会占用大量存储空间。这是因为所有区块数据和状态数据以回溯到记录在区块链的第一笔交易的方式被存储。在某些dls中,一些共享节点存储整个区块链副本,并与其他可能产生“数据不平等”的区块链节点共享区块链数据。也就是说,当数据在不同节点之间分布不均时,当存储大多数数据的节点出现故障时,数据安全性风险可能会很高。因此,期望能够实现一种在容忍故障节点存在的同时保持数据同等性和完整性的数据存储方案。还期望数据存储方案可根据对区块链网络所做的更改进行调整,并指示可带来存储节省最大化的数据处理方式。技术实现要素:所描述的主题的实施方案可以包括单独或组合的一个或多个特征。例如,在一个实施例中,公开了一种计算机实现的在由计算设备执行的可信执行环境(tee)中处理区块链数据的方法。所述计算设备从区块链网络中的区块链节点接收多个区块。对于所述多个区块中的每个区块,所述计算设备确定存储从所述区块的纠错编码(ecc)编码版本划分的数据集的区块链节点的第一数量和存储从所述区块的ecc编码版本划分的由冗余位组成的数据集的区块链节点的第二数量,基于所述第一数量和所述第二数量计算所述区块的优先级值。并使用ecc对所述多个区块的至少一部分进行编码,以生成多个编码区块,其中所述多个区块的所述至少一部分的优先级值比所述多个区块中除所述多个区块的所述至少一部分以外的剩余部分的优先级值小,并且所述多个编码区块的至少一部分的编码率等于所述区块链网络所需的最小诚实区块链节点数除以所述区块链网络中的区块链节点的总数。在一些实施例中,这些一般和特定方面可以使用系统、方法或计算机程序,或系统、方法和计算机程序的任何组合来实现。前述和其他描述的实施例可以各自可选地包括以下特征中的一个或多个:在一些实施例中,在对所述多个区块的至少一部分进行编码之后,所述计算设备基于所述区块链网络可容忍的最大故障节点数和所述区块链节点的总数,计算所述多个区块的更新的优先级值,其中所需的最小诚实区块链节点数加可容忍的最大故障区块链节点数为所述总数。在一些实施例中,所述计算设备生成提供所述多个区块的区块标识(id)与所述多个区块的优先级值之间的对应关系的索引,并用更新的优先级值更新所述多个区块的至少一部分的优先级值。在一些实施例中,所述计算设备将所述多个编码区块分别划分为多个数据集,计算所述多个数据集的哈希值,并且向所述区块链节点分别发送所述多个数据集中的至少一个数据集、所述哈希值以及提供所述多个数据集与所述哈希值之间的对应关系的索引。在一些实施例中,所述多个区块的至少一部分是所述多个区块的第一至少一部分,所述计算设备还执行以下操作:接收通知,所述通知表示在存储由所述计算设备发送的所述多个数据集中的至少一个数据集并删除所述多个区块的所述第一至少一部分之后,所述区块链节点上存储的区块链数据的大小超过预定数据存储阈值;使用ecc对所述多个区块的第二至少一部分进行编码,其中,所述多个区块的第二至少一部分的优先级值比所述多个区块的所述第一至少一部分的优先级值大,并且比所述多个区块中除所述多个区块的所述第一至少一部分和所述多个区块的所述第二至少一部分之外的剩余部分的优先级值小;以及使用更新的优先级值更新所述多个区块的所述第二至少一部分的优先级值。在一些实施例中,当所述计算设备的计算资源的利用率小于或等于预定值时,执行所述ecc。在一些实施例中,所述ecc是通过向所述多个区块添加冗余位来执行的纠删编码。在一些实施例中,优先级值被计算为所述第一数量减去所述第一数量除以所述第一数量和所述第二数量之间的差。在一些实施例中,所述区块链节点是存储所述区块链的副本的全节点。在一些实施例中,所需的最小诚实区块链节点数基于实用拜占庭容错(pbft)共识协议确定。应该了解,根据本文的方法可以包括本文描述的方面和特征的任意组合。也就是说,根据本文的方法不限于本文具体描述的方面和特征的组合,还包括所提供的方面和特征的任意组合。以下在附图和描述中阐述了本文的一个或多个实施方式的细节。根据说明书和附图以及权利要求书,本文的其他特征和优点将显现。附图说明图1描绘了可用于执行本文实施例的环境的示例。图2描绘了根据本文的实施例的架构的示例。图3描绘了根据本文的实施例的区块数据的编码和哈希处理的示例。图4描绘了根据本文的实施例的数据存储方案的示例。图5描绘了根据本文的实施例的区块数据的编码和哈希处理的另一示例。图6描绘了根据本文的实施例的基于可信执行环境(tee)的共享区块链数据存储过程的示例。图7描绘了根据本文的实施例的向区块链网络添加区块链节点的示例。图8描绘了根据本文的实施例的共识处理的示例。图9描绘了可以根据本文的实施例执行的过程的示例。图10描绘了根据本文的实施例的装置的模块的示例。各附图中相同的附图标记和名称表示相同的元件。具体实施方式本说明书描述了在可信执行环境(tee)中处理区块链数据的技术。这些技术通常涉及从区块链网络中的区块链节点接收多个区块;对于多个区块中的每个区块:确定存储从所述区块的纠错编码(ecc)编码版本划分的数据集的区块链节点的第一数量和存储从所述区块的ecc编码版本划分的由冗余位组成的数据集的区块链节点的第二数量,基于所述第一数量和所述第二数量计算所述区块的优先级值,以及使用ecc对所述多个区块的至少一部分进行编码,以生成多个编码区块,其中所述多个区块的所述至少一部分的优先级值比所述多个区块中除所述多个区块的所述至少一部分以外的剩余部分的优先级值小,并且所述多个编码区块中的至少一部分的编码率等于区块链网络所需的最小诚实区块链节点数除以区块链网络的区块链节点的总数。如本文所述,区块链网络可以存储不同类型的数据,例如状态数据、区块数据和索引数据。区块数据包括区块链网络中的所有交易,由于新区块不断被添加到区块链中,因此会占用大量存储空间。对于区块链节点来说,每个区块链节点存储所有区块数据、尤其是不经常被访问的区块(例如,很久以前添加到区块链中的区块),这可能是低效率的。因此,本文的实施例设定每个区块链节点存储区块中经常被访问的部分,并且当需要时从其他区块链节点检索剩余区块数据,以降低存储消耗。但是,如果区块链网络中存在故障节点或不可靠节点,则检索到的数据不能被信任,并且可能会发生数据丢失。在一些实施例中,区块链节点可以执行ecc诸如纠删编码(erasurecoding)以对不经常访问的区块进行编码。然后,可以将ecc编码区块划分为多个数据集。多个数据集可以被编入索引并分配给不同的区块链节点,以基于数据存储方案进行存储。当区块链节点需要来自不经常访问的区块的数据以执行智能合约时,区块链节点可以基于索引从其他区块链节点检索对应的数据集,以形成ecc编码区块并恢复原始区块。通过共享ecc编码区块,即使存在不可信数据或发生数据丢失,只要诚实的区块链节点的百分比大于或等于ecc的编码率,就可以恢复原始区块数据。在一些实施例中,代替在每个区块链节点上执行ecc,可以在与可信节点相关联的tee下执行ecc。通过使用tee技术,可信节点可以生成可验证的编码区块,将编码区块划分为数据集,并向每个区块链节点发送数据集和数据存储方案以进行存储。在tee下生成的数据集可以由区块链节点进行验证。然后,每个区块链节点可以基于数据存储方案存储一部分数据集,以节省存储空间。通过具有启用tee的可信节点,ecc仅需要执行一次,而不必由每个区块链节点分别执行。这样,区块链网络的总体计算资源消耗可以显著降低。在一些实施例中,新的区块链节点作为全节点被添加到区块链网络。新添加的全节点存储其他节点未共享的附加区块副本。所述附加区块副本可以在存储方面增加区块链网络的冗余。可信节点可以使用全节点中存储的区块副本对该区块再次执行ecc,并向区块链节点发送从ecc编码区块划分的数据集,以替换原始区块链数据。由于不同区块的冗余副本数量可能不同,因此再次执行ecc(re-ecc)可以导致不同的存储节省。因此,可以基于每个区块的冗余度来确定每个区块的re-ecc优先级,从而可以对具有较高re-ecc优先级的区块执行re-ecc操作以实现更大的存储节省。在一些实施例中,当从区块链网络删除区块链节点时。可信节点可以再次执行ecc,以使诚实区块链节点的百分比可以大于或等于ecc的编码率,从而确保数据安全。本文的实施例提供用于确定最大编码率的方法,该最大编码率可以被用来安全地执行re-ecc。执行re-ecc之后,可信节点可以启动与区块链节点的共识处理,以基于re-ecc对新的数据存储方案达成协议。在达成共识后,区块链节点可以安全地删除原始数据,并遵循新的数据存储方案进行区块链数据的存储和恢复。本文中描述的技术产生若干技术效果。例如,本主题的实施例减轻了区块链网络的存储资源的负担,同时维持了区块链节点的计算效率和数据平等性。对于不经常访问的区块(例如,较旧的区块),可以通过在每个区块链节点上仅保存一部分ecc编码区块(本文也称为编码区块)并当需要时从其他区块链节点检索所述编码区块的剩余区块来节省区块链节点的存储资源。在一些实施例中,新的区块链节点作为全节点被添加到区块链网络。新添加的全节点存储其他节点未共享的附加区块副本。所述附加区块副本在存储方面增加区块链网络的冗余。本文的实施例提供了对区块的re-ecc和与其他区块链节点共享从ecc编码区块划分的数据集以降低存储消耗的技术。该技术特别适用于存储资源有限的区块链网络。区块链节点也可以在cpu使用率低时再次执行ecc,以更好地利用计算资源。在一些实施例中,通过在与可信节点相关联的tee中执行ecc,可信节点可以生成编码区块,将编码区块划分为数据集,并向每个区块链节点发送数据集和数据存储方案以进行存储。在tee下生成的数据集可以被区块链节点验证以确保数据的可信性。然后每个区块链节点可以基于数据存储方案存储一部分数据集而不是整个区块,以节省存储空间。通过具有启用tee的可信节点,ecc仅需要执行一次,而不必由每个区块链节点分别执行。这样,区块链网络的总体计算资源消耗可以降低。在一些实施例中,可以在将全区块链节点添加到区块链网络之后再次执行ecc。基于区块链网络可容忍的最大故障区块链节点数,可以以更高的编码率执行ecc,从而提高存储效率。然而,对区块链的每个区块执行re-ecc会消耗大量的计算资源,可以基于re-ecc的存储节省为每个区块确定re-ecc优先级。这样,re-ecc可以优先于具有较高re-ecc优先级的区块,以实现更大的存储节省,同时保持低计算资源消耗。在一些实施例中,可以从区块链网络中删除区块链节点。可以再次执行ecc,以使诚实区块链节点的百分比仍可以大于或等于ecc的编码率,以确保数据安全。本文实施例提供确定编码率的方法,该编码率可被安全地用于re-ecc并提高用以达成有效区块链数据存储的共识的处理的效率。为本文的实施例提供进一步的背景,如上所述,分布式账本系统(dls),也可以称为共识网络(例如,由点对点(peer-to-peer)节点组成)和区块链网络,使参与实体能够安全且不可篡改地进行交易并存储数据。尽管术语“区块链”通常与特定网络和/或用例相关,但本文所使用的区块链一般指在不参考任何特定用例的情况下的dls。区块链是以交易是不可篡改的方式存储交易的数据结构。因此,记录在区块链上的交易是可靠和值得信赖的。区块链包括一个或多个区块。链中的每个区块通过包括紧邻其之前的前一区块的加密哈希值(cryptographichash)链接到该前一区块。每个区块还包括时间戳、自身的加密哈希值以及一个或多个交易。已经由区块链网络的节点验证的交易经哈希处理并编码成默克尔(merkle)树。merkle树是数据结构,其中树的叶节点处的数据是经哈希处理的,并且在该树的每个分支中的所有哈希值在该分支的根处连接。此过程沿着树持续一直到整个树的根,在整个树的根处存储了代表树中所有数据的哈希值。声称是存储在树中的交易的哈希值可以通过确定其是否与树的结构一致而被快速验证。区块链是用于存储交易的去中心化或至少部分去中心化的数据结构,而区块链网络是通过广播、验证和确认交易等来管理、更新和维护一个或多个区块链的计算节点的网络。如上所述,区块链网络可提供为公有区块链网络、私有区块链网络或联盟区块链网络。在本文中参考联盟区块链网络进一步详细描述本文的实施例。然而,可以预期,可以在任何适当类型的区块链网络中实现本文的实施例。通常,联盟区块链网络在参与的实体中是私有的。在联盟区块链网络中,共识过程由授权的节点集控制,该节点集可以被称为共识节点,一个或多个共识节点由相应实体(例如,金融机构、保险公司)操作。例如,由十(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。多个交易的交易数据被哈希处理并被存储在区块中。例如,提供两个交易的哈希值,并对它们本身进行哈希处理以提供另一个哈希值。重复此过程,直到针对所有要存储在区块中的交易提供单个哈希值为止。该哈希值被称为merkle根哈希值,并被存储在区块的头中。任何交易中的更改都会导致其哈希值发生变化,并最终导致merkle根哈希值发生变化。经过共识协议将区块添加到区块链。区块链网络内的多个节点参与共识协议,并从事工作以将区块添加到区块链中。这种节点被称为共识节点。上面介绍的pbft用作共识协议的非限制性示例。共识节点执行共识协议以将交易添加到区块链,并更新区块链网络的整体状态。更详细地,共识节点生成区块头,对区块中的所有交易进行哈希处理,并将哈希值成对地组合以生成进一步的哈希值,直到为区块中的所有交易提供单个哈希值(merkle根哈希值)。将此哈希值添加到区块头中。共识节点还确定区块链中最新区块(即,添加到区块链中的最后一个区块)的哈希值。共识节点还向区块头添加随机数(nonce)和时间戳。通常,pbft提供容忍拜占庭故障(例如,故障节点、恶意节点)的实用拜占庭状态机复制。这通过在pbft中假设将发生故障(例如,假设存在独立节点故障和/或由共识节点发送的操纵消息)而实现。在pbft中,以包括主共识节点和备共识节点的序列提供共识节点。主共识节点被周期性地改变,通过区块链网络内的所有共识节点对区块链网络的全局状态达成一致,将交易添加到区块链中。在该处理中,消息在共识节点之间传输,并且每个共识节点证明消息是从指定的对等节点(peernode)接收的,并验证在传输期间消息未被修改。在pbft中,共识协议是在所有共识节点以相同的状态开始的情况下分多个阶段提供的。首先,客户端向主共识节点发送调用服务操作(例如,在区块链网络内执行交易)的请求。响应于接收到请求,主共识节点将请求多播到备共识节点。备共识节点执行请求,并且各自向客户端发送回复。客户端等待直到接收到阈值数量的回复。在一些示例中,客户端等待直到接收到f+1个回复,其中f是区块链网络内可以容忍的故障共识节点的最大数量。在pbft中,故障共识节点的最大数量必须小于共识节点总数的1/3。最终结果是,足够数量的共识节点就将记录添加到区块链的顺序达成一致,并且该记录或被接受或被拒绝。在一些区块链网络中,实施密码学来维护交易的隐私。例如,如果两个节点想要保持交易隐私,以使得区块链网络中的其他节点不能够看出交易的细节,则这两个节点可以对交易数据进行加密处理。加密处理的示例包括但不限于对称加密和非对称加密。对称加密是指使用单个密钥既进行加密(从明文生成密文)又进行解密(从密文生成明文)的加密过程。在对称加密中,同一密钥对于多个节点可用,因此每个节点都可以对交易数据进行加密/解密。非对称加密使用密钥对,每个密钥对包括私钥和公钥,私钥仅对于相应节点是已知的,而公钥对于区块链网络中的任何或所有其他节点是已知的。节点可以使用另一个节点的公钥来加密数据,并且加密的数据可以使用其他节点的私钥被解密。例如,再次参考图2,参与者a可以使用参与者b的公钥来加密数据,并将加密的数据发送给参与者b。参与者b可以使用其私钥来解密该加密的数据(密文)并提取原始数据(明文)。使用节点的公钥加密的消息只能使用该节点的私钥解密。非对称加密用于提供数字签名,这使得交易中的参与者能够确认交易中的其他参与者以及交易的有效性。例如,节点可以对消息进行数字签名,而另一个节点可以根据参与者a的该数字签名来确认该消息是由该节点发送的。数字签名也可以用于确保消息在传输过程中不被篡改。例如,再次参考图2,参与者a将向参与者b发送消息。参与者a生成该消息的哈希值,然后使用其私钥加密该哈希值以提供作为加密哈希值的数字签名。参与者a将该数字签名附加到该消息上,并将该具有数字签名的消息发送给参与者b。参与者b使用参与者a的公钥解密该数字签名,并提取哈希值。参与者b对该消息进行哈希处理并比较哈希值。如果哈希值相同,则参与者b可以确认该消息确实来自参与者a,且未被篡改。在一些实施例中,区块链网络的节点和/或与区块链网络通信的节点可以使用tee(可信执行环境)来操作。在较高层面上,tee是硬件(一个或多个处理器、存储器)内与硬件的操作环境(例如,操作系统(os)、基本输入/输出系统(bios))隔离的可信环境。更详细地,tee是确保主处理器中执行的代码和加载的数据的机密性和完整性的处理器的独立安全区域。在处理器内,tee与os并行运行。至少部分所谓的可信应用(ta)在tee内执行,并且可以访问处理器和存储器。通过tee,ta被保护免受主os中运行的其他应用的影响。此外,tee以密码学方式将tee内的ta彼此隔离。tee的示例包括由美国加利福尼亚州圣克拉拉的英特尔公司提供的软件保护扩展(softwareguardextensions,sgx)。尽管本文以示例的方式讨论了sgx,但可以预期本文的实施例可以使用任何适当的tee来实现。sgx提供基于硬件的tee。在sgx中,可信硬件是中央处理器(cpu)的核心,物理存储器的一部分被隔离以保护选择的代码和数据。存储器的隔离部分被称为飞地(enclave)。更具体地,飞地被提供为存储器中的飞地页面缓存(epc),并被映射到应用地址空间。存储器(例如,dram)包括用于sgx的保留随机存储器(prm)。prm是最低bios级别的连续存储空间,并且不能被任何软件访问。每个epc都是存储器集(例如4kb),其由os分配以在prm中加载应用数据和代码。epc元数据(epcm)是各个epc的入口地址,并且确保每个epc只能由一个飞地共享。也就是说,单个飞地可以使用多个epc,而一个epc专用于单个飞地。在执行ta期间,处理器在访问存储在飞地中的数据时以所谓的飞地模式操作。飞地模式下的操作对每个存储器访问强制执行额外的硬件检查。在sgx中,ta被编译为可信部分和不可信部分。可信部分不可被例如os、bios、特权系统代码、虚拟机管理器(vmm)、系统管理模式(smm)等访问。在操作中,ta在存储器的prm内运行并创建飞地。飞地内的可信部分执行的可信函数被不可信部分调用,在飞地内执行的代码将数据视为明文数据(未加密),并且对数据的外部访问被拒绝。可信部分提供对所述调用的加密响应,ta继续执行。可执行认证处理以验证预期代码(例如,ta的可信部分)是否在sgx提供的tee内安全执行。通常,认证处理包括ta接收来自质询者(例如,区块链网络中的另一个节点、区块链网络的密钥管理系统(kms))的认证请求。作为响应,ta要求其飞地提供远程认证,也称为报价(quote)。提供远程认证包括从飞地向所谓的报价飞地发送本地认证,该报价飞地验证本地认证并通过使用非对称认证密钥对所述本地认证签名,从而将所述本地认证转换为远程认证。该远程认证(报价)被提供给质询者(例如,区块链网络的kms)。质询者使用认证验证服务来验证远程认证。对于sgx,英特尔提供英特尔认证服务(ias),其接收来自质询者的远程认证并验证该远程认证。更具体地,ias处理该远程认证并提供报告(例如,认证验证报告(avr)),该报告指示该远程认证是否通过验证。如果未通过验证,则可以指示错误。如果通过验证(例如,预期代码在tee中安全地执行),质询者可以发起或继续与ta交互。例如,响应于所述验证,kms(作为质询者)可以对执行tee的节点(例如,通过密钥交换处理,诸如椭圆曲线diffie-hellman(ecdh))发布非对称加密密钥(例如,公钥和私钥对),以使这些节点能够与其他节点和/或客户端安全通信。图3描绘了根据本文的实施例的区块数据的编码和哈希处理300的示例。在此示例中,描绘了4个区块链节点的区块链网络,4个区块链节点是区块链节点302、304、306和308。以区块链节点302为例来说明编码和哈希处理300,区块链节点302可以将区块链网络的区块数据存储到区块312的区块体中。在所示的示例中,区块数据被存储在区块100中。之后,区块链节点302可以与其他区块链节点304、306和308一起参与共识处理。在共识处理中,区块链节点302可执行共识算法,例如工作量证明(pow)或权益证明(pos),以在区块链上创建相应的区块。在一些实施例中,区块链节点302可以识别一个或多个不经常访问的区块。实际上,区块已经创建的时间越长,对应的区块数据为执行诸如智能合约的操作所需要的可能性就越小。当本地存储的区块是针对预定时间量已经在区块链上创建的历史区块时,区块链节点302可以确定本地存储的区块不常被访问。例如,预定时间量可以是创建区块的平均时间的一倍或两倍。在一些示例中,当区块中的区块数据在预定时间量内没有被检索用以执行智能合约时,该区块也可以被确定为不经常被访问。在识别不经常访问的区块之后,区块链节点302可以对每个不经常被访问的区块的区块体中的区块数据执行ecc314。通过向数据添加冗余位(也称为冗余),ecc可用于控制不可靠传输中的数据错误或丢失。冗余位可以是许多原始信息位的复杂函数。冗余使得数据的错误或丢失可以被纠正,而无需再次发送数据。原始信息可能会或可能不会真正地出现在编码输出中。编码输出中包括未修改的原始信息的ecc代码被称为系统ecc代码,而那些不包括的被称为非系统ecc代码。可以通过ecc纠正的错误或丢失位的最大比例由ecc代码的设计确定。因此,不同的纠错码用于不同的条件。通常,更强的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和data3进行哈希处理以分别生成哈希值dhash1、dhash2和dhash3。再次参考图3,因为哈希值对应于相同区块的编码数据集,所以它们可以通过该区块的区块id被索引。例如,区块链节点302可以用区块id100索引与区块100相关联的data1、dhash1、dhash2和vhash1。这样,区块链节点302可以使用索引的区块id将哈希值映射到其对应的区块。在图6的描述中讨论了索引数据集和哈希值的更详细的示例。应当理解,根据数据存储方案,可以为区块链节点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。如上所述,区块链网络可以存储不同类型的数据,例如状态数据、区块数据和索引数据。状态数据通常存储为内容寻址状态树,例如mpt或固定深度默克尔树(fdmt)。内容寻址状态树本质上是增加的。即,通过添加新的树结构而不是仅更新现有状态树的值来反映账号状态的变化。因此,当将区块连续添加到区块链时,内容寻址状态树的大小会变得非常大。在fdmt存储方案下,状态数据可以被分为与当前区块关联的当前状态数据和与区块链的所有区块关联的历史状态数据。fdmt中的大多数数据是不经常使用的历史状态数据。就存储资源的使用而言,将所有历史状态数据存储在每个共识节点中可能效率很低。在一些实施例中,类似于编码和共享区块数据,ecc诸如纠删编码可以用于编码历史状态数据。区块链网络中的每个共识节点仅存储部分历史状态数据,并从其他节点检索剩余的历史状态数据以减少存储消耗。通过共享ecc编码的历史状态数据而不是原始历史状态数据,即使存在不可信数据或发生数据丢失,只要不可信数据或数据丢失的百分比小于或等于能够由ecc纠正的错误或丢失位的最大比例,就可以恢复原始历史状态数据。图5描绘了根据本文的实施例的区块数据的编码和哈希处理500的另一示例。在此示例中,描绘了4个区块链节点的区块链网络,4个区块链节点是区块链节点502、504、506和508。以区块链节点502为例来说明编码及哈希处理500,当新的区块数据被添加至区块512时,区块链节点502可执行ecc514以对区块数据进行编码。与在图3的描述中讨论的编码和哈希处理300相比,当区块数据被写入区块时,区块链节点502对区块数据执行ecc。这样,区块链节点502不需要存储整个区块,而是可以基于数据存储方案存储ecc编码区块数据的选定部分和与剩余的编码区块数据相对应的哈希值。该编码和哈希处理500可以特别适合于区块链节点502具有低磁盘空间的情况。在一些实施例中,代替将数据存储为区块,区块链节点502可以存储预写日志(wal)文件或其他类似的前滚日志文件(roll-forwardjournalfile)。预写日志文件可以记录已经被区块链节点502提交但尚未被存储的区块数据。使用预写日志文件,原始的区块链数据可以被保存在数据库文件中,而区块链数据的更改可以被写入单独的预写日志文件中。能够利用更改提交前滚,而无需写入原始区块链数据。这种安排允许在更改被提交至预写日志文件时继续进行区块链数据的操作。通过使用预写日志文件存储通过编码和哈希处理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将哈希值映射到其对应的区块。在图6的描述中讨论了索引数据集和哈希值的更详细的示例。应当理解,根据数据存储方案,可以为一个或多个区块链节点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。如前所述,通过执行编码和哈希处理,区块链数据可以被ecc编码并被划分为多个数据集。为了节省存储空间,每个区块链节点可以基于数据存储方案存储多个数据集中的一个或多个以及剩余数据集的哈希值。存储的数据集和哈希值可以使用区块id进行索引,以便区块链节点从其他节点检索数据集以恢复原始数据。图6描绘了根据本文的实施例的基于tee的共享区块链数据存储的处理600的示例。在该示例中,假设区块链网络610包括4个区块链节点,它们是区块链节点630a-d。区块链网络610还包括承载tee的可信节点620或与承载tee的可信节点620通信。可信节点620可以是计算设备、计算系统或云计算系统。如前所述,tee可以由与一个或多个数据处理器的操作系统隔离的可信节点620的一个或多个数据处理器承载,并且被配置为在一个或多个数据处理器内提供代码执行和数据加载的增强的机密性和完整性。在一些实施例中,可信节点620可以是具有权限证明(poa)的节点。在一些示例中,可以基于可信节点620的状态提供poa。例如,可信节点620可以是由区块链网络610的部署方管理的节点。在这种情况下,可信节点620可以是区块链网络610的一部分,也可以在区块链网络610的外部。在某些示例中,可以通过投票获得poa。例如,假设区块链网络包括3f+1个节点(在图6所示的示例中,f=1,当可信节点620参与区块链网络610的共识时),在pbft共识协议下,可以容忍的故障共识节点或拜占庭节点(即,不能行动或恶意行动的节点)最多为f。这样,如果2f+1个节点投票(由其各自的数字签名背书的)选择可信节点620,则接收的2f+1票可以用作可信节点620的poa。如上所述,ta(诸如启用sgx的应用)可以包括可信组件(或飞地组件)和不可信组件(应用组件)。应用组件位于tee外部,可以通过飞地接口功能访问tee的tcb。在一些实施方案中,这些飞地接口功能是由应用组件使用的应用编程接口(api)。应用组件可以使用api来进行“ecalls”以调用tee中的虚拟机以执行智能合约。虚拟机可以是执行以特定编程语言或者诸如位流(或称为比特流)的二进制格式编码的程序指令的软件程序。在一些示例中,虚拟机可以提供程序指令和执行虚拟机的计算设备的底层硬件之间的抽象层。这样的配置可以允许相同的程序指令以相同的方式在具有不同硬件的不同计算设备上执行。在一些实施例中,调用(ecall)可以由应用组件进行以执行智能合约,该智能合约用于根据在图3和图5的描述中讨论的编码和哈希处理300和500执行一个或多个软件指令。然后,tee可以在整个处理300、500的多个步骤中发生的多个事件期间执行数据处理。与仅基于处理300、500的最终结果的记录相比,从与处理300、500的多个步骤相关联的事件得到的数据的经验证的记录更可靠。换句话说,通过使用tee技术,对于需要被验证的每段数据,不仅验证这段数据本身,而且还验证包括生成该段数据的多个步骤的处理。这确保了最后一段数据是高度可靠的,因为该处理的每个步骤都被欺诈性地修改的概率很小。这样,如果在tee620下执行,则编码和哈希处理300、500可以被执行一次。计算结果基于处理300、500的步骤是可验证的,并且可以被区块链节点630a-d信任和使用。相比之下,在没有tee的情况下,每个区块链节点都需要单独执行编码和哈希处理300或500,这会显著增加整个区块链网络的计算资源消耗。在一些实施例中,一个或多个区块链节点603a-d可以向可信节点620发送区块链数据。区块链数据可以包括不经常访问的区块,如在图3的描述中所讨论的。可信节点620可以基于数据存储方案来调用tee的飞地组件以执行一个或多个软件指令。例如,数据存储方案可以是在图4的描述中讨论的方案400。在对每个不经常访问的区块进行编码之后,生成ecc编码区块。基于数据存储方案,每个ecc编码区块可以被划分为四个数据集。数据集可以表示为data1、data2、data3和vdata1,每个数据集由区块链节点630a-d之一保存。vdata1可以代表用于纠错的ecc的冗余位。在一些实施例中,可信节点620还可以在tee下计算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。在存储一个或多个数据集和哈希值之后,可以删除相应的区块和数据集的剩余部分,以节省区块链节点的存储空间。例如,在存储了与区块100相关联的data1、dhash2、dhash3和vhash1之后,可以从区块链节点删除data2、data3、vdata1和区块100。在一些实施例中,可信节点620可以生成基于区块链数据得出的校验和。该校验和也可以被发送到区块链节点630a-d进行错误检测,以确保数据完整性。当区块链节点630a确定执行智能合约需要区块100的区块链数据时,它可以从可信节点检索data2、data3和vdata1,或发送相应的哈希值以从区块链节点630b、630c和630d检索数据集。然后检索的数据集可以与data1组合以恢复相应的区块。如本文所述,通过将数据加载到tee以进行处理,可以保护数据的机密性和完整性。可以信任可信节点620生成可验证的编码区块,将编码区块划分为数据集,并向每个区块链节点发送数据集和数据存储方案以进行存储。然后,每个区块链节点都可以基于数据存储方案存储一部分数据集,以节省存储空间。通过具有启用tee的可信节点,ecc只需由可信节点执行一次,而不是由每个区块链节点分别执行。这样,区块链网络的总体计算资源消耗可以显著降低。图7描绘了根据本文的实施例的将区块链节点添加到区块链网络的示例700。如前所述,可以执行编码和哈希处理以有效降低区块链网络的存储消耗。在pbft共识协议下,如果区块链节点总数由n表示,故障区块链节点的数量由f表示,则n>3f必须满足区块链网络是拜占庭容错的。例如,在四节点区块链网络中,在pbft共识协议下,区块链网络可容忍的最大故障节点数为1。换句话说,区块链网络所需的最小诚实区块链节点数为3。因此,如果区块链节点以不大于3/4的编码率(即原始数据的比例不超过总编码数据的3/4)对原始区块链数据(或原始数据)执行ecc,并且每个区块链节点存储1/4的编码区块链数据(或编码数据),即使区块链节点之一是故障节点,也可以恢复原始数据。冗余率可以定义为由区块链网络的区块链节点存储的编码数据和原始数据的总量除以原始数据的副本的量。在该示例中,由于没有区块链节点存储原始数据,因此冗余率是编码率(即编码数据量除以原始数据)的倒数,即4/3。在所描绘的示例700中,假设当生成区块1至100时,在区块链网络中存在4个区块链节点,节点1、节点2、节点3和节点4。在pbft共识协议下,区块链网络所需的最小诚实区块链节点数为3。如在图3和图5的描述中所讨论的,应用编码和哈希处理,可以以3/4的最大编码率对区块1至100分别进行编码。每个编码区块可以被划分为3个原始数据集和1个冗余位数据集,以由4个区块链节点存储。在生成区块101期间,节点5作为全节点被添加到区块链网络中。也就是说,节点5存储区块1-100的整个副本,但是从生成区块101开始,节点5与4个现有区块链节点一起参与编码和哈希处理。假设在生成区块101-200期间,区块链网络有5个区块链节点,那么在pbft共识协议下,区块链网络所需的最小诚实区块链节点数为4。这样,可以以4/5的最大编码率对区块101-200分别进行编码。每个编码区块可以划分为4个原始数据集和1个冗余位数据集,以由区块链网络中的5个区块链节点存储。在生成区块201期间,节点6作为全节点被添加到区块链网络中。也就是说,节点6存储区块1-200的整个副本,但是自区块201生成以来,节点6与区块链网络的其他区块链节点一起参与编码和哈希处理。假设在生成区块201-300期间,区块链网络有6个区块链节点,那么在pbft共识协议下,区块链网络所需的最小诚实区块链节点数为5。这样,可以以5/6的最大编码率对区块201-300分别进行编码。每个编码区块可以划分为4个原始数据集和2个冗余位数据集,以由区块链网络中的6个区块链节点存储。在生成区块301期间,节点7作为全节点被添加到区块链网络中。也就是说,节点7存储区块1-300的整个副本,但是自区块301生成以来,节点7与区块链网络的其他区块链节点一起参与编码和哈希处理。假设在生成区块301-400期间,区块链网络有7个区块链节点,那么在pbft共识协议下,区块链网络所需的最小诚实区块链节点数为5。这样,可以以5/7的最大编码率对区块301-400分别进行编码。每个编码区块可以划分为5个原始数据集和2个冗余位数据集,以由区块链网络中的7个区块链节点存储。在生成区块401期间,节点8作为全节点被添加到区块链网络中。也就是说,节点8存储区块1-400的整个副本,但是自区块401生成以来,节点8与区块链网络的其他区块链节点一起参与编码和哈希处理。假设在生成区块401-500期间,区块链网络有8个区块链节点,那么在pbft共识协议下,区块链网络所需的最小诚实区块链节点数为6。这样,可以以3/4的最大编码率对区块401-500分别进行编码。每个编码区块可以划分为6个原始数据集和2个冗余位数据集,以由区块链网络中的8个区块链节点存储。在生成区块501期间,节点9作为全节点被添加到区块链网络中。也就是说,节点9存储区块1-500的整个副本,但是自区块501生成以来,节点9与区块链网络的其他区块链节点一起参与编码和哈希处理。区块id冗余率容错能力1-1005+(3+1)/36/9101–2004+(4+1)/45/9201–3003+(5+1)/54/9301–4002+(5+2)/54/9401–5001+(6+2)/63/9表1表1显示了根据上述示例700的具有9个区块链节点的区块链网络下的区块1-500的冗余率和容错能力。节点1、2、3和4存储从ecc编码区块1-100划分的数据集。节点5、6、7、8和9存储原始区块1-100。由于用于编码区块1-100的编码率为3/4,因此节点1、2、3和4存储原始区块的4/3副本。节点5、6、7、8和9各自存储原始区块的一个副本。因此,存储区块1-100的冗余率为5+4/3。容错能力是区块链网络可以容忍的故障区块链节点的比例。由于节点5、6、7、8和9存储原始区块1-100,只要它们中的任何一个是诚实区块链节点,它就可以将原始区块提供给区块链网络的其他区块链节点。如果节点5、6、7、8和9均为故障区块链节点,则存储数据集的节点1、2、3和4中的3个节点必须是诚实节点才能恢复原始区块的副本。因此,9个区块链节点中最多6个节点可以是故障区块链节点。容错能力为2/3。假设每个区块链节点存储一个数据集,如果从ecc编码区块划分的数据集的数量为e,则可以将存储原始区块的区块链节点的数量计算为n–e。基于以上分析,如果m个区块链节点存储冗余位数据集,则最大允许故障区块链节点df可以表示为df=m+n–e。由于df大于等于f,因此可以推断出e–m≤n–f。也就是说,当e–m≤n–f(e>0)时,ecc的编码率(e–m)/e足够低,以容忍n个故障节点中的f个并确保数据恢复的安全性。冗余率r可以表示为r=n–e+e/(e–m)。对于区块101-200,节点1、2、3、4和5存储从ecc编码区块101-200划分的数据集。节点6、7、8和9存储原始区块。由于用于编码区块101-200的编码率为4/5,因此节点1、2、3、4和5存储原始区块的5/4副本。节点6、7、8和9各自存储原始区块的一个副本。因此,存储区块101-200的冗余率为4+5/4。9个区块链节点中最多5个节点可以是故障区块链节点。容错能力为5/9。对于区块201至300,节点1、2、3、4、5和6存储从ecc编码区块201-300划分的数据集。节点7、8和9存储原始区块。由于用于编码区块201-300的编码率为2/3,因此节点1、2、3、4、5和6存储原始区块的6/5副本。节点7、8和9各自存储原始区块的一个副本。因此,存储区块201-300的冗余率为3+6/5。9个区块链节点中最多4个节点可以是故障区块链节点。容错能力为4/9。对于区块301至400,节点1、2、3、4、5、6和7存储从ecc编码区块301-400划分的数据集。节点8和9存储原始区块。由于用于编码区块301-400的编码率为5/7,因此节点1、2、3、4、5、6和7存储原始区块的7/5副本。节点8和9各自存储原始区块的一个副本。因此,存储区块301-400的冗余率为2+7/5。9个区块链节点中最多4个节点可以是故障区块链节点。容错能力为4/9。对于区块401-500,节点1、2、3、4、5、6、7和8存储从ecc编码区块301-400划分的数据集。节点9存储原始区块。由于用于编码区块401-500的编码率为3/4,因此节点1、2、3、4、5、6、7和8存储原始区块的4/3副本。节点9存储原始区块的一个副本。因此,存储区块401-500的冗余率为1+7/5。9个区块链节点中最多3个节点可以是故障区块链节点。容错能力为1/3。如果区块链节点同意对区块1-500再次执行ecc编码,则由于9个区块链节点的区块链网络可容忍的最大故障区块链节点数为2,ecc的最大编码率为7/9。执行编码和哈希处理之后,容错能力降低到2/9。另一方面,冗余率降低到9/7,这显著低于再次执行该处理之前的冗余率。因此,当将原始区块存储在至少一个区块链节点中时,再次执行编码和哈希处理可有效降低系统的冗余率和存储消耗。在一些情况下,区块链节点可以确定其存储的区块链数据超过预定数据量阈值。在这种情况下,区块链节点可以向其他区块链节点发起请求,以对一个或多个区块再次执行编码和哈希处理,以降低区块链网络的冗余率。在一些情况下,诸如响应于确定区块链网络的冗余率大于预定阈值,用于再次执行编码和哈希处理的请求可以由区块链网络外部的可信节点发起。例如,对于如示例700所示的具有9个区块链节点的区块链网络,pbft协议下的最小冗余率是9/7。当一个或多个区块的冗余率超过2时,可信节点可以发起请求。在一些实施例中,所述区块可以基于它们的冗余率被选择以再次执行编码和哈希处理。由于存储上节省更多,具有较高冗余率的区块可以以较高优先级被选择。用于再次执行编码和哈希处理的请求可以包括用于执行ecc的最大编码率,该最大编码率考虑了可容忍的最大故障区块链节点数(即,f/(3f+1))。所述请求还可以包括将一个或多个编码区块中的每个编码区块划分为多个数据集并将多个数据集分配给区块链网络的区块链节点的指令。例如,所述指令可以指示将每个编码区块划分为九个数据集,每个数据集被分配给9个区块链节点之一。在某些情况下,所述指令由在图3至图5的描述中所讨论的数据存储方案提供。如果所述请求是由区块链节点发起的,则区块链网络可以根据所述请求中包括的指令完成pbft算法的三个阶段处理(预准备、准备和提交阶段)以达成re-ecc的共识。发起所述请求的区块链节点可以充当用于执行pbft算法的主区块链节点。任何接收所述请求的区块链节点都可以从主区块链节点中识别并检索一个或多个区块。如果接收到来自具有权限证明的可信节点的所述请求,则区块链节点还可以根据所述指令直接再次执行ecc。在这种情况下,所述请求还可包括识别存储一个或多个区块的至少一个区块链节点的标识。然后,接收所述请求的区块链节点可以基于所述请求识别存储所述一个或多个区块的区块链网络的至少一个区块链节点,并从至少一个区块链节点之一中检索一个或多个区块。为了检索一个或多个区块,区块链节点可以向至少一个区块链节点之一发送一个或多个区块的哈希值。在一些示例中,哈希值被存储在区块链的区块头中。在接收一个或多个区块之后,区块链节点可以通过比较接收的一个或多个区块的哈希值与其发送的对应哈希值来确定接收的一个或多个区块是否是经认证的。如果哈希值相同,则可以确定接收的一个或多个区块是可信的。否则,区块链节点可以报告从其接收一个或多个区块的区块链节点为故障节点。然后,区块链节点可以基于该请求中提供的编码率执行一个或多个区块的ecc,以生成一个或多个编码区块。在图6所示的示例中,对于一个或多个编码区块中的每个编码区块,区块链节点可以根据指令将编码区块划分为九个数据集,并根据指令存储分配给区块链节点的九个数据集中的至少一个数据集。然后,区块链节点可以对多个数据集中的剩余八个数据集进行哈希处理,以生成与剩余八个数据集相对应的哈希值,存储哈希值,并删除一个或多个区块。此后,一个或多个区块的编码和哈希处理便完成。对于所有可用区块完成编码和哈希处理之后,如果区块链网络的冗余率仍然超过预定数据存储阈值,或者区块链节点的存储消耗大于预定数据存储阈值,则区块链节点可以通知其他区块链节点响应于要添加到区块链网络的新区块链节点而触发另一轮编码和哈希处理。例如,如果在添加节点9之前8个区块链节点对区块1-400执行编码和哈希处理,并且区块链节点的存储消耗仍大于节点8的存储容量的90%,则节点8可以向节点1-7发送通知,以对添加节点8之后生成的区块执行另一轮编码和哈希处理。图8描绘了根据本文的实施例的共识处理800的示例。在该示例中,共识处理800由区块链网络的可信节点810和4个区块链节点802、804、806和808执行。如在图7的描述中所讨论的,当将新的全区块链节点添加到区块链网络时,由于全节点尚未参与编码和哈希处理,因此它们存储原始区块而不是存储从ecc编码区块划分出的数据集。可以通过具有较高编码率的区块的re-ecc降低由全节点存储的区块的冗余率。但是,在每个区块链节点上执行re-ecc可能会显著增加区块链网络的计算负担。如在图6的描述中所讨论的,区块链数据可以被加载到可信节点810的tee。可信节点810可以生成可验证的编码区块,将编码区块划分为数据集,并向每个区块链节点发送数据集和数据存储方案以进行存储。通过具有启用tee的可信节点,ecc仅需要执行一次,而不必由每个区块链节点分别执行。可以降低区块链网络的总体计算资源消耗。在一些实施例中,区块链节点可以向可信节点810发送请求,以再次执行对一个或多个区块的编码和哈希处理。在接收该请求之后,可信节点810可以标识区块链网络中存储一个或多个区块的区块链节点802、804、806或808。区块链节点可以是发送该请求的同一节点,也可以是存储一个或多个区块的不同区块链节点。假设可信节点810标识区块链节点802存储一个或多个区块,则可信节点810可以从区块链节点802检索所述一个或多个区块。为了检索所述一个或多个区块,可信节点810可以向区块链节点802发送与所述一个或多个区块相对应的哈希值。区块链节点802可以标识与哈希值相对应的一个或多个区块,并将它们发送给可信节点810。当新的区块链节点被添加到区块链网络时,可信节点810可以对区块链网络施行新的数据存储方案以进行存储优化。例如,对于采用如在图4的描述中讨论的数据存储方案的四节点区块链网络,最大ecc编码率为3/4。当将新的全节点添加到区块链时,可信节点810可以施行涉及所有5个区块链节点的新的数据存储方案。由于五节点区块链网络只能容忍一个故障区块链节点,因此最大ecc编码率可以提高至4/5以提高存储效率。因此,基于新的数据存储方案,可信节点810可以使用具有较高编码率的ecc对一个或多个区块进行编码。然后,对于一个或多个区块中的每个区块,可信节点810可以将该区块划分为多个数据集并计算多个数据集的哈希值。为了施行新的数据存储方案,可信节点810可以与区块链节点802、804、806和808一起参与共识处理800。执行共识处理800,以使得可信节点810可以确认区块链节点同意新的数据存储方案,从而可以使用新的数据存储方案下的数据集来替换区块链节点802、804、806和808存储的现有数据,以节省存储空间。共识处理800可以是三个阶段处理,其包括请求阶段812、响应阶段814和提交阶段816。在共识处理800之后,新的数据存储方案可以由可信节点810激活,并被区块链节点802、804、806和808采纳。然后,区块链节点802、804、806和808可以基于新的数据存储方案来存储或恢复区块链数据。pbft共识协议在本文中用于描述共识处理800。根据本文的实施例,诸如工作量证明(pow)、权益证明(pos)和委托权益证明(dpos)之类的其他共识协议可以附加地或替代地用于达成共识。在请求阶段812,可信节点810可以向区块链节点802、804、806和808中的每一个发送请求。在一些实施例中,该请求可以包括分配为由每个区块链节点存储的数据。分配的分配数据可以包括多个数据集中的至少一个数据集、哈希值或提供多个数据集与每个区块链节点之间的对应关系的索引。分配数据旨在替换与区块链节点当前存储的一个或多个区块相关联的数据,以节省存储空间。在一些示例中,索引可以示出多个数据集与区块链节点802、804、806和808之间的对应关系,诸如根据图4中描绘的数据管理方案400的对应关系。该索引可以提供:区块链节点802存储data1,区块链节点804存储data2,区块链节点806存储data3,以及区块链节点808存储vdata1。在一些示例中,该请求还可以包括可信节点810的数字签名,以供接收方验证可信节点810的身份。在区块链节点802、804、806和808接收请求之后,它们都可以在响应阶段814各自响应该请求。响应消息可以包括相应的区块链节点已经接收并接受新的数据存储方案的指示。在一些实施例中,该响应消息可能不会被可信节点810同步接收。例如,某些区块链节点可能有故障、繁忙或与区块链网络断开连接,这可能导致其响应消息被延迟或不可用。因此,在区块链节点802、804、806和808从可信节点810接收已经接收足以达成共识的响应消息的确认之前,它们可以存储分配的数据集、哈希值和索引,且无需删除预先存在的数据集。为了实现更快的同步,每个区块链节点可以使用其私钥对其响应消息进行数字签名。因此,每个响应消息都携带其发送节点的数字签名。即使发送节点断开连接或以其他方式不可用,可信节点810也可以验证响应消息并继续进行共识处理800,且不会产生额外的延迟。如果可信节点810接收到来自区块链节点的n-df=e-m个响应消息,则共识处理800可以进入提交阶段816。通过接收e-m个响应消息,可信节点810可以确定区块链节点802、804、806和808已就采用可信节点810提供的新的数据存储方案达成共识。因此,可信节点810可以向区块链节点802、804、806和808分别发送提交消息,以激活新的数据存储方案。在一些实施例中,在接收该提交消息之后,区块链节点802、804、806和808可以删除与这些区块相对应的预先存在的数据以降低存储消耗。在一些实施例中,响应于区块链节点退出区块链网络或被从区块链网络删除,可信节点810再次执行ecc和共识处理800。例如,对于多个区块中的每个区块,可信节点810可以确定存储ecc编码区块的至少一部分的区块链节点的数量e以及存储该ecc编码区块的冗余位的至少一部分的区块链节点的数量m。可信节点810还可以确定区块链网络的区块链节点总数n以及区块链网络可容忍的最大故障区块链节点数f。如果可信节点810确定e–m>n–f,则其可以基于(n-f)/n编码率对多个区块进行re-ecc。在一些实施例中,当可信节点810的计算资源的利用率小于或等于预定值时,可信节点810可以执行ecc。例如,在可信节点810的cpu使用率低于50%时,可以执行ecc。在一些实施例中,当区块链网络包括多个全节点时,由于全节点尚未共享从ecc编码区块划分的数据集的存储,由全节点存储的区块的冗余率可以相对较高。在某些情况下,每个区块的re-ecc可能会需要计算资源。在这种情况下,确定区块的优先级值并对可以节省更多存储的区块优先进行re-ecc可能是有益的。如前所述,存储在n节点区块链网络中的区块的冗余率可以表示为r=n–e+e/(e–m)。该区块的优先级值可以定义为n–r=e–e/(e-m)。优先级值越低,区块的re-ecc优先级越高。换句话说,在对区块执行re-ecc操作之后,具有较低优先级值的区块可以具有较高的冗余率扣除。因此,区块链网络可以对具有最低优先级值的区块优先进行re-ecc。re-ecc可以基于最大允许编码率(n-f)/n实现最大存储节省。在一些实施例中,可信节点810可以维护优先级索引中的优先级值。优先级索引可以提供每个区块的区块id与其对应的优先级值之间的对应关系。在区块的re-ecc之后,优先级索引可以基于新的优先级值被更新,所述新的优先级值是基于re-ecc编码率计算的。在re-ecc并且共享ecc编码区块的存储之后,如果区块链节点确定其存储的区块链数据仍然具有超过预定数据存储阈值的大小,则其可以向可信节点810发送通知以添加额外区块进行re-ecc。在接收该通知之后,可信节点810可以基于优先级索引的优先级值选择额外区块进行re-ecc。图9描绘了可以根据本文的实施方案执行的处理900的示例。为了方便起见,处理900将被描述为在位于一个或多个位置并根据本文被适当地编程的计算设备或者一个或多个计算机的系统的tee中被执行。例如,计算系统(例如,图1的计算系统106、108)中的计算设备被适当地编程,可以执行处理900。在902,计算设备从区块链网络中的区块链节点接收多个区块。在某些情况下,所述区块链节点是存储所述区块链的副本的全节点。在904,对于所述多个区块中的每个区块,计算设备确定存储从所述区块的ecc编码版本划分的数据集的区块链节点的第一数量和存储从所述区块的ecc编码版本划分的由冗余位组成的数据集的区块链节点的第二数量。在906,计算设备基于所述第一数量和所述第二数量,计算所述区块的优先级值。在908,计算设备使用ecc对所述多个区块的至少一部分进行编码以生成多个编码区块,其中,所述多个区块的至少一部分的优先级值比所述多个区块中除所述多个区块的至少一部分以外的剩余部分的优先级值小,并且所述多个编码区块的至少一部分的编码率等于所述区块链网络所需的最小诚实区块链节点数除以所述区块链网络中的区块链节点的总数。在某些情况下,所需的最小诚实区块链节点数基于pbft共识协议确定。在某些情况下,在对所述多个区块的至少一部分进行编码之后,所述计算设备基于所述区块链网络可容忍的最大故障节点数和所述区块链节点的总数,计算所述多个区块的更新的优先级值,其中所需的最小诚实区块链节点数加可容忍的最大故障区块链节点数为所述总数。在某些情况下,所述计算设备还生成提供所述多个区块的区块id与所述多个区块的优先级值之间的对应关系的索引,并用更新的优先级值更新所述多个区块的至少一部分的优先级值。在某些情况下,所述计算设备将所述多个编码区块分别划分为多个数据集,计算所述多个数据集的哈希值,并且向所述区块链节点分别发送所述多个数据集中的至少一个数据集、所述哈希值以及提供所述多个数据集与所述哈希值之间的对应关系的索引。在某些情况下,所述多个区块的至少一部分是所述多个区块的第一至少一部分,所述计算设备还执行以下操作:接收通知,所述通知表示在存储由所述计算设备发送的多个数据集中的至少一个数据集并删除所述多个区块的第一至少一部分之后,所述区块链节点上存储的区块链数据的大小超过预定数据存储阈值;使用ecc对所述多个区块的第二至少一部分进行编码,其中,所述多个区块的第二至少一部分的优先级值比所述多个区块的第一至少一部分的优先级值大,并且比所述多个区块中除所述多个区块的第一至少一部分和所述多个区块的第二至少一部分之外的剩余部分的优先级值小;以及使用更新的优先级值更新所述多个区块的第二至少一部分的优先级值。在某些情况下,所述优先级值被计算为所述第一数量减去所述第一数量除以所述第一数量和所述第二数量之间的差。在某些情况下,当计算设备的计算资源的利用率小于或等于预定值时,执行所述ecc。在某些情况下,所述ecc是通过向所述多个区块添加冗余位来执行的纠删编码。图10是根据本文的实施例的装置1000的模块的示例的图。装置1000可以是承载被配置为处理区块链数据的tee的计算设备的实施例的示例。装置1000可以对应于上述实施例,装置1000包括:接收模块1002,其用于从区块链网络中的区块链节点接收多个区块;确定模块1004,对于所述多个区块中的每个区块,确定存储从所述区块的ecc编码版本中划分的数据集的区块链节点的第一数量和存储从所述区块的ecc编码版本划分的由冗余位组成的数据集的区块链节点的第二数量;计算模块1006,基于所述第一数量和所述第二数量,计算所述区块的优先级值;编码模块1008,使用ecc对所述多个区块的至少一部分进行编码以生成多个编码区块,其中,所述多个区块的至少一部分的优先级值比所述多个区块中除所述多个区块的至少一部分之外的剩余部分的优先级值小,并且所述多个编码区块的至少一部分的编码率等于所述区块链网络所需的最小诚实区块链节点数除以所述区块链网络中的区块链节点的总数。在一些实施例中,在对所述多个区块的至少一部分进行编码之后,所述计算模块1006还基于所述区块链网络可容忍的最大故障节点数和所述区块链节点的总数,计算所述多个区块的更新的优先级值,其中所需的最小诚实区块链节点数加可容忍的最大故障区块链节点数为所述总数。在一些实施例中,装置1000还包括:生成子模块,所述生成子模块生成提供所述多个区块的区块id与所述多个区块的优先级值之间的对应关系的索引;和更新子模块,所述更新子模块使用更新的优先级值更新所述多个区块的至少一部分的优先级值。在一些实施例中,装置1000还包括:划分子模块,所述划分子模块将所述多个编码区块分别划分成多个数据集;所述计算模块1006还计算所述多个数据集的哈希值;发送模块,所述发送模块向多个区块链节点分别发送所述多个数据集中的至少一个数据集、所述哈希值以及提供所述多个数据集与所述哈希值之间的对应关系的索引。在一些实施例中,所述多个区块的至少一部分是所述多个区块的第一至少一部分,所述接收模块1002还接收通知,所述通知表示在存储由所述计算设备发送的多个数据集中的至少一个数据集并删除所述多个区块的第一至少一部分之后,所述区块链节点上存储的区块链数据的大小超过预定数据存储阈值;所述编码模块1008还使用ecc对所述多个区块的第二至少一部分进行编码,其中,所述多个区块的第二至少一部分的优先级值比所述多个区块的第一至少一部分的优先级值大,并且比所述多个区块中除所述多个区块的第一至少一部分和所述多个区块的第二至少一部分之外的剩余部分的优先级值小;以及使用更新的优先级值更新所述多个区块的第二至少一部分的优先级值。在一些实施例中,当计算设备的计算资源的利用率小于或等于预定值时,执行所述ecc。在一些实施例中,所述ecc是通过向所述多个区块添加冗余位来执行的纠删编码。在一些实施例中,所述优先级值被计算为所述第一数量减去所述第一数量除以所述第一数量和所述第二数量之间的差。在一些实施例中,区块链节点是存储区块链的副本的全节点。在一些实施例中,所需的最小诚实区块链节点数基于pbft共识协议确定。在先前实施中示出的系统、装置、模块或单元可以通过使用计算机芯片或实体来实现,或者可以通过使用具有特定功能的产品来实现。典型的实施例设备是计算机,计算机可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件接收和发送设备、游戏控制台、平板电脑、可穿戴设备或这些设备的任意组合。对于装置中每个模块的功能和角色的实施例过程,可以参考前一方法中相应步骤的实施例过程。为了简单起见,这里省略了细节。由于装置实施例基本上与方法实施例相对应,因此对于相关部分,可以参考方法实施例中的相关描述。前述装置实施例仅仅是示例。被描述为单独部分的模块可以是或可以不是物理上分离的,并且显示为模块的部分可以是或可以不是物理模块,可以位于一个位置,或者可以分布在多个网络模块上。可以基于实际需求来选择一些或所有模块,以实现本文方案的目标。本领域普通技术人员在无需付出创造性努力的情况下就能理解和实现本申请的实施例。再次参考图10,可以解释为示出了内部功能模块和区块链节点的结构。本质上,执行主体可以是电子设备,该电子设备包括:一个或多个处理器;被配置为存储一个或多个处理器的可执行指令的一个或多个计算机可读存储器。在一些实施例中,一个或多个计算机可读存储器耦接至一个或多个处理器且其上存储有编程指令,所述编程指令能够由所述一个或多个处理器执行以执行如本文中所述的算法、方法、函数、处理、流程和程序。本文还提供了耦接至一个或多个处理器并且其上存储有指令的一个或多个非暂时性计算机可读存储介质,当所述指令由所述一个或多个处理器执行时,所述指令将促使所述一个或多个处理器按照本文提供的方法的实施例执行操作。本文还提供了用于实施本文提供的所述方法的系统。所述系统包括一个或多个处理器以及耦接到所述一个或多个处理器并且其上存储有指令的计算机可读存储介质,当所述指令由所述一个或多个处理器执行时,所述指令将促使所述一个或多个处理器按照本文提供的方法的实施例执行操作。本文中描述的主题、动作和操作的实施例可以在数字电子电路中、有形体现的计算机软件或固件中、包括本文中公开的结构及其结构等同物的计算机硬件中,或者它们中的一个或多个的组合中实现。本文中描述的主题的实施例可以实现为一个或多个计算机程序,例如,一个或多个计算机程序指令模块,编码在计算机程序载体上,用于由数据处理装置执行或控制数据处理的操作。例如,计算机程序载体可以包括具有编码在其上或存储在其上的指令的一个或多个计算机可读存储介质。载体可以是有形的非暂态计算机可读介质,例如磁盘、磁光盘或光盘、固态驱动器、随机存取存储器(ram)、只读存储器(rom)或其他介质类型。可选地或附加地,载体可以是人工生成的传播信号,例如,机器生成的电、光或电磁信号,其被生成为对信息进行编码用于传输到合适的接收器装置以供数据处理装置执行。计算机存储介质可以是或可以部分是机器可读存储设备、机器可读存储基板、随机或串行存取存储器设备或它们中的一个或多个的组合。计算机存储介质不是传播信号。计算机程序也可以被称为或描述为程序、软件、软件应用程序、app、模块、软件模块、引擎、脚本或代码,可以以任何形式的编程语言编写,包括编译或解释语言、说明或程序性语言;它可以被配置为任何形式,包括作为独立程序,或者作为模块、组件、引擎、子程序或适合在计算环境中执行的其他单元,该环境可以包括由数据通信网络互连的在一个或多个位置的一台或多台计算机。计算机程序可以但非必须对应于文件系统中的文件。计算机程序可以存储在:保存其他程序或数据的文件的一部分中,例如,存储在标记语言文档中的一个或多个脚本;专用于所讨论的程序的单个文件;或者多个协调文件,例如,存储一个或多个模块、子程序或代码部分的多个文件。举例来说,用于执行计算机程序的处理器包括通用和专用微处理器,以及任何类型的数字计算机的任何一个或多个处理器。通常,处理器将从耦接到处理器的非暂态计算机可读介质接收用于执行的计算机程序的指令并且接收数据。术语“数据处理装置”包括用于处理数据的所有类型的装置、设备和机器,包括例如可编程处理器、计算机或多个处理器或计算机。数据处理装置可以包括例如fpga(现场可编程门阵列),asic(专用集成电路)或gpu(图形处理单元)的专用逻辑电路。除了硬件,该装置还可以包括为计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统、或者它们中的一个或多个的组合的代码。本文中描述的处理和逻辑流程可以由一台或多台计算机或处理器执行一个或多个计算机程序进行,以通过对输入数据进行运算并生成输出来执行操作。过程和逻辑流程也可以由例如fpga、asic或gpu等的专用逻辑电路或专用逻辑电路与一个或多个编程计算机的组合来执行。适合于执行计算机程序的计算机可以基于通用和/或专用微处理器,或任何其他种类的中央处理单元。通常,中央处理单元将从只读存储器和/或随机存取存储器接收指令和数据。计算机的元件可以包括用于执行指令的中央处理单元和用于存储指令和数据的一个或多个存储设备。中央处理单元和存储器可补充有专用逻辑电路或集成在专用逻辑电路中。通常,计算机还将包括或可操作地耦接为从一个或多个存储设备接收数据或将数据传输到一个或多个存储设备。存储设备可以是例如磁盘、磁光盘或光盘、固态驱动器或任何其他类型的非暂态计算机可读介质。然而,计算机不需要具有这样的设备。因此,计算机可以耦接到本地和/或远程的例如一个或多个存储器的一个或多个存储设备。例如,计算机可以包括作为计算机的集成组件的一个或多个本地存储器,或者计算机可以耦接到云网络中的一个或多个远程存储器。此外,计算机可以嵌入在另一个设备中,例如移动电话,个人数字助理(pda),移动音频或视频播放器,游戏控制台,全球定位系统(gps)接收器或例如通用串行总线(usb)闪存驱动器的便携式存储设备,仅举几例。组件可以通过诸如直接地连接、或经由一个或多个中间组件彼此电学连接或光学连接可通信地连接而彼此“耦接”。如果其中一个组件被集成到另一个组件中,组件也可以彼此“耦接”。例如,集成到处理器中的存储组件(例如,l2高速缓存组件)“耦接到”处理器。为了提供与用户的交互,本文中所描述的主题的实施例可以在计算机上实现或配置为与该计算机通信,该计算机具有:显示设备,例如,lcd(液晶显示器)监视器,用于向用户显示信息;以及输入设备,用户可以通过该输入设备向该计算机提供输入,例如键盘和例如鼠标、轨迹球或触摸板等的指针设备。其他类型的设备也可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以接收来自用户的任何形式的输入,包括声音、语音或触觉输入。此外,计算机可以通过向用户使用的设备发送文档和从用户使用的设备接收文档来与用户交互;例如,通过响应于从用户设备上的web浏览器收到的请求,向web浏览器发送web页面,或者通过与例如智能电话或电子平板电脑等的用户设备上运行的应用程序(app)进行交互。此外,计算机可以通过向个人设备(例如,运行消息应用的智能手机)发送文本消息或其他形式的消息并作为回应接收来自用户的响应消息来与用户交互。本文使用与系统,装置和计算机程序组件有关的术语“配置为”。对于被配置为执行特定操作或动作的一个或多个计算机的系统,意味着系统已经在其上安装了在运行中促使该系统执行所述操作或动作的软件、固件、硬件或它们的组合。对于被配置为执行特定操作或动作的一个或多个计算机程序,意味着一个或多个程序包括当被数据处理装置执行时促使该装置执行所述操作或动作的指令。对于被配置为执行特定操作或动作的专用逻辑电路,意味着该电路具有执行所述操作或动作的电子逻辑。尽管本文包含许多具体实施例细节,但这些不应被解释为对由权利要求书本身限定的请求保护的范围的限制,而是作为对特定实施例的具体特征的描述。在本文单独实施例的上下文中描述的某些特征也可以在单个实施例中组合实现。相反,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合在多个实施例中实现。此外,尽管上面的特征可以被描述为以某些组合起作用并且甚至最初被如此请求保护,但是在一些情况下,可以从请求保护的组合中删除来自该组合的一个或多个特征,并且权利要求书可以涉及子组合或子组合的变体。类似地,虽然以特定顺序在附图中描绘了操作并且在权利要求书中叙述了操作,但是这不应该被理解为:为了达到期望的结果,要求以所示的特定顺序或序列顺序执行这些操作,或者要求执行所有示出的操作。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的划分不应被理解为所有实施例中都要求如此划分,而是应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中或打包成多个软件产品。已经描述了主题的特定实施例。其他实施例在以下权利要求书的范围内。例如,权利要求书中记载的动作可以以不同的顺序执行并且仍然实现期望的结果。作为一个示例,附图中描绘的过程无需要求所示的特定顺序或序列顺序来实现期望的结果。在一些情况下,多任务和并行处理可能是有利的。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1