具体实施方式
以下参考附图详细描述本公开的各个示例性实施例。附图中的流程图和框图示出了根据本公开的各种实施例的方法和装置的可能实现的体系架构、功能和操作。应当注意,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分可以包括一个或多个用于实现各个实施例中所规定的逻辑功能的可执行指令。也应当注意,在有些作为备选的实现中,方框中所标注的功能也可以按照不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,或者它们有时也可以按照相反的顺序执行,这取决于所涉及的功能。同样应当注意的是,流程图和/或框图中的每个方框、以及流程图和/或框图中的方框的组合,可以使用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以使用专用硬件与计算机指令的组合来实现。
本文所使用的术语“包括”、“包含”及类似术语应该被理解为是开放性的术语,即“包括/包含但不限于”,表示还可以包括其他内容。在本公开内容中,术语“基于”是“至少部分地基于”;术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”。
应当理解,给出这些示例性实施例仅是为了使本领域技术人员能够更好地理解进而实现本公开的实施例,而并非以任何方式限制发明的范围。
在区块链技术中,共识机制与数据存储有关,是整个网络的价值基础。一个共识算法的选择不仅取决于它的效率和性能,还跟其应用场景有关。由于在不同的场景下涉及到具体的业务,在本发明所涉及的分布式存储领域中,使用跟网络节点存储空间和数据存储时间相关的变量作为底层共识算法的设计具有天然的优势。由于存储合约规定了要为客户保存数据的存储期,因此,存储提供商要证明确实在一段时间范围内(即,存储期内)都为客户保存了数据,需要一系列不可攥改的线性累计证明来证明存储合约的存储期。
本公开的实施例提供了一种基于区块链***的数据处理方法和数据处理装置以及相应的计算机可读存储介质。根据本公开的技术方案,充分利用了节点的存储空间,任何普通的个人计算机都可以参与该网络,充分利用了普通计算机限制硬盘空间和网络带宽,极大地提高网络运行效率和数据的传输。并且,为网络的存储服务提供可靠性保证。不可信的存储节点,不仅无法获得收益,还会失去抵押金。进一步地,提高了存储空间以及网络带宽的利用率,提供了稳定可靠存储服务的提供商会在结算时根据其提供存储服务的可信度获得一定比例的收益,提高了网络参与的积极性。
图1示出了根据本公开的区块链***100的架构示意图。如图1所示,区块链***100包括多个存储节点111-117以及公共账本120。这里,虽然例示出了7个存储节点111-117,区块链***100可以包括其他数量的多个存储节点,一般地,区块链***100包括4个以上的存储节点。多个存储节点111-117为公共账本120提供存储合约。在本公开的区块链***100中,考虑采用存储期证明(Proof of Storage Time)来决定***100的出块节点。这里,存储期证明用于证明已为客户保存存储合约所规定保存数据的时间。
在存储节点111-117上存储有存储合约。当某存储节点(例如,存储节点111)被确定为要出新块时,则该存储节点111上的存储合约被打包出块并被存储到公共账本120中。在一些实施例中,当某存储节点(例如,存储节点112)从客户端接收到请求存储新合约(例如,存储合约c11)时,该存储节点112将这个存储请求及请求内容,例如存储合约c11的存储时间、文件大小以及价格等,广播给区块链***100中的所有其他存储节点,其他存储节点根据存储合约c11的请求内容来确定是否适合于接收该请求。在一些实施例中,如果出现两个或者更多个存储节点都适合于接收该存储要求,则费率低的存储节点被确定为出块节点。在一些实施例中,如果出现两个或更多个存储节点的存储条件一致的情况,则在这些存储节点中随机地确定出块节点。
图2图示了根据本公开的实施例的基于区块链***的数据处理方法200的流程图。图4图示了用来实施本公开的实施例的设备400的示意性框图。应当理解,方法200例如可以由如上图1所描述的存储节点或者图4所描述的电子设备400的所执行。
在S202,接收用于获取存储合约的存储期证明的请求。存储期证明用于证明已为客户保存存储合约所规定保存数据的时间。在一些实施例中,当多个存储节点中的一个存储节点要出新区块时,则触发存储期证明。在一些实施例中,根据存储节点的出块权重来确定出块节点。存储节点的出块权重越大,则该存储节点越优先出块。出块权重与存储节点的储龄有关。例如,出块权重可以通过计算该存储节点的所有已到期合约的存储期的时间之和来确定。当然,出块权重也可以与其他的因子有关,以其他方式来确定,不限于此。在一些实施例中,当使用了存储节点的存储服务的客户请求该存储节点的存储期证明时,则需要向使用了存储服务的客户提供存储期证明。这时,该存储节点会接收到用于获取存储期证明的请求。
在S204,在公共账本120上的、与所请求的存储期证明相关的存储合约中,采样存储合约。在一个实施例中,公共账本120上的所有存储合约都设定有来自于哪个存储节点的标识,由此能够从公共账本120中选出来自于需要确定存储期证明的节点的所有存储合约,将所有这些存储合约按照合约到期时间进行排序,并从这些经排序的存储合约中随机地采样抽取全部或部分样本。
在S206,基于所采样的存储合约,生成与所请求的存储期证明相关的存储节点的存储期证明。在一个实施例中,将每份存储合约的存储期划分为多个时间区域,获取在计算所述存储期证明时的当前时间戳,并基于时间戳和所计算的存储证明的前一个有效的存储期证明来生成所述存储期证明。这里,将存储期划分为多个时间区域包括:随机地确定多个时间区域的数量;以及随机地确定多个时间区域中的每个时间区域的时间长度。由于时间区域的数量和时间长度都是随机生成的,所以存储节点无法通过估计时间区域的方式进行作弊,从而提高了***的稳定性和可靠性。
在一些实施例中,存储期证明(PoST)通过样本合约(所采样的存储合约)的存在性证明(PoE),与当前合约有关的PoST的累计数量,以及前一个有效的存储期证明来计算。这里,PoE是用于证明确实为客户保存了数据的证明,通过计算历史数据而获取。
在S208,将所生成的存储期证明存储在公共账本120上。由此,可以通过在公共账本120上查找的方式来获取存储期证明。
在S210,在存储节点的存储合约到期时,根据存储节点的存储期证明在预定时间区域的分布来获得所述存储节点的可信度报告。这里,预定时间区域是基于对存储合约所规定的时间跨度进行划分而获得的多个时间区域的。可信度报告是在存储合约到期时计算收益的一个重要参考。在一些实施例中,可以通过泊松分布来计算收益。例如,将到期前应该出具的所有单调累计的PoST数量的期望作为因子来计算。具体而言,将存储合约的时间长度的开方作为PoST的期望值,取随机生成的时间区域(例如,随机生成4个时间区间,0-17%,17%-31%,31%-68%和68%-100%)中PoST的数量分布的方差λ,根据如下的泊松分布得来。
在S212,在存储节点的存储合约到期时,根据存储节点的可信度报告,确定存储节点的收益。在一些实施例中,根据客户要求或者经验等来设定可信比率这一个标准来衡量存储时间的可靠性。换言之,采用这样的可信比率来判断该节点的可信度是否达到客户要求。由此,提供稳定可靠存储服务的提供商(存储节点)会在结算时(即,合约到期时)根据其可信度获得一定比例的收益,提高了网络参与的积极性。
基于以上的描述,根据本发明,可信度报告是根据存储期证明在一定时间区域内的的数量分布来计算可信度概率的。因此,在初次把一个存储合约打包进区块的时候,就按照存储合约的时间跨度划分为多个时间区域,最后在合约到期结算时,可信度报告根据在该时间区域中生成的存储期证明来确定最后收益。
在一些实施例中,当无法提供某个存储节点的存储期证明时,将该存储节点设定为失效存储节点,并将该存储节点的抵押金全部没收,作为***的备用金。
在一些实施例中,根据本公开的数据处理方法200还增加了一个清空机制,类似于区块链中的币龄消耗的思路,存储服务商(即,存储节点)每次获得出块时也会消耗一定的储龄,这样,新加入的服务商(存储节点)也会有机会获得出块权利,使得整个***更加公平。
根据以上的描述,本公开的数据处理方法在无需消耗大量CPU计算,也无需额外的网络开销级的情况下,就能激励网络的稳定运行,提供稳定的区块链数据安全保证。
基于上述方法,本公开还提出了一种用于数据处理的装置。图3为依据本公开的实施例的数据处理装置的架构图。
如图3所示,数据处理装置300包括:接收单元302,其被配置为接收用于获取存储合约的存储期证明的请求。这里,存储期证明用于证明以保存所述存储合约所规定的保存数据的时间;采样单元304,其被配置为在公共账本120上的、与所请求的存储期证明相关的存储合约中,采样存储合约;生成单元306,其被配置为基于所采样的存储合约,生成与所请求的存储期证明相关的存储节点的存储期证明;以及存储单元310,其被配置为将所生成的存储期证明存储在公共账本120上。
继续参见图3,数据处理装置300还包括:获取单元310,其在存储节点的存储合约到期时,根据存储节点的存储期证明在预定时间区域的分布来获得所述存储节点的可信度报告,其中所述预定时间区域基于所述存储合约所规定的时间跨度的多个时间区域;以及确定单元312,其在存储节点的存储合约到期时,根据存储节点的可信度报告,确定存储节点的收益。
图2中的数据处理方法的流程还代表机器可读指令,该机器可读指令包括由处理器执行的程序。该程序可被实体化在被存储于有形计算机可读介质的软件中,该有形计算机可读介质如CD-ROM、软盘、硬盘、数字通用光盘(DVD)、蓝光光盘或其它形式的存储器。该程序也可以以云存储的方式被存储在云端。替代的,图2中的示例方法中的一些步骤或所有步骤可利用专用集成电路(ASIC)、可编程逻辑器件(PLD)、现场可编程逻辑器件(EPLD)、离散逻辑、硬件、固件等的任意组合被实现。另外,虽然图3所示的流程图描述了该数据处理方法,但可对该处理方法中的步骤进行修改、删除或合并。
如上所述,可利用编码指令(如计算机可读指令)来实现图3的示例过程,该编程指令存储于有形计算机可读介质上,如硬盘、闪存、只读存储器(ROM)、光盘(CD)、数字通用光盘(DVD)、高速缓存器、随机访问存储器(RAM)和/或任何其他存储介质,在该存储介质上信息可以存储任意时间(例如,长时间,永久地,短暂的情况,临时缓冲,和/或信息的缓存)。如在此所用的,该术语有形计算机可读介质被明确定义为包括任意类型的计算机可读存储的信号。附加地或替代地,可利用编码指令(如计算机可读指令)实现图3的示例过程,该编码指令存储于非暂时性计算机可读介质,如硬盘,闪存,只读存储器,光盘,数字通用光盘,高速缓存器,随机访问存储器和/或任何其他存储介质,在该存储介质信息可以存储任意时间(例如,长时间,永久地,短暂的情况,临时缓冲,和/或信息的缓存)。
应当理解,根据本公开的实施例的设备可以利用各种方式来实现。例如,在某些实施例中,该设备可以通过硬件、软件或者软件和硬件的结合来实现。其中,硬件部分可以利用专用逻辑来实现;软件部分则可以存储在存储器中,由适当的指令执行***,例如微处理器或者专用设计硬件来执行。本领域的普通技术人员可以理解上述的方法和***可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁盘、光盘载体介质、诸如只读存储器的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本公开的实施例的设备和装置不仅可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用例如由各种类型的处理器所执行的软件实现,还可以由上述硬件电路和软件的结合来实现。
图4图示了可以用来实施本公开的实施例的电子设备400的示意性框图。应当理解,电子设备400可以被实现为图1所描述的区块链***100的存储节点,或者电子设备400也可以被实现为图1所描述的区块链***100中存储节点的任一个模块。如图4所示,设备400包括中央处理单元(CPU)401(例如处理器),其可以根据存储在只读存储器(ROM)402中的计算机程序指令或者从存储单元408加载到随机访问存储器(RAM)403中的计算机程序指令,来执行各种适当的动作和处理。在RAM403中,还可存储设备400操作所需的各种程序和数据。CPU 401、ROM 402以及RAM 403通过总线404彼此相连。输入/输出(I/O)接口405也连接至总线404。
设备400中的多个部件连接至I/O接口405,包括:输入单元406,例如键盘、鼠标等;输出单元407,例如各种类型的显示器、扬声器等;存储单元408,例如磁盘、光盘等;以及通信单元409,例如网卡、调制解调器、无线通信收发机等。通信单元409允许设备400通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
上文所描述的各种方法,例如方法200,可由处理单元401执行。例如,在一些实施例中,方法200可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元408。在一些实施例中,计算机程序的部分或者全部可以经由ROM 402和/或通信单元409而被载入和/或安装到设备400上。当计算机程序被加载到RAM 403并由CPU 401执行时,可以执行上文描述的方法200中的一个或多个动作或步骤。
应当注意,尽管在上文的详细描述中提及了设备的若干模块或子模块,但是这种划分仅仅是示例性而非强制性的。实际上,根据本公开的实施例,上文描述的两个或更多模块的特征和功能可以在一个模块中具体化。反之,上文描述的一个模块的特征和功能可以进一步划分为由多个模块来具体化。
以上所述仅为本公开的实施例可选实施例,并不用于限制本公开的实施例,对于本领域的技术人员来说,本公开的实施例可以有各种更改和变化。凡在本公开的实施例的精神和原则之内,所作的任何修改、等效替换、改进等,均应包含在本公开的实施例的保护范围之内。
虽然已经参考若干具体实施例描述了本公开的实施例,但是应该理解,本公开的实施例并不限于所公开的具体实施例。本公开的实施例旨在涵盖在所附权利要求的精神和范围内所包括的各种修改和等同布置。所附的权利要求的范围符合最宽泛的解释,从而包含所有这样的修改及等同结构和功能。