修剪防篡改数据存储装置中的条目的制作方法

文档序号:30353900发布日期:2022-06-08 19:04阅读:92来源:国知局
修剪防篡改数据存储装置中的条目的制作方法
修剪防篡改数据存储装置中的条目
1.相关申请的交叉引用
2.本专利申请要求于2019年9月27日提交的名称为“修剪防篡改数据存储装置中的条目”的美国临时专利申请62/907,271的权益。每个在前列出的在先申请的全部内容通过引用结合于此。
技术领域
3.本公开总体上涉及防篡改数据存储装置,并且更具体而言,涉及修剪防篡改数据存储装置中的条目。


背景技术:

4.防篡改数据结构通常用于以不会在数据结构中留下修改的证据而随后进行修改在计算上通常是不可行的方式记录数据。通常,这些数据结构将所记录的数据条目与基于这些条目的单向函数的输出相关联。单向函数的输出与未来某个时间点的条目之间的不一致性指示篡改。通常可以通过基于条目的当前版本重新计算单向函数以确定输出是否与数据结构中存在的相匹配来检查篡改。如果其不匹配,则潜在地指示篡改。
5.单向函数通常表现出在给定输出的情况下计算输入(例如反转函数)的相对高的计算复杂度(例如时间复杂度或存储复杂度方面)来,但是表现出根据给定输入计算输出的相对低的计算复杂度。通常,这些函数反转在计算上是昂贵的,典型地是到了商业上不可行的程度。例如,许多单向函数在利用消费级、最先进的中央处理器的情况下要求超过10年的计算时间来确定产生预定输出的输入。为了进一步强化数据结构,可以将这些单向函数的输入和输出与各种变化的值(如时间戳)链接并组合,以放大反转计算所要求的计算复杂度。
6.其结果是,对防篡改数据结构中的条目的改变导致与基于那些条目的各种单向函数的输出在内部不一致的条目。篡改通常可以通过审核器过程检测,该审核器过程基于当前条目重新计算单向函数的结果并确定该结果是否与数据结构中已经存在的那些结果一致。对条目的改变以计算上不可避免的方式(例如通过定制经修改的条目来产生单向函数的相同输出)使防篡改数据结构内部不一致。


技术实现要素:

7.以下是本技术的一些方面的非穷举列表。这些和其他方面在以下公开内容中描述。
8.一些方面包括一种过程,该过程包括:利用计算机系统接收对存储在防篡改数据存储装置中的数据进行修剪的请求,其中:数据包括第一程序在第一时间的第一程序状态,第一程序是具有存储在防篡改数据存储装置中的程序状态的多个程序中的一个,该请求利用标识符唯一地标识第一程序,该标识符将第一程序与多个程序当中的第二程序进行区分,防篡改数据存储装置包括加密散列指针的有向非循环图,加密散列指针的第一子集具
有基于第一程序在第一时间的第一程序状态的加密散列值,加密散列指针的第二子集具有基于第一程序在第二时间的第二程序状态的加密散列值,加密散列指针的第三子集具有基于第一程序在第一时间的第一程序状态、第一程序在第二时间的第二程序状态以及来自第一时间之前的第二程序的程序状态的加密散列值,并且防篡改数据存储装置包括将加密散列指针的第一子集链接到加密散列指针的第二子集的记录或者与该记录相关联;响应于该请求,基于标识符和将加密散列指针的第一子集链接到加密散列指针的第二子集的记录,利用计算机系统选择:有向非循环图的节点的第一子集,该第一子集具有基于第一程序在第一时间的第一程序状态的第一内容,加密散列指针的第一子集的散列值基于第一内容;以及有向非循环图的节点的第二子集,该第二子集具有基于第一程序在第一时间的第一程序状态的第二内容,加密散列指针的第二子集的散列值基于第二内容;利用计算机系统,通过改变存储器中的第一内容和第二内容,从防篡改数据存储装置中修剪第一程序状态和第二程序状态,其中:在修剪之后,加密散列指针的有向非循环图的加密散列值在内部是一致的,并且在修剪之后,来自第一时间之前的第二程序的程序状态保留在防篡改数据存储装置中。
9.一些方面包括具有操作码的虚拟机,该虚拟机被配置成实现对防篡改数据结构的修剪,同时保留数据结构中先于被修剪的条目的数据的成员资格状态和防篡改性质的加密证明。
10.一些方面包括存储指令的有形的、非暂时性的机器可读介质,这些指令在由数据处理装置执行时使得数据处理装置执行包括以上提及的过程的操作。
11.一些方面包括一种系统,该系统包括:一个或多个处理器;以及存储指令的存储器,这些指令在被处理器执行时使得处理器实现以上提及的过程的操作。
附图说明
12.当根据以下附图阅读本技术时,将更好地理解本技术的以上提及的各方面和其他方面,在附图中,相似的数字表示相似或相同的元件:
13.图1是描绘根据本技术的一些实施例的通过其智能合约的程序状态可以演化、被持久保存到防篡改数据存储装置并被修剪的过程的示例的流程图;
14.图2是描绘根据本技术的一些实施例的可以通过其在分布式计算平台中实施修剪的过程的示例的流程图;
15.图3a和图3b是根据本技术的一些实施例的修剪可以应用于其中的防篡改数据存储装置的示例的示意图;
16.图4是根据本技术的一些实施例的其中可以实施图3a和图3b的数据存储装置以及图1和图2的过程的分布式计算平台的示例的物理和逻辑架构框图;
17.图5是描绘根据本技术的一些实施例的可以由图4的分布式计算平台实施的访问和隐私控制的框图;以及
18.图6是描绘可以通过其实施上述技术的计算设备的示例的框图。
19.虽然本技术易于进行各种修改和替代性形式,但是其具体实施例在附图中以示例的方式示出并且将在此详细描述。附图可能不是按比例绘制的。然而,应当理解的是,附图及其详细描述并不旨在将本技术限制于所公开的特定形式,而是相反,本发明旨在覆盖落
入由所附权利要求书限定的本技术的精神和范围内的所有修改、等同物和替代性方案。
具体实施方式
20.为了缓解本文描述的问题,本发明诸位发明人必须发明解决方案并且在某些情况下同样重要的是认识到在密码学和分布式计算领域中被其他人忽略(或尚未预见)的问题。事实上,本发明诸位发明人希望强调认识到新出现的这些问题的困难并且如果行业趋势如发明人预期那样继续,这些问题将在未来变得更加明显。进一步,因为解决了多个问题,所以应该理解的是,一些实施例是特定于问题的,并且不是所有实施例都解决了本文描述的传统系统的每个问题或者提供了本文描述的每个益处。也就是说,下面描述了解决这些问题的各种排列的改进。
21.如上所讨论的那样,防篡改数据存储装置(例如,利用一个或多个防篡改数据结构来使得数据防篡改的储存库)提供了所希望的性质,包括使得检测对数据存储装置中的条目的篡改相对容易并且使得定制条目以避免这种检测相对困难或不可能。然而,当在商业使用情况下部署防篡改数据存储装置时,这些提供可能产生挑战,在商业使用情况下,用户可能希望在某些条目被提交给数据存储装置之后对这些条目进行修剪(例如,重写、删除、利用空值替换、去索引或出于与事务相关联的目的以其他方式使其不可访问)。例如,由于人为错误、软件缺陷或各种噪声源,经常输入错误的数据,并且各方可能希望从防篡改数据存储装置中移除那些条目,同时保持另外地由数据存储装置所展示的防篡改性质。例如,实体可能希望移除一个条目,同时保持检测先前和后续条目的篡改的能力。在其他示例中,修剪可能是由法规(例如,通用数据保护法规(gdpr))或在已经达到数据保留策略之后推动的。
22.其他方法(如截断条目链以排除包括该条目和较早条目的那些条目)通常无法保留较早的条目并且因此不适合某些用例。其他方法(如利用存储在数据存储装置中的单向函数输出(如散列摘要)将数据专门存储在防篡改数据存储装置外部)增加了数据访问方面的等待时间并且可能将数据从在数据存储装置中存储数据的相关分布式计算平台中实施的隐私和访问控制的范围中移除。类似地,由于单向函数的性质,像裁剪被计算来产生与被移除的条目相同的单向函数输出的替换条目的方法通常在计算上是不可行的。因此,需要能够在不丧失以计算上可行的方式检索或检测较早条目的篡改的能力的情况下,在防篡改数据存储装置中修剪(例如,重写、删除、利用空值替换、去索引或出于与事务相关联的目的以其他方式使其不可访问)特定的链上条目。
23.而且,很难确定要修剪防篡改数据结构中的哪些条目。实体可能希望移除与给定过程相关联的所有条目,并且这些条目可能与记录到同一防篡改数据结构的一个或多个其他不同过程的条目交错。例如,相对大量的不同智能合约可能将状态持久保存到同一区块链。一旦该状态已经演变,则许多基于区块链的计算平台使得难以或不可能标识区块链上的给定智能合约的状态的早期实例。因此,即使支持修剪,也需要能够标识从许多商业相关的防篡改数据结构中要修剪的条目。
24.最后,许多基于区块链的计算平台限制了可以执行的有效操作的集合并向开发人员提供了接近图灵完全的操作集合。通常,这种平台在缺少删除条目的操作码的虚拟机内执行智能合约和其他程序,因为系统被设计成使得写入的数据是不可变的,并且因此不可
能被修剪。
25.前述内容中的任何一个不应该被认为暗示放弃任何技术或者本文描述的方法不可以与具有这些或其他描述的缺点的其他方法结合使用,例如,一些实施例可以修剪某些条目,同时截断比被修剪的条目早得多的阈值日期之前的条目。或者一些实施例可以仅仅修剪智能合约的当前状态并且使得智能合约的状态的较旧的记录不改变。或者一些实施例可以利用不支持修剪操作的虚拟机来实施,并且修剪可以在虚拟机的运行时环境外部实施,例如利用在主机计算设备上执行的程序。
26.一些实施例执行下面参考图1所描述的过程,该过程创建并随后从防篡改数据存储装置中修剪条目(例如,存储在加密散列指针的有向非循环图的叶节点中的链上条目),同时保持其他条目不变并在篡改的情况下受到检测,包括比被修剪的条目更早的条目。在一些实施例中,在像参考图3a和图3b所描述的那些数据结构的数据结构上,利用下面参考图2所描述的过程来实现修剪。在一些实施例中,这些过程可以在像下面参考图4所描述的那些逻辑和物理架构的逻辑和物理架构上执行,保持像参考图5所描述的那些数据隐私和访问控制的数据隐私和访问控制,并且在像参考图6所描述的那些计算设备的计算设备上执行。
27.在一些实施例中,与本文描述的其他过程和功能一样,图1的过程10可以被实施为存储在有形的、非暂时性的机器可读介质上的计算机代码,使得当代码的指令由一个或多个处理器执行时,可以实现所描述的功能。指令可以分布在存储器的多个物理实例上,例如在不同的计算设备中、或者在存储器的单个设备或单个物理实例中,所有这些与单数术语“介质”的使用一致。在一些实施例中,操作可以以不同于所描述的顺序的顺序来执行,一些操作可以在进程执行的每个实例被执行多次,一些操作可以被省略,附加的操作可以被添加,一些操作可以被并发执行,而其他操作可以被串行执行,这些中的任何一个不是暗示本文描述的任何其他特征也不可变化。
28.在一些实施例中,过程10可以在分布式计算平台上执行,该分布式计算平台可操作来将状态持久保存到分布式防篡改数据存储装置,如一个或多个基于区块链的计算平台或其他分布式应用,如swarm、dat、星际文件系统等。这种计算平台的示例包括axcore、ethereum、hyperledger(例如,sawtooth、fabric或iroha等)、corda、openchain、stellar、neo、libra、bitcoin和eos。在一些实施例中,分布式计算平台是图灵完全分布式计算平台,该平台可操作来利用可验证计算技术以分布式方式在计算平台上执行智能合约(或其他程序)。例如,计算可以在计算平台的多个对等节点(如这些节点的随机或伪随机选择的子集或全部)中的每一个上复制,并且可以就计算的结果达成共识,使得阻止恶意行动者干扰由其控制之外的对等节点进行的计算的结果。
29.在一些实施例中,底层计算硬件可能是不可信的,并且可以应用各种共识算法来以不要求任何一个计算设备可信的方式确定计算的结果和在其上执行的各种过程的状态。
30.一些实施例可以执行各种共识一致性算法(例如,paxos、raft、hotstuff、honey badger拜占庭容错、实用拜占庭容错或helix)。在一些情况下,对等节点的子集可以参与共识确定。在一些情况下,对等节点可以确定各自的角色,包括领导者、候选人和追随者,并且设备可以利用单调增加的号(如任期号)来确定角色方面的变化的序列。在每次任期号递增时,对等节点可以选举新的领导者。在选举中,对等节点可以向其他对等节点发送投票请
求。多数票持有者可以被指定为当前任期增量的领导者。对等节点之间的消息可以包括发送对等节点的任期号,并且具有陈旧任期号(相对于接收对等节点)的请求可以被拒绝。在一些实施例中,领导者节点可以周期性地向追随者节点广播心跳消息,并且追随者节点可以响应于确定自上一个心跳消息以来在阈值时间量内没有接收到心跳消息而触发选举。
31.在一些实施例中,对等节点参与共识的授权通过对等节点向其他对等节点展示某种形式的证明来确定。在一些实施例中,该证明是工作证明,例如,通过用加密散列函数计算对某个阈值数量的数字的散列冲突,或者该证明可以是例如权益证明或存储证明。在一些实施例中,证明拥有秘密值,如用于签署与节点公钥相关联的值(例如,伪随机挑战)的密钥对的私钥。
32.在一些实施例中,过程10包括创建智能合约,如由框12所指示那样。在一些实施例中,这可以包括例如从开发者获得智能合约的源代码版本,例如以诸如solidity、java、scala、go等语言编码的源代码版本。在一些实施例中,创建智能合约可以包括将智能合约解释成用于分布式计算平台的对等节点的虚拟机的字节码形式。解释可以包括解析字节码,形成抽象语法树表示,以及通过将树中的条目映射到目标运行时环境的操作码(对应于字节码)(以及这种操作码的参数),将抽象语法树转换成字节码表示。在一些实施例中,该字节码可以编码虚拟机的各种操作码,并且在一些实施例中,这些操作码中的一些可以是修剪操作码,如下面参考图2更详细描述的那些。术语智能合约被广泛用于指源代码编码和字节码编码或其其他转换(例如,编译成机器代码)。例如,对“智能合约”和“该智能合约”的引用可以分别指智能合约的源代码形式和智能合约的字节码形式,或者两个引用中的源代码或字节码实例。编码可以演变格式,同时仍然承载相同的标签。
33.智能合约可以是脚本或其他类型的程序,并且智能合约可以包括对局部和全局状态的引用,后者潜在地在多个智能合约或其他类型的程序之间共享,而前者与其他智能合约隔离。在一些实施例中,给定的智能合约可以具有子例程,如其方法或函数。在一些实施例中,智能合约可以采用自变量,并且不同的方法或函数可以采用不同的自变量。在一些实施例中,在执行时,智能合约可以将状态持久保存到它在其上执行的分布式计算平台的防篡改数据存储装置,如以下更详细描述的那样。
34.在一些实施例中,创建智能合约可以包括部署智能合约。在一些实施例中,智能合约可以被部署到分布式计算平台的地址,该地址唯一地标识智能合约并将其与其他智能合约和其他实体进行区分,如分布式计算平台上的钱包地址或其他分布式计算平台上的外部账户。该地址可以是开放系统互连模型(osi模型)中的应用层地址。在一些实施例中,该地址基于外部账户的公钥、部署智能合约的账户的地址以及随机数(例如,随着每次部署而递增的计数器)(例如,基于其的加密散列)。
35.在一些实施例中,智能合约的地址由智能合约本身以不同于智能合约编码的散列的形式显式定义。在一些实施例中,通过将消息(或其他事务)寻址到该地址并附加各种自变量和被调用的子例程的标识符,到达调用子例程而不是主函数的程度,智能合约可以在分布式计算平台上被调用。
36.一些实施例可以将其中智能合约被创建的事务载入到防篡改数据存储装置,如由框14所示指示的那样,例如,通过载入事务的信息中的一些或全部。在一些实施例中,事务的日志可以包括智能合约的代码的加密散列,从而使得对该代码的改变显而易见,并且一
些实施例可以执行该代码的成员资格的加密证明(例如,merkle证明)以在每次调用智能合约时验证不存在篡改。在一些实施例中,分布式防篡改数据存储装置可以包括各种组件防篡改数据结构,如merkle树和字典树,如参考图3a和图3b更详细描述的那样。树可以将数据存储在叶节点中,而字典树可以将数据存储在沿着到叶节点的路径的节点中,例如,其中前缀存储在更靠近根节点的第一节点中,条目的中间部分存储在远离根节点的下一节点中,以及后缀存储在定义路径的叶节点中,而共享相同前缀和中间部分的另一条目的不同后缀可以存储在穿过字典树的前两个节点的其他路径中。
37.在一些实施例中,不同的字典树可以将根节点记载在区块链中的块链的相同块中(例如,存储在其中或具有基于它们的存储在其中的值的加密散列)。在一些情况下,那些不同的字典树可以包括状态字典树、收据字典树和事务字典树。在一些实施例中,部署智能合约的事务可以被载入到事务字典树,例如在沿着字典树的路径的一组节点中,并且可以在状态字典树中(如在沿着字典树的路径的一组节点中)创建对应于调用智能合约时智能合约的地址的条目。在一些实施例中,状态字典树中的该条目可以包括专用于智能合约并存储智能合约的局部状态的存储字典树的存储根,而状态字典树可以用作分布式计算平台的全局状态的一部分,或者状态字典树可以用作下面参考图5讨论的域或子空间中的一个的全局状态的一部分,其中不同的域或子空间具有不同的状态字典树。
38.在一些实施例中,分布式计算平台然后可以等待,直到智能合约被调用,如判定框16所指示那样。在一些实施例中,分布式计算平台可以托管多个智能合约,如同时托管超过5个、超过10个、超过100个或超过10000个智能合约。这些智能合约可以由多于2个、多于5个、多于10个、多于100个或多于1000个不同的智能合约创建者创建。
39.在一些实施例中,所有这些不同程序的状态可被持久保存(例如,以在调用实例之间幸存的方式存储)到相同的防篡改数据存储装置,在一些情况下,在智能合约的不同子群组的其不同指定子集中,如根据以下参考图5所描述的域和子空间架构。在一些实施例中,给定的智能合约可以被各自在分布式计算平台上具有不同的地址的多个不同的实体调用多次,如多于5次或多于10次,这些从这些不同的地址向智能合约的地址发送调用智能合约的事务。不同的实体和不同的调用在不同的时间可以调用智能合约中的不同功能,例如,不同的子例程随时间演化智能合约的状态。在某些情况下,这些事务中的每一个可以被载入到区块链的当前块的事务字典树中。所载入的事务可以用于同步新的对等计算节点。到分布式计算平台的后到达节点可以通过重放自防篡改数据存储装置的开始时期以来的事务(例如,除了经受修剪的那些事务)来重新创建防篡改数据存储装置的当前状态,以到达与存储在其他对等节点上的版本同步的局部存储器中的防篡改数据存储装置的当前版本。在一些实施例中,到分布式计算平台的后到达节点可以通过对照块的根散列来协调状态而不重放事务,来重新创建防篡改数据存储装置的当前状态。
40.在一些实施例中,部署到分布式计算平台的智能合约的子集或全部可以包括修剪子例程。在一些实施例中,修剪子例程可以作为子例程或者作为确定是否要应用修剪的某个其他例程中的分支逻辑被显式编码在智能合约中。在一些实施例中,修剪逻辑可以包括确定发送导致修剪代码被执行的事务的实体是否被授权以便引起修剪的逻辑,例如,确定事务发送者是否已经证明拥有与记载在防篡改数据存储装置中作为具有修剪目标域(如下面参考图5所述的那些)的目标子空间中的条目(例如,在调用修剪逻辑的事务中显式或隐
式标识)的授权的公钥相关联的加密私钥。在另一示例中,修剪可以在错误处理子例程中调用,例如,利用try-catch设计模式,该设计模式使得无法执行的智能合约的状态修剪它们的数据(或来自当前执行实例的数据),因为智能合约本身的代码可以确定条目是错误的。在一些实施例中,修剪可以由修剪子例程的代码在存在多方签名集的情况下调节,例如,一些实施例可以确定请求修剪的事务是否已经被智能合约的对方接收,并且响应于检测到该集合中的来自最后一个对方的事务,通过引起所描述的修剪操作来进行响应。一些实施例可以响应于基于时间的逻辑,例如,响应于确定给定条目、智能合约调用或智能合约比阈值年龄更旧,而调用修剪。
41.在一些实施例中,修剪功能可以由不同的程序(诸如在分布式计算平台中具有不同地址的不同智能合约)从要修剪数据的智能合约实施,例如,一个智能合约可以修剪另一智能合约的数据。在一些实施例中,修剪功能可在智能合约外部实施,例如,在智能合约外部同时仍在运行时环境内,如在智能合约在计算环境的对等节点上执行的虚拟机内。在一些实施例中,修剪是利用虚拟机外部(例如,相对于虚拟机同步或异步地)执行的程序来实施,例如,在执行对等节点应用实例的主机计算设备上。因此,在一些实施例中,修剪的调用可以独立于是否调用了要修剪数据的智能合约,这并不意味着本文描述的任何其他特征也不可变化。
42.一些实施例可以确定智能合约的修剪或其他功能是否已经被调用,如由框18所指示那样。在一些实施例中,这可以包括确定是否已经调用了其中实施了修剪功能的程序子例程,如上面的那些示例。在修剪功能是主机智能合约的一部分的情况下,在确定修剪没有被调用时,实施例可以执行主机智能合约的其他指令。在一些实施例中,这可以包括执行智能合约的其他子例程或主函数。在一些实施例中,通常请求执行智能合约的指令可以利用在分布式计算平台上传送的事务或其他消息来执行。在分布式计算平台的场景下的任期传输和传送等不一定要求发射器和接收器处于不同的物理位置。相反,在存储在计算平台的每个节点(或具有包括这种存储的指定角色的子集)上的数据中物理表示的一个账户可以将事务传输到也在该计算平台上的每个节点中存储的数据中物理表示的另一账户。因此,传输可以发生在账户层,而不必要求发送者和接收者在不同的物理位置。
43.在一些实施例中,通过其调用智能合约的功能的事务可以被载入到防篡改数据存储装置中,如由框20所指示那样,例如,载入在沿着与正被编写的当前块相关联的事务字典树的路径的一组节点中、或者在merkle树的叶节点中。在一些实施例中,事务可以包括远程程序调用,该远程程序调用具有自变量和被调用的智能合约的子例程的标识符以及唯一标识符,如将智能合约与部署到平台的其他智能合约区分开的智能合约的地址、以及分布式计算平台中的调用实体的地址。
44.在一些实施例中,分布式计算平台可以执行智能合约的调用功能,如由框22所指示的那样。在一些实施例中,这可以包括在确定执行所调用的功能之前,确定调用方是否具有修改下面参考图5所描述的域的子空间中的智能合约的程序状态的授权。在一些实施例中,执行所调用的功能可以导致智能合约的程序状态从过去的第一时间处的第一程序状态演变到通过执行所调用的功能而产生的第二程序状态。示例包括改变账户中多个erc-20(例如,可替代的、竞争性的)加密令牌(或其他数字载体资产)的余额、确定是否已经接收契约事务中的签名、创建或以其他方式修改不可替换的加密资产(例如,如erc 721,不可替代
的、竞争性的加密令牌)等。程序状态可以包括变量的值,其状态影响智能合约或其他智能合约的程序流中的分支。程序状态可以包括各种不同类型的变量的范围从整数、布尔值、字符串值等的值,并且程序状态可包括更多特征丰富的数据结构,如二进制大对象(blobs)、字典、列表、数组等。归因于这些项的值可以充当程序状态,并且程序状态可以随着时间的推移而演变,因为那些值由于智能合约的执行而改变。一些程序状态可能对于子例程是局部的,一些程序状态可能对于智能合约是局部的,但是对于每个子例程是可访问的(例如,在智能合约的上下文中是全局的,但是在分布式计算平台的上下文中是局部的)。一些程序状态相对于子空间、域或分布式计算平台可以是全局的,其中前两个示例相对于其他子空间或其他域是局部的。
45.在一些实施例中,程序状态可以包括短暂程序状态和持久程序状态,后者在调用智能合约的实例之间继续存在,而前者在一些情况(例如,智能合约在其上执行的虚拟机的垃圾收集例程)下可以在调用之间被丢弃。在一些实施例中,短暂程序状态可以被存储在存储字典树中,存储字典树的根加密散列可以被存储(例如,作为将变量名映射到它们所承载的值的键值对)在对应于智能合约的调用实例的状态字典树中的条目的存储根字段中,如以下参考图3a和图3b更详细描述的那样。
46.一些实施例可以在智能合约执行期间或之后,将对程序状态的更新附加到防篡改数据存储装置,如由框24所指示那样。在一些实施例中,这可以包括更新对应于在分布式计算平台上具有地址的不同实体的账户的记录。在一些实施例中,更新可以包括更新状态字典树以指示智能合约被调用的实例,并添加指向智能合约被调用的先前实例的指针,如下面更详细描述的那样。在一些实施例中,更新还可以包括对以上描述的状态字典树的更新,包括对存储字典树的存储根值,并且在一些情况下,这可以包括对收据字典树和事务字典树的相对应的更新,如下面参考图3a和图3b所述。在一些实施例中,这些更新可以利用基于更新的单向函数计算的图(例如,在加密散列指针或嵌套密文的非循环有向图中)来再现为防篡改的,其中一个密文包含多个密文,该多个密文各自包含再现为防篡改的更多密文值。
47.加密散列指针的非循环有向图可以采取各种形式,包括链表、跳表、字典树及其组合。在一些实施例中,图呈关联数据结构的形式。在一些实施例中,图包括具有内容的多个节点。在一些实施例中,图的节点的子集或所有节点可以具有被呈现为防篡改的内容,并且节点的子集可以具有基于通过有向边链接到相应节点的其他节点的加密散列的内容,像指向具有加密散列所基于的内容的节点的指针。示例包括图中的相邻节点的内容的加密散列和时间戳。在一些实施例中,该图可以被构造成提供对各个条目的相对快速的访问,例如利用具有各自对应于相应的字典树(像基数字典树或merkle树)的带有内容的节点的跳表。
48.可以使用各种不同类型的加密散列函数。示例包括sha-2、sha-3、blake2等。在某些情况下,加密散列函数利用单向函数确定性地将任意长度的输入映射到固定长度的输出。在一些实施例中,散列函数基于构造,或者一些实施例可以避免这种架构以减轻长度扩展攻击的风险。在某些情况下,固定长度输出大于或等于4字节、8字节、16字节、32字节、64字节、128字节、256字节、512字节或1028字节。
49.在一些实施例中,在调用智能合约之前、期间或之后,一些实施例可以包括执行成员资格的加密证明(如由框26所指示的那样)以验证不存在篡改。在一些实施例中,这可以包括例如在沿着基数字典树的路径的一组指定节点处,验证防篡改数据存储装置中不存在
指定条目的的篡改。一些实施例可以沿着终止于指定条目的路径重新计算加密散列指针的节点序列的加密散列值,并确认加密散列值对应于由指定条目产生的那些值。在检测到由当前条目产生的加密散列值不对应于有向非循环图中存在的那些值时,一些实施例可以确定篡改已经发生并发出警报或阻止事务。替代性地,在确定加密散列值与有向非循环图中当前存在的那些值相匹配时,一些实施例可以确定篡改没有发生,并许可事务完成或发出确认事件。
50.一些实施例可以返回到框16,以等待智能合约的下一调用。一旦在框18中确定已经调用了修剪子例程,一些实施例可以继续从防篡改数据存储装置中修剪创建事务(例如,用于部署智能合约的消息),如由框28所指示那样。在修剪之前,一些实施例可以确定是否满足速率限制标准,以减轻重写过量的数据或多于许可的数据的攻击。例如,一些实施例可以确定在进行修剪之前由给定账户在少于阈值持续时间内修剪了少于阈值量的数据。响应于检测到已经超过这样的阈值,一些实施例可以终止修剪操作并发出警报事件。
51.如所陈述的那样,修剪可以采取各种不同的形式(包括删除、重写、在空值内替换以及去索引),例如通过移除指向权威数据结构中的条目的指针,通过该指针条目与智能合约、调用创建智能合约的智能承包商的实体的地址或智能合约的调用实例相关联。例如,在某些情况下,所有程序状态被修剪,仅智能合约的给定调用的程序状态、仅给定子例程的程序状态、仅给定子例程的给定调用的程序状态、或经来自由给定账户发布的事务的程序状态。
52.在一些实施例中,修剪包括利用将条目指定为已经被修剪的值(像分布式计算平台的命名空间中的保留任期)替换被修剪的条目。在一些实施例中,当在框26中验证成员资格的加密证明时,可以检测到指定条目已经被修剪的值,并且作为响应,可以确定下游加密散列值与条目的状态一致,即使那些下游加密散列值不是基于当前条目产生的。在一些实施例中,通过加密散列指针的有向非循环图的指定路径可以被许可与被修剪但仍被分类为满足成员资格的加密证明的指定条目内部不一致。在一些实施例中,同一merkle树中的其他叶节点如果被改变的话仍可能导致merkle证明失败并指示篡改。类似地,如果merkle树中的被修剪的节点被改变为具有不同于指示它被修剪的值,merkle证明可能仍然失败,因为预期该改变的值与有向非循环图中的下游加密散列值不一致,除非该值被改变回其原始的、修剪前的状态。在一些实施例中,成员资格的加密证明可以由虚拟机的相对应的操作码调用,并且在一些情况下,映射到该操作码的代码可以被配置成检测指示修剪的值,并修改成员资格的加密证明以忽略这些值。
53.一些实施例可以从防篡改数据存储装置中修剪对程序状态的更新,如由框30所指示那样,例如,在修剪事件被发出并且分布式计算平台关于合约的修剪状态达成共识之后。在一些实施例中,这可以包括遍历链表或其中智能合约被事务调用的其他实例图,并修剪记载这些调用的条目。在一些实施例中,每次调用智能合约时,新的条目可以被形成到状态字典树,并且该新条目可以包括指向先前条目的指针。一些实施例可以遍历这些条目中的每一个,随后是用于修剪多个不同调用记录中的每一个的各种指针。在一些实施例中,状态字典树中的每个条目还可以包括指向与调用时程序状态方面的变化相对应的事务字典树、收据字典树和存储字典树中的条目的指针,并且一些实施例可以抓取这些各种其他指针集以修剪收据字典树、事务字典树和存储字典树中的相对应的条目。
54.在一些实施例中,在创建图或调用图中,智能合约可以创建或调用一组智能合约,并且那些智能合约可以创建或调用另一组智能合约等。一些实施例可以抓取该创建图或调用图,例如利用递归搜索,如深度优先或广度优先搜索。一些实施例可以在创建图或调用图的每个被访问节点处,对相对应的智能合约的调用链表执行参照框28和30所描述的修剪操作。
55.一些实施例可以发出智能合约的修剪事件和载入的修剪状态,如由框32所指示那样,例如在完成修剪智能合约、完成修剪智能合约的调用、或完成或开始修剪该调用中的程序状态中的条目时。在一些实施例中,该过程可以返回到框12,等待另一个智能合约的创建,以及在给定的智能合约被部署和处于使用中并且未被修剪的同时,当给定的创建者或其他创建者可以继续创建新的智能合约时可以同时进行的操作。在一些实施例中,在修剪之后,给定的智能合约可以被再现为不可调用的或者以其他方式不可访问的。在一些实施例中,载入的或以其他方式保存的数据可以被导出到关系数据库,并且这种导出可以指示哪些条目被修剪。
56.图2示出了通过其可以在例如图1的程序流中实施修剪的过程50的示例,尽管应该强调的是实施方式不限于该布置,这并不意味着在所有实施例中都要求本文描述的任何其他特征。在一些实施例中,如图1的过程,过程50由实施经受修剪的智能合约中的指令的分布式计算平台来执行,或者在一些情况下,图2的过程由分布式计算平台的虚拟机来实施,而不考虑经受修剪的智能合约是否包括打印指令。或者在一些实施例中,图2的过程由在分布式计算平台的应用层对等网络的对等节点上执行的其他程序代码来执行。
57.一些实施例包括接收修剪请求,如由框52所指示那样。在一些实施例中,这是对要进行修剪的智能合约的修剪子例程的请求。在一些实施例中,该请求标识分布式计算平台中的智能合约的地址。在一些实施例中,该请求标识该智能合约的当前或历史程序状态的子集将被修剪,例如隐式地指示其他程序状态将保持不变。修剪请求不要求在程序代码中如此标记,前提是效果是导致修剪,这并不意味着必须在程序代码中标记其他构造以匹配在此使用的任期。
58.一些实施例可以确定修剪请求是否被授权,如由框54所指示那样。在一些实施例中,这可以包括确定与修剪请求相关联的地址或加密签名是否在请求修剪的事务中与指示该实体具有修剪例如在下面参考图5所描述的域和子空间中有争议的特定数据的授权的记录相关联。在不同地确定请求未被授权时,一些实施例可以前进到框56,并且确定不实施被请求的修剪。
59.在确定修剪被授权后,一些实施例可以继续确定未决块是否已经被提交给例如区块链。在一些实施例中,修剪操作可以在块提交之间同步执行。一旦确定它没有被提交,一些实施例可以继续等待。在确定未决块已经被提交时,一些实施例可以进行到下一操作,并且在一些情况下,设置在过程50的操作完成之前不应该提交另一块的标志。或者一些实施例可以相对于块创建区块进行修剪,这并不是意味着其他特征也不可变化。
60.一些实施例可以将请求中的智能合约标识符解析为状态字典树中的智能合约地址,如由框60所指示的那样。在一些实施例中,这个操作可以包括访问局部域名系统或将局部命名空间中的智能合约标识符映射到分布式计算平台中的智能合约的地址的其他索引。
61.一些实施例然后可以询问防篡改数据存储装置中与智能合约地址相关联的记录。
在一些实施例中,这可以包括确定智能合约的代码(如其中的各种函数或变量)是否被其他智能合约引用,如由框62所指示的那样。一旦确定不是,一些实施例可继续修改当前迭代的状态字典树中(诸如在下面参考图3a和3b所描述的状态字典树中)的智能合约代码的加密散列,如由框64所指示的那样,如修改对应于智能合约的最近调用的状态字典树中的条目。修改可以采取各种不同的形式,包括以上描述的修剪类型。在框62中,在确定智能合约的代码被另一智能合约引用时,一些实施例然后可以前进到框66,其可以与离开框64的程序流合并。
62.一些实施例可以包括确定智能合约的存储(例如,存储的任何子集)(如存储字典树中)是否被另一智能合约引用,如由框66所指示的那样。一旦确定不是,一些实施例可以修改与智能合约相关联的存储字典树,如由框68所指示的那样。同样,修改可以采取多种形式,包括以上描述的修剪类型。在一些实施例中,修改可以包括执行智能合约的虚拟机的垃圾收集,该智能合约将由存储字典树占用的存储器指定为开放以供重写并且对文件系统中的那些条目进行去索引。在框66中,在确定智能合约的存储未被另一智能合约引用时,程序流可以与离开框68的那个合并,并前进到后续操作。
63.一些实施例可以包括修改状态字典树中的当前迭代的条目中的智能合约存储字典树根的加密散列,如由框70所指示的那样。同样,修改可以采取多种形式,包括以上描述的修剪类型。下面参考图3a和图3b描述当前迭代的智能合约存储字典树根的示例。
64.一些实施例可以包括从状态字典树中的当前迭代的条目中检索调用事务字典树中的智能合约的相对应的事务的加密散列,如由框72所指示的那样。一些实施例可以使用这个所检索的值来标识要被修剪的其他条目(例如,作为指向其的指针)。
65.一些实施例然后可以修改事务字典树中所标识条目的字段,如由框74所指示的那样。在一些实施例中,修改可以包括以上描述的各种类型的修剪操作。
66.一些实施例可以包括从事务字典树中的被识别的条目中检索收据字典树中的相对应的条目的加密散列,如由框76所指示的那样。这个条目可以用作防篡改数据存储装置的另一部分的索引。
67.一些实施例然后可以修改由在框76中获得的加密散列所标识的收据字典树中的条目的字段。修改也可以采用以上描述的各种修剪形式中的任何一种。
68.一些实施例可以从状态字典树中的当前迭代的条目中检索对应于智能合约在先前时间的先前状态的状态字典树中的先前条目,如由框80所指示的那样。一些实施例可以确定当前条目是否是最后一个条目,如由框82所指示的那样。在确定不是时,一些实施例可以将当前迭代重复到前一条目,如由框84所指示的那样,并且通过返回到框62,在时间上向后遍历通过智能合约的调用的链表,沿途修剪所指定的条目。替代性地,在确定已经到达最终条目时,一些实施例可以发出修剪事件,如由框86所指示的那样。在一些实施例中,修剪与最终条目相关联的值可以包括修剪创建事务,通过该创建事务在事务字典树中创建智能合约,如上所讨论那样。其结果是,当通过回放所载入的事务进行同步时,稍后到达的对等节点可能无法获得对被修剪数据的访问,甚至在回放修剪事务之前的某些情况下是暂时地无法访问。在一些实施例中,同步可以包括使状态更新与块的状态同步和协调,而无需中继事务来创建那些状态。
69.图3a和图3b是示出可以利用上述修剪操作来修改的防篡改数据存储装置的示例
的框图。在一些实施例中,防篡改数据存储装置可以是分布式分类帐(如区块链),诸如以上描述的基于区块链的计算平台的那些分布式分类帐。图3a和图3b描绘了区块链中的块的序列以及具有存储在那些相应块中的根散列的加密散列指针的相关字典树。所示的箭头对应于指针(例如,加密散列),并且带有标记为a和b的圆圈的字母示出了两个数据结构在何处由加密散列指针或其他指针联接。在所示示例中,块是连续的,但是在许多商业实施例中,预期来自给定智能合约的调用的数据可以在调用之间跳过几个块。在所示示例中,防篡改数据存储装置102包括由密码散列指针连接的块104和105的链表。在这个示例中,块104可以在时间上晚于块105创建。
70.在一些实施例中,数据存储装置102可以被表征为加密散列指针的有向非循环图。有向非循环图的节点的子集可以形成链表或跳表,诸如标记为块104和105的那些节点。在一些实施例中,这个表的每个节点可以包括作为内容的多个值,包括各个块被创建时的时间戳、连接这些节点108的边所指向的前一节点的内容的加密散列、被称为状态字典树118的加密散列值的字典树的根值110、作为被称为收据字典树的加密散列值字典树124的根值的加密散列112、作为被称为事务字典树122的加密散列值字典树的根值的加密散列值114。在一些实施例中,每个块104和105可以具有通过对应于相应字典树的根值(例如merkle根)的加密散列指针直接连接到其上的三个或更多个字典树。
71.在一些实施例中,状态字典树118可以包括通过2、3、4、5、6或更多个分支层级级别从根节点向叶节点散开的多个级别的加密散列指针。在一些实施例中,叶节点可以各自对应于智能合约的账户地址或其调用实例。在一些实施例中,状态字典树118的这种叶节点(或其路径)可以包括图3a中国示出的字段126。地址可以是智能合约或调用实例的地址,随机数值可以是智能合约已被调用的次数的计数,代码散列值可以是智能合约130的字节码表示的加密散列,存储散列可以是存储对智能合约的程序状态(其在调用实例之间是短暂的)进行编码的键值对的加密散列指针120的字典树的merkle根。在一些实施例中,这些字段包括指向对应于智能合约的先前调用的较早状态字典树中的条目中的先前条目的前趋指针,以及其中智能合约被调用的事务的加密散列,其可以是事务字典树122中的条目的地址。
72.在一些实施例中,修剪可以包括修剪条目的子集,包括代码哈希值和存储哈希值,如指定要修剪的条目子集的框128所指示的那样。
73.在一些实施例中,事务字典树122类似地包括从根节点向叶节点散开的多个级别的加密散列指针,到这些叶节点的路径对应于调用或部署智能合约的各个事务。叶节点可以包括作为内容的多个字段,包括收据字典树124中的对应于记载加密令牌的消费的记录的条目的加密散列值,通过该加密令牌来计量分布式计算平台的计算的使用,诸如以太坊中的燃料或用于计量使用的任何其他合适的技术或其任何组合。在一些实施例中,对应于事务字典树叶节点的条目还包括表单字段,该表单字段指示从其发送事务的实体的地址或其他标识符以及指定事务(例如指示哪个子例程被调用及其自变量)的数据,以及被调用的智能合约的地址。
74.在一些实施例中,包括指示谁发布事务的条目和事务数据的条目132可以被修剪,如由框132的指定所指示的那样。
75.在一些实施例中,事务字典树122中的条目的收据散列可以标识沿着收据字典树
124中记载可归因于相对应的事务的加密令牌的消费的路径的一组节点。在一些实施例中,由框134指定的条目可以经历修剪,包括所发出的载入事件和由事务使用的燃料的记录。
76.在一些实施例中,如上所讨论的那样,给定块的状态字典树中的条目可以包括指向对应于给定智能合约的先前调用的先前条目的指针,如图3a和图3b之间通过具有字母b的圆圈所连接的那样。在一些实施例中,前趋指针可以标识较早块105的状态字典树中的条目138,并且条目140可以经受修剪,连同可能经受垃圾收集或显式修剪的数据142、连同也可能经受垃圾收集修剪或显式修剪的数据和块129。在这个示例中,叶节点138的前趋条目指向空地址,从而指示序列的结束和智能合约到分布式计算平台的初始部署。类似的一组条目可以从字典树142、146和144中修剪,分别对应于状态字典树、收据字典树和事务字典树(如上所讨论的那样)。在一些实施例中,这可以包括分别从沿着事务字典树和收据字典树144和146的路径的一组节点中的相对应条目中修剪利用框148和150指定的字段。
77.图4示出了分布式计算平台200的示例物理和逻辑架构。在一些实施例中,可能没有对计算平台行使控制的集中机构,并且计算可以通过在不同计算设备上执行的多个不同对等计算节点应用202的ad hoc协作来实现,或者在一些情况下,多个不同对等节点应用可以在单个计算设备上执行,例如,在不同虚拟机或容器中执行。在一些实施例中,分布式计算平台200是无许可(例如,公共)计算平台,在该计算平台中,有权访问对等节点应用的程序代码的任何人都可以通过安装和执行该应用来参与。在一些实施例中,分布式计算平台可以是私有分布式计算平台,诸如其中对等计算节点通过证明拥有与区块链计算平台200的许可租户相关联的私有密码密钥来向其他计算节点认证自己的平台。示出了五个对等计算节点200,但是商业实施例预期包括多得多,例如多于10个、多于100个或多于1000个。在一些实施例中,多个租户可以具有授权其对等节点参与的认证凭证,诸如多于2个、多于5个、多于10个或多于100个租户。在一些实施例中,对等计算节点可以被共定位或地理上分布,例如在不同的数据中心或不同的内部部署的计算硬件集合上执行。
78.在一些情况下,对等节点202的不同子集可以具有不同的角色和权限。在一些情况下,对等节点202中的一些可以作为可以访问例如域中的所有数据(像下面参考图5所描述的那样)的验证者来操作。在某些情况下,验证者对等节点可以参与共识确定并执行智能合约。观察者对等节点可能具有较少的特权,例如,访问域或子空间中的数据的权利,而不参与共识或执行智能合约。在一些情况下,给定的对等节点202可以在一个域中是验证者,而在另一域中是观察者。
79.在一些实施例中,每个对等计算节点200可以执行虚拟机204的实例,诸如以太坊虚拟机或ewasm(以太坊web组件)虚拟机。在一些实施例中,虚拟机可操作来执行对虚拟机的一组操作码进行编码的字节码。在某些情况下,以源代码编写的智能合约可以被解释成字节码,虚拟机204随后可以将该字节码编译成适用于底层计算硬件的机器代码,从开发者那里抽象出处理器和其他硬件中的差异。在一些实施例中,虚拟机204在对等计算节点202中的每一个上可以是相同的。在一些实施例中,虚拟机可以包括被配置成将源代码解释成字节码的解释器206、被配置成执行智能合约并更新存储在防篡改数据存储装置210中的智能合约的状态的状态机208。在一些实施例中,智能合约在执行期间的一些短暂状态可以存储在虚拟机204的堆栈数据结构212中,而其他短暂状态可以存储在由虚拟机分配给智能合约的过程的随机存取存储器中。在一些情况下,不同的操作码可以具有由虚拟机分配给它
的不同的燃料成本,虚拟机可以计算执行的燃料成本并更新收据字典树中的记录以指示燃料消耗。在一些实施例中,虚拟机204可以被配置成对对应于通过其实施修剪的修剪指令的操作码进行响应,因为分布式计算平台的虚拟机的一些现有示例通常不支持修剪操作。
80.图5描绘了可以利用上述数据存储装置和分布式计算平台实施的隐私和许可数据模型的示例。在一些实施例中,不同的对等节点具有不同的角色,并且在一些情况下,同时一些对等节点负责确定共识、意愿,并且其他对等节点仅仅能够询问计算的结果。在一些实施例中,对等节点(如验证节点)的子集可以管控由其他节点(如观察节点)对存储在分布式计算平台中的数据的各种形式的访问,包括修剪条目的能力。在一些实施例中,各种租户和其中的用户账户的角色和权限可以被映射到其中的不同域232和不同子空间234,使得给定租户或给定租户的给定用户可以被许可从事或被阻止查看、写入或修剪给定域232或其子空间234中的条目。在一些实施例中,域232和子空间映射234可以覆盖在相同的防篡改数据结构上,使得不同的实体可以对该数据结构的不同子集进行不同类型的访问。或者在某些情况下,隐私和访问控制可以利用其他数据模型实施,如hyperledger实施方式中的通道。
81.图6是示出根据本技术的实施例的示例性计算系统1000的图。本文描述的系统和方法的各个部分可以包括类似于计算系统1000的一个或多个计算机系统或在类似于计算系统1000的一个或多个计算机系统上执行。进一步,本文描述的过程和模块可以由类似于计算系统1000的一个或多个处理系统来执行。
82.计算系统1000可以包括经由输入/输出(i/o)接口1050耦接到系统存储器1020、输入/输出i/o设备接口1030和网络接口1040的一个或多个处理器(例如,处理器1010a至1010n)。处理器可以包括单个处理器或多个处理器(例如,分布式处理器)。处理器可以是能够运行或以其他方式执行指令的任何合适的处理器。处理器可以包括实行程序指令以执行计算系统1000的算术、逻辑和输入/输出操作的中央处理单元(cpu)。处理器可以执行为程序指令创建执行环境的代码(例如,处理器固件、协议栈、数据库管理系统、操作系统或其组合)。处理器可以包括可编程处理器。处理器可以包括通用或专用微处理器。处理器可以从存储器(例如,系统存储器1020)接收指令和数据。计算系统1000可以是包括一个处理器(例如,处理器1010a)的单处理器系统,或者包括任何数量的合适处理器(例如,1010a至1010n)的多处理器系统。可以采用多个处理器来提供本文描述的技术的一个或多个部分的并行或顺序执行。本文描述的诸如逻辑流程的过程可以由运行一个或多个计算机程序以通过对输入数据进行操作并生成相对应的输出来执行功能的一个或多个可编程处理器执行。本文描述的过程可以由专用逻辑电路系统来执行,并且装置也可以实施为专用逻辑电路系统,例如fpga(field programmable gate array,现场可编程门阵列)或asic(application specific integrated circuit,专用集成电路)。计算系统1000可以包括多个计算设备(例如,分布式计算机系统)来实施各种处理功能。
83.i/o设备接口1030可以提供用于将一个或多个i/o设备1060连接到计算机系统1000的接口。i/o设备可以包括接收输入(例如,来自用户)或输出信息(例如,给用户)的设备。i/o设备1060可以包括例如呈现在显示器(例如,阴极射线管(cathode ray tube,crt)或液晶显示器(liquid crystal display,lcd)监控器)、定点设备(例如,计算机鼠标或轨迹球)、键盘、小键盘、触摸板、扫描设备、语音识别设备、手势识别设备、打印机、音频扬声器、麦克风、照相机等上的图形用户界面。i/o设备1060可以通过有线或无线连接连接到计
算机系统1000。i/o设备1060可以从远程位置连接到计算机系统1000。例如,位于远程计算机系统上的i/o设备1060可以通过网络和网络接口1040连接到计算机系统1000。
84.网络接口1040可以包括提供计算机系统1000到网络的连接的网络适配器。网络接口1040可以促进计算机系统1000和连接到网络的其他设备之间的数据交换。网络接口1040可以支持有线或无线通信。网络可以包括电子通信网络,诸如互联网、局域网(local area network,lan)、广域网(wide area network,wan)、蜂窝通信网络等。
85.系统存储器1020可以被配置成存储程序指令1100或数据1110。程序指令1100可以由处理器(例如,一个或多个处理器1010a至1010n)执行,以实施本技术的一个或多个实施例。指令1100可以包括计算机程序指令模块,用于实施本文针对各种处理模块描述的一种或多种技术。程序指令可以包括计算机程序(其在某些形式中被称为程序、软件、软件应用、脚本或代码)。计算机程序可以以编程语言编写,包括编译或解释语言、或者声明性或过程性语言。计算机程序可以包括适用于在计算环境中使用的单元,包括作为独立程序、模块、组件或子例程。计算机程序可能对应于也可能不对应于文件系统中的文件。程序可以存储在保存其他程序或数据的文件的一部分中(例如,存储在标记语言文档中的一个或多个脚本)、存储在专用于所讨论的程序的单个文件中、或者存储在多个协作文件中(例如,存储一个或多个模块、子程序或代码部分的文件)。计算机程序可以被部署为在本地位于一个位点或者分布在多个远程位点并且通过通信网络互连的一个或多个计算机处理器上执行。
86.系统存储器1020可以包括其上存储有程序指令的有形程序载体。有形程序载体可以包括非暂时性计算机可读存储介质。非暂时性计算机可读存储介质可以包括机器可读存储设备、机器可读存储基底、存储器设备或其任意组合。非暂时性计算机可读存储介质可以包括非易失性存储器(例如,闪存、rom、prom、eprom、eeprom存储器)、易失性存储器(例如,随机存取存储器(random access memory,ram)、静态随机存取存储器(static random access memory,sram)、同步动态ram(synchronous dynamic ram,sdram))、大容量存储存储器(例如,cd-rom和/或dvd-rom、硬盘驱动器)等。系统存储器1020可以包括其上可以存储有可由计算机处理器(例如,处理器1010a至1010n中的一个或多个)执行以引起本文描述的主题和功能操作的程序指令的非暂时性计算机可读存储介质。存储器(例如,系统存储器1020)可以包括单个存储器设备和/或多个存储器设备(例如,分布式存储器设备)。提供本文描述的功能的指令或其他程序代码可以存储在有形的非暂时性计算机可读介质上。在一些情况下,整个指令集可以同时存储在介质上,或者在一些情况下,指令的不同部分可以在不同时间存储在同一介质上。
87.i/o接口1050可以被配置成协调处理器1010a至1010n、系统存储器1020、网络接口1040、i/o设备1060和/或其他外围设备之间的i/o流量。i/o接口1050可以执行协议、定时或其他数据转变,以将来自一个组件(例如,系统存储器1020)的数据信号转换成适合由另一组件(例如,处理器1010a至1010n)使用的格式。i/o接口1050可以包括对通过各种类型的外围总线附接的设备的支持,诸如外围组件互连(pci)总线标准或通用串行总线(usb)标准的变体。
88.本文描述的技术的实施例可以使用计算机系统1000的单个实例或被配置为托管实施例的不同部分或实例的多个计算机系统1000来实施。多个计算机系统1000可以提供本文描述的技术的一个或多个部分的并行或顺序处理/执行。
89.本领域技术人员将会理解,计算机系统1000仅仅是说明性的,并不旨在限制本文描述的技术的范围。计算机系统1000可以包括可以执行或以其他方式提供本文描述的技术的性能的设备或软件的任何组合。例如,计算机系统1000可以包括云计算系统、数据中心、服务器机架、服务器、虚拟服务器、台式计算机、膝上型计算机、平板计算机、服务器设备、客户端设备、移动电话、个人数字助理(personal digital assistant,pda)、移动音频或视频播放器、游戏控制台、车载计算机或全球定位系统(global positioning system,gps)等,或者是它们的组合。计算机系统1000也可以连接到未示出的其他设备,或者可以作为独立系统操作。此外,在一些实施例中,由所示出的组件提供的功能可以被组合在更少的组件中或者分布在附加组件中。类似地,在一些实施例中,可以不提供所示出的组件中的一些的功能,或者其他附加功能是可用的。
90.本领域技术人员还将理解,尽管各种项目被示出为在使用时存储在存储器中或存储装置上,但是出于存储器管理和数据完整性的目的,这些项或它们的一部分可以在存储器和其他存储设备之间传输。替代性地,在其他实施例中,软件组件中的一些或所有可以在另一设备上的存储器中执行,并且经由计算机间通信与所shichu的计算机系统通信。系统组件或数据结构中的一些或所有也可以存储(例如,作为指令或结构化数据)在计算机可访问的介质或便携式物品上,以由适当的驱动器读取,其各种示例如在上文中描述。在一些实施例中,存储在与计算机系统1000分离的计算机可访问介质上的指令可以经由传输介质或信号(诸如电、电磁或数字信号)传输到计算机系统1000,经由通信介质例如网络或无线链路传送。各种实施例还可以包括在计算机可访问介质上接收、发送或存储根据前述描述实施的指令或数据。因此,本技术可以利用其他计算机系统配置来实践。
91.在框图中,所示出的组件被描绘为离散的功能块,但是实施例不限于其中如所示出的那样组织本文描述的功能的系统。由组件中的每一个提供的功能可以由软件或硬件模块来提供,这些软件或硬件模块与当前描述的不同地进行组织,例如,这种软件或硬件可以混合、结合、复制、分解、分布(例如分布在数据中心内或地理上分布)、或者以其他方式组织。本文描述的功能可以由执行存储在有形的、非暂时性的机器可读介质上的代码的一个或多个计算机的一个或多个处理器来提供。在一些情况下,尽管使用了单数术语“介质”,但是指令可以分布在与不同计算设备相关联的不同存储设备上,例如其中每个计算设备具有指令的不同子集,这是与本文中的单数术语“介质”的使用相一致的实施方式。在一些情况下,第三方内容递送网络可以托管通过网络传送的信息中的一些或所有,在这种情况下,在信息(例如,内容)被供应或以其他方式提供的程度上,可以通过发送指令从内容递送网络检索该信息来提供该信息。
92.读者应该理解,本技术描述了几种独立有用的技术。申请人不是将这些技术分离多个独立的专利申请,而是将这些技术分组到单个文件中,因为它们的相关主题对申请过程中的经济性有用。但是这些技术的不同优点和各方面不应该混为一谈。在一些情况下,实施例解决了本文提到的所有缺陷,但是应当理解的是,这些技术是独立有用的,并且一些实施例仅解决了这些问题的子集或者提供了对于阅读本公开的本领域技术人员来说是显而易见的其他未提及的益处。由于成本限制,本文公开的一些技术目前可能不要求保护,而可能在以后的申请中要求保护,诸如继续申请或通过修改本权利要求。类似地,由于篇幅限制,本文件的发明部分的摘要和发明内容不应被视为包含所有这些技术或这些技术的所有
方面的全面列表。
93.应当理解,说明书和附图并不旨在将本技术限制于所公开的特定形式,而是相反,本发明旨在覆盖落入由所附权利要求限定的本技术的精神和范围内的所有修改、等同物和替代性方案。鉴于此描述,本技术的各个方面的进一步修改和替代性实施例对于本领域技术人员将是显而易见的。因此,该描述和附图仅被解释为说明性的,并且出于教导本领域技术人员的目的是实行本技术的一般方式。应当理解,本文示出和描述的本技术的形式将被视为实施例的示例。元件和材料可以替代本文示出和描述的那些元件和材料,零件和过程可以颠倒或省略,并且本技术的某些特征可以独立使用,所有这些对于受益于本技术的描述的本领域技术人员来说是显而易见的。在不脱离所附权利要求中描述的本技术的精神和范围的情况下,可以对本文描述的元素进行改变。本文使用的标题仅用于组织目的,并不意味着用于限制描述的范围。
94.如在整个申请中所使用的那样,单词“可以”是在许可的意义上使用的(即,意味着有可能),而不是强制的意义上使用的(即,意味着必须)。词语“包括(include、including、includes)”等意味着包括但不限于。如贯穿本技术所使用的那样,单数形式“一”、“一个”和“该”包括复数指示物,除非内容明确地另外指出。因此,例如,对“元素”的引用包括两个或更多个元素的组合,尽管对于一个或多个元素使用了其他术语和短语,例如“一个或多个”。除非另有说明,术语“或”是非排他性的,即包括“和”和“或”。描述条件关系的术语,例如,“响应于x,y”,“在x时,y”,“如果x,y”,“当x,y”等涵括了这样的因果关系,其中先行条件是必要的因果条件,先行条件是充分的因果条件,或者先行条件是结果的促成的因果条件,例如,“状态x发生在条件y获得时”是“x仅在y时发生”和“x在y和z时发生”的类属。这种条件关系不限于直接跟随先行条件获得的结果,因为一些结果可能被延迟,并且在条件语句中,先行条件与它们的结果相连,例如,先行条件与结果发生的可能性相关。多个属性或功能被映射到多个对象(例如,一个或多个处理器执行步骤a、b、c和d)的陈述涵括所有这些属性或功能被映射到所有这些对象,以及属性或功能的子集被映射到属性或功能的子集(例如,所有处理器各自执行步骤a至d,以及其中处理器1执行步骤a,处理器2执行步骤b和步骤c的一部分,以及处理器3执行步骤c的一部分和步骤d的情况),除非另有说明。类似地,对执行步骤a的“计算机系统”和执行步骤b的“计算机系统”的引用可以包括执行这两个步骤的计算机系统内的相同计算设备或执行步骤a和b的计算机系统内的不同计算设备。进一步,除非另有说明,否则一个值或动作“基于”另一条件或值的陈述涵括条件或值是唯一因素的情况和条件或值是多个因素中的一个因素的情况。除非另有说明,否则某些集合的“每个”实例具有某些性质的陈述不应被理解为排除较大集合的某些相同或相似成员不具有该属性的情况,也就是说,每个不一定意味着每一个。关于所陈述的步骤的序列的限制不应被理解为权利要求,除非明确规定,例如利用明确的语言,如“在执行x之后,执行y”,与可能被不适当地认为暗示序列限制的陈述相反(如“对项执行x,对x过的项执行y”)用于使权利要求更可读的目的,而不是规定序列。涉及“a、b和c中的至少z个”等(例如,“a、b或c中的至少z个”)的陈述是指所列类别(a、b和c)中的至少z个,并且不要求每个类别中至少z个单元。除非特别声明,否则从讨论中显而易见的是,应该理解的是,贯穿本说明书讨论,利用诸如“处理”、“计算(computing或calculating)”、“确定”等术语是指特定装置的动作或过程,诸如专用计算机或类似的专用电子处理/计算设备。参照几何构造描述的特征(如“平行”、“垂直/正交”、“正
方形”、“圆柱形”等)应被解释为涵括基本体现几何构造的性质的项,例如,对“平行”表面的引用涵括基本平行的表面。参照说明书中的范围来确定这些几何构造的与柏拉图理想的偏离的允许范围,并且在没有参照使用领域中的工业规范说明这些范围的情况下,并且在参照指定特征的制造领域中的工业规范的情况下没有定义这些范围,并且在没有定义这些范围的情况下,基本上体现几何构造的特征应该被解释为包括该几何构造的定义属性的15%以内的那些特征。术语“第一”、“第二”、“第三”、“给定”等(如果在权利要求中使用的话)是用于区分或以其他方式标识,而不是示出顺序或编号限制。如在本领域的普通使用中的情况,参考对人类而言显著的用途描述的数据结构和格式不需要以人类可理解的格式呈现来构成所描述的数据结构或格式,例如文本不需要以unicode或ascii呈现或甚至编码来构成文本;不需要显示或解码图像、地图和数据可视化来分别构成图像、地图和数据可视化;语音、音乐和其他音频不需要通过扬声器发出或被解码来分别构成语音、音乐或其他音频。计算机实施的指令、命令等不限于可执行代码,并且可以以使得功能被调用的数据的形式来实施,例如,以函数的自变量的形式或api调用。
95.在本专利中,在任何美国专利、美国专利申请或其他材料(例如,文章)通过引用结合到本文中的程度上,这些材料的文本仅通过引用结合到这些材料与本文阐述的陈述和附图之间不存在冲突的程度。在这种冲突的情况下,以本文件的文本为准,并且本文件中的术语不应由于那些术语在通过引用并入的其他材料中的使用方式而被给予较窄的解读。
96.参考以下列举的实施例将更好地理解本技术:
97.1.一种存储指令的有形的、非暂时性机器可读介质,这些指令在被一个或多个处理器执行时实现包括以下操作:利用计算机系统接收对存储在防篡改数据存储装置中的数据进行修剪的请求,其中:数据包括第一程序在第一时间的第一程序状态,第一程序是具有存储在防篡改数据存储装置中的程序状态的多个程序中的一个,该请求利用标识符唯一地标识第一程序,该标识符将第一程序与多个程序当中的第二程序进行区分,防篡改数据存储装置包括加密散列指针的有向非循环图,加密散列指针的第一子集具有基于第一程序在第一时间的第一程序状态的加密散列值,加密散列指针的第二子集具有基于第一程序在第二时间的第二程序状态的加密散列值,加密散列指针的第三子集具有基于第一程序在第一时间的第一程序状态、第一程序在第二时间的第二程序状态以及来自第一时间之前的第二程序的程序状态的加密散列值,并且防篡改数据存储装置包括将加密散列指针的第一子集链接到加密散列指针的第二子集的记录或者与该记录相关联;响应于该请求,基于标识符和将加密散列指针的第一子集链接到加密散列指针的第二子集的记录,利用计算机系统选择:有向非循环图的节点的第一子集,该第一子集具有基于第一程序在第一时间的第一程序状态的第一内容,加密散列指针的第一子集的散列值基于第一内容;以及有向非循环图的节点的第二子集,该第二子集具有基于第一程序在第一时间的第一程序状态的第二内容,加密散列指针的第二子集的散列值基于第二内容;利用计算机系统,通过改变存储器中的第一内容和第二内容,从防篡改数据存储装置中修剪第一程序状态和第二程序状态,其中:在修剪之后,加密散列指针的有向非循环图的加密散列值在内部是一致的,并且在修剪之后,来自第一时间之前的第二程序的程序状态保留在防篡改数据存储装置中。
98.2.根据实施例1的介质,其中:接收包括接收第一程序的子例程的调用,该调用被发送到被配置成将状态持久保存到防篡改数据存储装置的许可分布式计算平台上的第一
程序的地址;该地址基于第一程序的创建者的地址和由该创建者先前部署的程序的计数;该子例程在被解释为字节码时,调用虚拟机的修剪操作码,在该虚拟机的复制实例上,第一程序在分布式计算平台的多个计算节点上被冗余地执行;该记录包括基于第一程序在不同时间的程序状态的防篡改数据存储装置中的节点的链表;第一内容包括通过其部署第一程序的分布式计算平台上的事务的加密事务散列;修剪包括改变在其上部署第一程序的分布式计算平台上的事务的加密事务散列;第二内容包括基于具有第一程序而不是第二程序的程序状态的加密散列指针的第一字典树的根节点的加密存储散列;修剪包括改变加密存储散列;第二内容包括通过其调用第一程序以将第一程序的程序状态从第一程序状态变化为第二程序状态的事务;事务被存储在密码散列指针的第二字典树中,密码散列指针的第二字典树具有带有多个程序中除第一程序之外的程序的事务;并且修剪包括在密码散列指针的第二字典树中改变通过其调用第一程序以将第一程序的程序状态从第一程序状态变化为第二程序状态的事务。
99.3.根据实施例1的介质,其中:修剪包括对防篡改数据存储装置中的条目进行去索引,并将条目指定为已在防篡改数据存储装置中被修剪。
100.4.根据实施例1和3中任一实施例的介质,其中修剪包括:迭代经过第一程序的包括第一程序状态和第二程序状态的程序状态的每个实例,并且在至少多个迭代的每一个处:在状态字典树中的当前迭代条目中,基于第一程序的代码改变当前迭代的加密代码散列值;在状态字典树中的当前迭代条目中,基于由第一程序存储的数据改变当前迭代的加密存储散列值;改变由状态字典树中的当前迭代条目中的加密事务散列所标识的当前迭代的事务条目中除当前迭代的加密收据散列之外的值;改变由当前迭代的加密收据散列标识的收据字典树中的条目中的值;以及访问指向状态字典树中的前趋条目的当前迭代指针。
101.5.根据实施例1和3至4中任一实施例的介质,其中修剪在其中事务字典树被添加到加密散列指针的有向非循环图的实例之间同步执行。
102.6.根据实施例1和3至5中任一实施例的介质,操作包括通过按时间顺序执行存储在防篡改数据中的事务的历史来使新的计算节点与存储防篡改数据存储装置的计算节点的网络同步,其中同步包括:确定第一事务没有被修剪,并且作为响应,执行第一事务;以及确定第二事务已经被修剪,并且作为响应,不执行第二事务。
103.7.根据实施例1和3至6中任一实施例的介质,其中:第一程序的字节码在修剪之后保留在防篡改数据存储装置中。
104.8.根据实施例1和3至7中任一实施例的介质,操作包括:在修剪之前并且接收到请求之后,确定阈值持续时间内的修剪量小于阈值。
105.9.根据实施例1和3至8中任一实施例的介质,操作包括:在修剪之前并且接收到请求之后,部分地基于请求修剪哪些数据来确定请求修剪的实体被授权以引起修剪。
106.10.根据实施例1和3至9中任一实施例的介质,其中修剪包括:利用执行第一程序的至少部分的虚拟机的局部实例来改变分布式计算平台的多个计算节点中的每一个上的防篡改数据存储装置的局部副本。
107.11.根据实施例10的介质,其中第一程序的至少部分调用虚拟机的操作码,操作码被配置成接收将被修剪的智能合约的地址作为自变量。
108.12.根据实施例11的介质,其中操作码被配置为使得指示修剪的事件在执行期间
被发出,事件包括第一程序的标识符。
109.13.根据实施例1和3至12中任一实施例的介质,其中修剪包括确定被修剪的数据没有被多个程序当中的另一程序引用。
110.14.根据实施例1和3至13中任一实施例的介质,其中修剪包括递归由第一程序创建的程序图或递归通过由第一程序创建的程序,并从防篡改数据存储装置中修剪程序的图中的程序数据。
111.15.根据实施例1和3至14中任一实施例的介质,其中:防篡改数据存储装置包括多个通道;并且多个程序在分布式计算平台上执行,该分布式计算平台将程序状态与通道中的相对应的通道相关联地持久保存到防篡改数据存储装置中并防止对所存储的数据的跨通道访问。
112.16.根据实施例1和3至15中任一实施例的介质,其中:防篡改数据存储装置将事务存储在关系数据库中,并通过基于事务的内容的多方加密签名来再现事务防篡改。
113.17.根据实施例1和3至17中任一实施例的介质,操作包括:执行第三程序,该第三程序将加密令牌从第一账户转移到第二账户,或者将包括加密令牌的未用完事务输出与用户的地址相关联。
114.18.一种方法,包括:根据实施例1至17中任一实施例的操作。
115.19.一种系统,包括:一个或多个处理器;以及存储指令的存储器,这些指令在被处理器执行时使得处理器实现包括以下的操作:根据实施例1至17中任一实施例的操作。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1