南漳学习网:区块链科普站

区块链数据更改后会如何-区块链数据更改后会如何显示

目录:

区块链的是什么

区块链数据可以修改吗

区块链技术的不可篡改性

区块链验证机制

区块链有啥用

最新出的区块链有哪些

区块链技术模型

如何自学区块链

区块链交易运行原理

<a href=区块链的是什么"/>

区块链的是什么

1、新华社上海10月30日电(记者杜康)你买的五常大米真的产自五常市吗?你捐出去的每一笔慈善费用,最后都去了哪里?音乐和文学作品屡禁不绝的盗版现象能禁止吗?你所不知道的区块链,已经在这些领域默默为大家解决难题。

2、在沃尔玛超市食品区,一袋五常大米的包装袋上,新增了二维码,用微信扫一扫,便能显示信息。是基础的产品信息,如规格、生产商、保质期等;便是溯源信息,包括原料接收时间、原料检验报告、产品出厂报告、发货时间、收货时间等全流程,以及产地和整个物流线路信息。

3、什么是区块链?作为一种去中心化的数据库,区块链基于时间戳的链式区块结构、分布式节点的共识机制让上面的数据可追溯、防篡改。这些特征与实体行业结合,有了巨大的想象空间。

4、“没有区块链的时候,对食品的追踪要依赖某个中介机构或者公司来收集信息,如电商平台。这种中心化的数据收集方式,理论上存在数据被修改的可能。而区块链上,数据在产生的当下,就由产生者自己即时上传各种仓库物流信息,且信息不能被篡改。”作为沃尔玛可追溯平台技术支持方之一的负责人冯艺凯说。

<a href=区块链数据可以修改吗"/>

区块链数据可以修改吗

1、区块链是一个账本。这个账本像其它数据库一样,包含用户间的交易信息。作为一个账本,区块链记录的信息类似于“张三在2020年7月1日下午5:30:23给李四转了10000元”,或者更精确地描述应该是“10000元在这个时间点从这个钱包地址转到了那个钱包地址”。区块链是透明的,因此每个人都能看到交易的历史记录,只是我们看不到交易的地址属于哪个用户。

2、网络中的所有计算机都是节点,每个节点都有一份这个账本的副本。节点必须就一个交易达成一致——如果大多数节点同意,则记录该交易。在以PoW为共识机制的链中(如比特币区块链),矿工成功计算出密码学谜题后,就能够添加一个块。有关此交易的信息被哈希加密后传递到下一个块,如果有人想更改记录,则必须相应地更改以前的记录。每个记录都依赖于前一个记录,以此形成一个链。每个块都有自己的哈希值,后一个区块中会包含前一个区块的哈希值,修改其中任意一个区块的数值都会导致其后所有区块的数值发生改变。

3、此外,从他修改的那个区块开始,他就得在网络中重新建立另外一条链。这条链永远追不上其他所有人一直维护的那条链,因为一个人的工作能力和速度是赶不上其他人合在一起的工作能力和速度的。因此,根据区块链“最长链”原则,最长的那条链才是“诚实的”链。假设原来的那条链总共有10个人维护(包括想篡改数据的这个人),那么在这局游戏中,1个不诚实的家伙是打不过9个诚实的玩家的,因此,他是不可能修改成功的。

4、如果这10个人中,超过6个人(含)都不诚实,就会发生“51%攻击”。如果网络中的大部分人变得不诚实并欺骗网络中的其他人时,那这个区块链协议就会面临失败。虽然这几乎不可能发生,但我们也要知道区块链系统的脆弱之处,它是建立在“群体中的大多数总是诚实的”假设之上的。

<a href=区块链技术的不可篡改性"/>

区块链技术的不可篡改性

1、在第一篇文章中我们提到“由于去中心化的分布式结构中,每个节点都具有所有的数据信息,想要更改某一个数据块,需要同时至少51%的节点同意,非常困难。”本篇文章中,我们来看一下区块链上的数据是否真的无法篡改?

2、负责维护区块链网络运行的终端都可以称之为节点,这个终端可以是手机以及电脑和服务器等计算机。但是成为节点的前提是需要加入区块链网络,并且能够参与区块链网络运行,能够广播交易、记录交易、存储数据等。一般节点具有几个特点:具有一定的存储空间、可视化终端、连接网络运行区块链应用程序。

3、51%攻击主要发生在以POW为共识机制的加密代币中。比特币区块链系统使用的是POW(Power of Work)工作量证明共识机制,通过工作量来竞争记账权利,即多劳多得,而工作量与计算机运算能力成正比。51%攻击意味着攻击者手中掌握的算力超过该区块链网络中其他所有成员的总和,即攻击者手中掌握着51%及以上的算力。

4、但是51%攻击的成本很大。全网算力按照100P计算,矿机价格按照1T/8600元计算(这是目前最低的价格),51P矿机购买费用=100P * 51% * 1024 * 8600元=449,126,400=5亿。攻击成本远大于收益,这也就很大程度上保证了攻击发生的可能性基本为0。但虽然51%攻击发生概率小,并不意味着不会发生。

区块链验证机制

1、随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技(fintech)转变,区块链(block chain)技术也不例外,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求。目前,一般每个区块链节点都会用树状存储结构即状态树的形式,来保存区块链节点运行所必须的信息即状态数据,但是随着区块链系统不断运行,状态数据越来越多,状态树也越来越大,这就使得数据的检索和访问效率大大下降。即现有技术中存在当区块链系统运行一段时间后状态数据的检索和访问的效率大幅下降的技术问题。

2、本技术提供一种区块链状态数据处理方法,以解决现有技术中存在当区块链系统运行一段时间后状态数据的检索和访问的效率大幅下降的技术问题。第一个方面,本技术提供一种区块链状态数据处理方法,应用于区块链节点,该方法包括:在每个时期en开始时,创建与时期en相对应的状态树sn;获取状态数据,状态数据包括:时期标识以及区块链节点为处理传入的区块和/或接收到的业务事件所必须的信息;根据时期标识以及预设要求,将状态数据存储到状态树sn中,以便于区块链节点在处理各项业务时调用状态数据;其中,预设要求包括:每个时期en内生成的状态数据只能存储到与时期en对应的状态树sn中。1在一种可能的设计中,该方法还包括:在每个时期开始时,若区块链节点中存在前一个时期的第一历史状态树sn-1,则保存并冻结第一历史状态树sn-1。1在一种可能的设计中,当区块链节点为全节点时,在全节点中保存每个时期en对应的状态树sn;1当区块链节点为轻节点时,在轻节点中至少保存:状态树sn以及第一历史状态树sn-1,并在当前的时期en开始时,删除不满足预设存储要求的第二历史状态树sm。1在一种可能的设计中,预设存储要求包括:第二历史状态树sm对应的历史时期em与当前的时期en的时间间隔小于预设间隔。1在一种可能的设计中,轻节点中能够保存预设数量个连续的时期en所对应的所有状态树sn,预设数量大于或等于2。1在一种可能的设计中,获取状态数据,包括:1获取出块节点发送的区块,并根据区块确定状态数据;1或者,获取用户发送的交易请求,并根据交易请求确定状态数据。1在一种可能的设计中,状态数据对应的地址包括:时期标识以及地址编码,根据时期标识以及预设要求,将状态数据存储到状态树sn中,包括:20.在当前时期enow对应的当前状态树snow上,根据地址判断是否存在对应的存储路径;2当存在存储路径时,根据存储路径将状态数据存入当前状态树snow中;2当不存在存储路径时,判断时期标识是否满足免证明要求;2若满足免证明要求,则在当前状态树snow上,根据地址编码创建对应的存储路径;2根据存储路径将状态数据存入当前状态树snow中。2在一种可能的设计中,根据时期标识判断是否满足免证明要求,包括:2判断在区块链网络的任意一个区块链节点中是否都储存有时期标识对应的状态树s0。2在一种可能的设计中,判断时期标识是否满足免证明要求,包括:2判断第一时期e0是否在当前时期enow之前的预设时间范围内,第一时期e0与时期标识相对应。2可选的,时间范围包括:k个周期,周期为每个时期en所持续的时间长度,k大于或等于1。30.在一种可能的设计中,在判断时期标识是否满足免证明要求之后,还包括:3若不满足免证明要求,则根据地址,在各个历史时期对应的历史状态树上判断是否存在状态数据;3若不存在,则利用预设验证模型生成第一证明信息,且当区块链节点为出块节点时,将第一证明信息添加到状态数据对应的区块中,并将区块发送到区块链网络中进行共识,第一证明信息用于表征状态数据不在各个历史状态树上;3并在当前状态树snow上,根据地址编码创建存储路径,根据存储路径将状态数据存入当前状态树snow中。3在一种可能的设计中,根据地址,在各个历史时期对应的历史状态树上判断是否存在状态数据,包括:3在各个目标历史时期所对应的目标历史状态树上,根据地址编码判断是否存在状态数据,目标历史时期包括:从时期标识对应的第一时期e0开始的各个历史时期;3其中,目标历史状态树不包括已经存储在轻节点上的各个轻节点状态树,轻节点状态树至少包括:当前时期的状态树sn以及当前时期之前一个时期的第一历史状态树sn-1。3可选的,目标历史时期不包括:当前时期enow以及当前时期enow的前一个时期enow-1。3在一种可能的设计中,在各个目标历史时期所对应的目标历史状态树上,根据地址编码判断是否存在状态数据之后,还包括:3若存在,则利用预设验证模型生成第二证明信息,并且当区块链节点为出块节点时,将第二证明信息添加到状态数据对应的区块中,并将区块发送到区块链网络中进行共识,第二证明信息用于表征:状态数据在最后一次被修改时所对应的第二状态树s1上,并且在最后修改时期e1之后的各个历史状态树上都不存在状态数据,最后修改时期与第二状态树s1相对应;40.并在当前状态树snow上,根据地址编码创建存储路径,根据存储路径将状态数据存入当前状态树snow中。4在一种可能的设计中,在根据时期标识以及预设要求,将状态数据存储到状态树sn中之后,还包括:4当状态数据在当前时期enow发生改变时,在当前时期对应的当前状态树snow上更新状态数据;4区块链网络上的所有区块链节点将状态数据从各个历史状态树中删除,仅保留状态数据在各个状态树sn中对应的存储路径的哈希值。4在一种可能的设计中,在每个时期en开始时,创建与时期en相对应的状态树sn,包括:4将上一个时期en-1对应的第一历史状态树sn-1中访问频率小于预设阈值的节点删除后,得到状态树sn。4第二方面,本技术提供一种区块链状态数据处理装置,包括:4处理模块,用于在每个时期en开始时,创建与时期en相对应的状态树sn;4获取模块,用于获取状态数据,状态数据包括:时期标识以及区块链节点为处理传入的区块和/或接收到的业务事件所必须的信息;4处理模块,还用于根据时期标识以及预设要求,将状态数据存储到状态树sn中,以便于区块链节点在处理各项业务时调用状态数据;50.其中,预设要求包括:每个时期en内生成的状态数据只能存储到与时期en对应的状态树sn中。5第三个方面,本技术提供一种电子设备,包括:5存储器,用于存储程序指令;5处理器,用于调用并执行所述存储器中的程序指令,执行第一方面所提供的任意一种可能的物品存储信息确定方法。5第四方面,本技术提供一种存储介质,所述可读存储介质中存储有计算机程序,所述计算机程序用于执行第一方面所提供的任意一种可能的区块链状态数据处理方法。5第五方面,本技术还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现第一方面所提供的任意一种可能的区块链状态数据处理方法。5本技术提供了一种区块链状态数据处理方法,通过在每个时期en开始时,创建与时期en相对应的状态树sn;获取状态数据,状态数据包括:时期标识以及区块链节点为处理传入的区块和/或接收到的业务事件所必须的信息;根据时期标识以及预设要求,将状态数据存储到状态树sn中,以便于区块链节点在处理各项业务时调用状态数据;其中,预设要求包括:每个时期en内生成的状态数据只能存储到与时期en对应的状态树sn中。解决了现有技术中存在的当区块链系统运行一段时间后状态数据的检索和访问的效率大幅下降的技术问题。达到避免状态数据爆炸增长而导致区块链节点对交易处理效率或处理能力下降的技术效果。附图说明5此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。5图1为本技术提供的一种状态树的结构示意图;5图2为本技术实施例提供的一种区块链状态数据处理方法的应用场景示意图;60.图3为本技术提供的一种区块链状态数据处理方法的流程示意图;6图4为本技术实施提供的另一种区块链状态数据处理方法的流程示意图;6图5为本技术实施例提供的一种区块链状态数据处理装置的结构示意图;6图6为本技术提供的一种电子设备的结构示意图。6通过上述附图,已示出本技术明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本技术构思的范围,而是通过参考特定实施例为本领域技术人员说明本技术的概念。具体实施方式6为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,包括但不限于对多个实施例的组合,都属于本技术保护的范围。6本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。6下面对本技术所涉及到的专业名词作出解释:6(1)区块链中的状态和状态树:6一般地,区块链网络中的节点,在网络中运行段时间之后,都会在本地存储装置上保存一些数据,这些数据可以根据其时间属性分为两大类:历史数据(简称为“历史”)和当前数据(简称为“状态”)。70.状态:是指区块链系统的节点为了能够处理新传入的区块和/或事件而必须持有或存储的信息。状态与历史是相对的。7历史:是对过去已经发生的事件的描述信息,历史保存下来后,可以用于对已经发生的事件进行回顾,或者说是重播,并且还可以对历史进行归档管理。7应用于金融领域的区块链系统中,状态包括:7账户的余额和/或非余额信息,比如nonce;7智能合约所对应的代码;7智能合约所对应的需要存储的数据;7各个节点间进行共识所需要的相关数据即共识数据,比如最近产生的若干区块的哈希值、数量、权益证明等共识数据。7随着时间的推移,随着新用户进入区块链网络,其创建新账户和新智能合约,调用智能合约中的函数,这些数据(即“状态”的具体承载形式)会不断增长。7在现有技术中,大部分区块链系统都是采用二叉(即有两个叶子节点)或六叉(即有六个叶子节点)的帕夏尔-默克尔树(状态树的一种)来维护和管理状态数据,其一般是以键值对的形式,如(键,值)的形式进行存储。7帕夏尔-默克尔树:是一种字典树,有根节点、中间节点和叶子节点,每个节点都有一个唯一的“键”,根据状态数据的“键”,可以在状态树中找到这个“键”对应的存储位置,在这个存储位置的存储槽中存放的状态数据中的“值”。80.例如,一个账户,比如0x001d3f1ef827,可以拥有无数个状态数据,要将这些状态数据放入到状态树中,可以将其哈希值即hash(0x001d3f1ef827)的结果作为“键”,用以找到状态树中的中间节点(即以“键”代表中间节点的地址或用来查找该中间节点的路径),从而这个账户所有的状态数据都存储在这个中间节点的子树下。8沃克尔树:其本质上也是一种字典树,其存储和检索状态数据的方式和帕夏尔-默克尔树类似,但是沃克尔树更宽,即沃克尔树中一个节点的子节点数n1比帕夏尔-默克尔树中一个节点的子节点数n2要大很多(即n1》》n2),因此对于一个固定长度的键地址,沃克尔树的深度(即树分层的总层数)比帕夏尔-默克尔树小很多。由于深度小,沃克尔树对节点的增加和修改操作更加简单。更重要的是,对于节点的存在性证明(即验证数据),沃克尔树采用沃克尔证明,比帕夏尔-默克尔树的默克尔证明更加小。8沃克尔证明:是通过采用多项式承诺(向量承诺的一种),证明一个节点是其父节点的众多子节点中的一个。由于沃克尔树中父节点的值由所有子节点的值决定,所以相当于只需要证明一个节点的值与其父节点的值,这两者间的关系,而无需像默克尔证明那样提供所有兄弟节点的值才能验证该节点与父节点的关系。因此沃克尔证明非常小,并且验证效率更高。8(2)全节点、轻节点和验证者节点:8不同区块链系统有不同的节点角色区分,大体上可以分为:全节点、轻节点和验证者节点。8全节点:是指保存了区块链所有数据的节点。其保存有完整的“状态”数据和所有“历史”数据(有些联盟链会丢弃历史区块中的状态数据比如fisco bcos)。8轻节点:是指仅保存部分常用的状态数据的节点。这就使得轻节点相对于权节点来说更能够节省内存空间,同时又可以处理大部分用户的交易以及打包区块。需要说明的是,在不同区块链系统中,轻节点的功能不一定相同。8验证者节点:是指在共识体系中仅参与验证区块的正确性,但没有打包区块能力的节点。同样在不同区块链系统中验证者节点为了能够验证区块的正确性,需要存储的状态大小也不同。8还需要说明的是,全节点中包括:各种区块的本体部分(即body,一个区块可以分为头部header和本体body两部分),交易列表等等相关信息。全节点在本地保存了一个完整的区块链网络,在其上可进行任何查询、交易的验证与广播,正因为有全节点的存在,使得区块链的去中心化成为了可能,同时使得区块链网络更加安全。需要说明的是,一般全节点需要一直保持在线状态。8轻节点与全节点不同的是,不需要保存所有的交易内容,只需要通过状态树的形式,来保存各个区块的头部header以及与节点自身相关的交易细节信息,并通过状态树所对应的验证方法(也称为“证明”)来判断交易是否在当前的区块链交易列表中。与全节点不同,轻节点不需要一直保持在线状态。90.时期epoch:表示一个固定数量(比如10000个区块)的区块所经历的时间,在这个时期e内创建或修改的“状态”(即状态数据)到了下一个时期e+1自动变成过期的“状态”。9本技术发明人发现,现有的区块链系统中,一般每个区块链节点都会用树状存储结构即状态树的形式,来保存区块链节点运行所必须的信息即状态数据,但是随着区块链系统不断运行,状态数据越来越多,状态树也越来越大,这就使得数据的检索和访问效率大大下降。9为解决上述问题,一种思路是:对于“状态”的管理使用的“两树方案”:过期的状态组成一棵过期状态树,非过期的当前状态组成一棵活跃状态树。9在活跃状态树中,每个账户(包括智能合约)对应的叶子节点上的状态存储槽在被创建后即开始计时,如果状态存储槽中的状态数据在预设时间内被修改则重新计时,相反的,如果经过一段预设时间后,该账户的状态数据没有被修改,则将此状态数据放置到过期状态树上。9全节点需要存储这两棵树,其他节点如轻节点,只存储活跃状态树。用户如果想要访问某个账户过期的状态或者将某个账户过期的状态复活,必须提供该账户对应的状态在过期状态树上的证明(即验证数据)。9但是本技术发明人发现上述做法仍然会引发下面的技术问题:9如果打包出块的节点不是全节点,一个账户过期后将被移出活跃状态树,当其他用户创建了相同地址的账户(相当于创建了相同的账户名),则会妨碍原有账户对应的状态的恢复。或者若原有账户的拥有者无法提供证明(即验证数据),则会导致整个账户的信息被重构,甚至会导致和历史数据相冲突。9目前的区块链大部分都是使用六叉帕夏尔-默克尔树作为状态树,状态证明最大达到4mb,导致一个区块容纳不下几个包含状态证明的交易,即访问过期状态的交易,或者导致区块过大,从而影响共识的速度。9现有技术无法从根本上解决状态的爆炸增长问题,很多公链的做法无法直接用在联盟链中,尤其是没有代币机制的联盟链,现有的状态树结构难以结合高级密码学来提高状态数据管理和证明的效率。9为解决上述各个技术问题,本技术采用了另一种发明构思:100.改变状态数据管理的根本逻辑,不再只是区分过期状态树和活跃状态树,而是在每个预设时间单元即时期,对应在每个节点建立新的状态树,这棵状态树只保存在当前的时期内发生的状态数据,或者是修改当前的时期内变化的状态数据,对于上一个时期或者未来的时期的状态数据都不会保存在当前的状态树当中。即每个时期都有一个对应的状态树,未来时期的状态树在当前不能操作,而过去时期的状态树要访问需要提供节点存在性证明。10并且,为了使得状态数据能够正确存储到正确时期的状态树上,那么就需要在原始地址上增加一个时期前缀,这样用户无法重新创建完全相同的地址,如果想要创建一个历史时期的地址,必须提供证明,以供节点验证这个地址从未出现过。用户也无法创建未来时期的地址,从而保证地址不会冲突,并且能够拓宽地址空间的可用性。10进一步的,还可以更改状态树的组织结构,即采用沃克尔树,从根本上替换现有的帕夏尔-默克尔树,但是不会改变原有的存储和检索逻辑,可以结合累加器来做出证明,证明的大小仅有约800kb,更加适合区块链中状态数据的维护和管理。这个特性使得区块链系统,允许完全无需存储任何状态数据的验证者节点存在,这就使得移动设备就可以完成验证,即移动设备即可成为验证者节点,使得区块链系统更加去中心化。10具体的,本技术发明人重新设置了对区块链中状态数据的处理逻辑:10(1)新的地址结构和状态树结构:10图1为本技术提供的一种状态树的结构示意图。如图1所示,每个时期都有独立的一颗状态树,所以状态包含了一列永远增长的树s0,s1,s2,s..,每个si表示第i个时期的状态树。因此状态是否过期无需额外的字段来表示,只有当前时期的状态树上的状态才是非过期状态。最后每棵状态树的树根10再形成一个总状态根100,这个总状态根100记录在每个区块的头部里,任何一棵状态树发生变化,总状态根100也会变化。可选的,状态树的类型包括沃克尔树。10需要说明的是,在区块链系统中必须存在至少一个存储所有的历史树的全节点,全节点的数量可以由区块链参与方决定。其他的节点根据实际情况来决定存储某些历史状态树,但是需要注意,虽然不存储所有的状态树,但是所有的状态树的树根节点都要存储,并且在每个区块链节点上至少存储上一个时期的状态树以及当前时期的状态树。10对于一个区块链节点中用于交易业务的账户来说,该账户包括:合约账户(contractaccounts)和外部账户(externally owned account,eoa)。例如,在以太坊中,合约账户是通过智能合约进行交易的账户,由智能合约的代码控制。只有合约账户才有代码,其中存储的是codehash(这个账户的以太坊虚拟机代码的哈希值),这个字段在生成后是不可修改的,这意味着智能合约代码是不可修改的。而外部账户是由以太坊网络的人类用户创建的帐户。它与公钥、私钥对相关,它是通过对公钥进行二次哈希后结果的最后20个字节导出的。10本技术定义了新的账户地址,该地址可以表示为一个元组(e,s),e为该地址所属时期的时期标识,用4个bytes表示,s为原始地址,即当前区块链普遍所用的20个bytes的地址编码。所以新的账户地址在二进制上表示为[e:s],即将时期标识与地址编码进行字节拼接。[0109](2)状态树访问和修改规则:[0110]在当前的时期epoch e:[0111]只有当前的状态树se可以被修改。[0112]历史时期的状态树会被冻结,所有想要访问历史状态树的交易必须携带证明,以证明所要访问的状态在历史某个时期的状态树的位置,例如:该状态位置的沃克尔证明,沃克尔证明中包含了旧的状态数据值,这样才能访问历史状态树。由于所有的区块链节点都存储了上一个时期的状态树se-1,如果用户需要访问状态树se-1中的状态数据,区块链节点会帮助用户提供对于该状态树的证明,而且大部分热数据都在这个状态树中,因此可以满足绝大部分用户。但是如果用户的交易想访问se-1之前的树,必须寻找全节点来提供访问证明。[0113]未来时期的状态树可以事先建立好,但只有未来时期变成当前时期后才能修改,或者也可以说未来时期的状态树还没有被创建。到达新的时期后,节点立即启用或创建新的状态树,该未来时期对应的状态树可以是个空白的状态树,也可以附带上了存储某些经常被访问的状态数据的树节点。[0114](3)账户访问和修改规则:[0115]账户(e,s)可以在任意f》e的时期被访问,其数据永远存储在状态树的固定位置hash(e,s),如果在当前时期epoch f,账户(e,s)的存储被修改,由于历史状态树不能修改,所以会在当前时期的状态树sf的hash(e,s)位置创建对应的存储槽。[0116]具体修改规则:[0117]如果账户(e,s)在epoch e被创建和修改,那么直接在树se的对应位置创建和修改;[0118]如果账户(e,s)在epoch e+1被创建或修改,那么直接在树se+1的对应位置创建和修改;[0119]如果账户(e,s)在epoch f(f》e+1)被创建,而且在树sf和sf-1上对应位置还没有创建,那么需要提供证明:账户(e,s)在这些树se,se+1,…,sf-2的对应位置都没有出现;[0120]如果账户(e,s)在epoch f(f》e+1)被修改,而且在树sf和sf-1上对应位置还没有创建,假设账户(e,s)最后一次被修改是在epoch e′(e≤e′《f),那么需要提供证明:账户(e,s)出现在状态树se′的对应位置,而且在这些树se′+1,se′+..sf-2的对应位置都没有出现;[0121]如果账户(e,s)在epoch f(f》e)被修改,而且在树sf上对应位置已经创建,直接修改。[0122](4)历史状态树修剪:[0123]由于本技术将区块链不同时期的状态树分别存储,如果不做“状态”去重,将会给区块链节点带来很大的存储开销,尤其是全节点。[0124]本技术采用历史状态树修剪的方式:如果某个账户的“状态”(即本文中的状态数据)在当前时期发生改变,那么当前时期的状态树会保存该账户的最新“状态”,因此所有节点可以将该账户的旧状态从各个历史状态树中删除,仅保留状态树中对应位置的节点哈希值。[0125](5)证明的生成方式:[0126]当用户需要证明某个账户存在于某个历史状态树中或者不存在与某个历史状态树中,本发明采用密码学累加器来分别做出成员证明和非成员证明。[0127]如图1所示,每个时期对应的状态树100的深度为4,广度为4个字节,即每层的子节点数量最多为256个,用16进制表示即为00~ff。假设某个账户在状态树中对应的键为0x3a4b5c,在状态树中,该账户对应的键分别在每一层的节点序号为3a、4b和5c,这些序号也构成了一个对应账户信息存储在状态树中的唯一路径。因此,当用户需要做出该账户存在于这棵状态树的证明,系统需要为该账号对应的键的路径做出证明,即为路径中每层的节点序号分别做出成员证明。[0128]以上述的键为例,需要分别证明:3a节点在根节点的已经存在的子节点集合中;4b节点在3a的已经存在的子节点集合中;5c在4b的已经存在的子节点集合中。已经存在的子节点集合表达了所有以这些子节点为中间路径的已经存储状态数据的键,区块链节点或区块链系统维护状态树的每一层的已经存在的子节点集合,因此对于任意一棵状态树,第二层有1个已经存在的子节点集合,第三层最多有256个已经存在的子节点集合。[0129]具体以证明3a节点在根节点的已经存在的子节点集合中为例,使用密码学累加器做出3a的成员证明。用m表示已经存在的子节点集合累加器向量,m中记录着节点序号唯一对应的质数,用x3a表示3a节点对应的质数,a表示累加器的值,即m中所有质数的乘积。x3a的成员证明的计算简化逻辑可以用公式(1)来表示:[0130][0131]对应的验证逻辑可以用公式(2)来表示:[0132][0133]其中,g表示系统所使用的域的生成元。[0134]如果要证明另外一个节点假设为3b不在这个子节点集合中,用y表示3b节点对应的质数,y的非成员证明uy的计算简化逻辑可以用公式(3)来表示:[0135][0136]对应的验证逻辑可以用公式(4)来表示:[0137][0138]其中,bezout为贝祖定理,a和b是根据贝祖定理得到的两个系数。[0139]依次分别得到4b节点的成员证明和5c节点的成员证明合在一起既是该账户存在于这棵状态树的证明。如果一个交易涉及的两个账户都需要提供证明,可以在每一层一起做出成员证明,假设第二个账户在第一层经过3c节点,对应的质数为z,则只需做出x*z的成员证明,无需分别做出成员证明。[0140]下面以具体地实施例对本技术的技术方案以及本技术的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本技术的实施例进行描述。[0141]图2为本技术实施例提供的一种区块链状态数据处理方法的应用场景示意图。如图2所示,用户20向区块链网络或者说是区块链系统中的任意一个区块链节点21发送交易请求,区块链节点21执行该交易请求对应的交易,使得该用户对应的用于交易的账户的各项状态数据发生了变化,接收用户20交易请求的区块链节点21也称为出块节点,其将该交易打包成区块发送到区块链网络中让其它区块链节点21进行共识。在出块节点中,在交易执行后,所产生的状态数据就对应存储在节点中当前时期对应的状态树上,而其它接收到区块的区块链节点21,也采用相同的状态数据处理方法在各自区块链节点21本地的状态树上更新状态数据。[0142]下面具体介绍本技术提供的状态数据处理方法:[0143]图3为本技术实施例提供的一种区块链状态数据处理方法的流程示意图。如图3所示,该区块链状态数据处理方法的具体步骤,包括:[0144]s30在每个时期en开始时,创建与时期en相对应的状态树sn。[0145]在本步骤中,在每个时期en开始时,区块链节点按照预设的状态树模板创建一棵新的状态树sn,同时,历史状态树即当前时期之前的时期的历史状态树会被冻结,历史状态树可以访问查询,但是不可以将新的状态数据再存入历史状态树。[0146]可选的,在本实施例中,状态树的类型为沃克尔树。[0147]在一种可能的设计中,在每个时期开始时,若区块链节点中存在前一个时期的第一历史状态树sn-1,则保存并冻结第一历史状态树sn-1。[0148]即在每个时期en开始时,对于刚结束的前一个时期en-1所对应的状态树sn-1,并不直接删除,而是只将其冻结起来,但是仍然存储在区块链节点中。[0149]在另一种可能的设计中,整个区块链网络中的区块链节点可以分为两类:全节点和轻节点。[0150]当区块链节点为全节点时,在全节点中保存每个时期en对应的状态树sn;[0151]当区块链节点为轻节点时,在轻节点中至少保存:状态树sn以及第一历史状态树sn-1,并在当前的时期en开始时,删除不满足预设存储要求的第二历史状态树sm。[0152]在一种可能的设计中,预设存储要求包括:第二历史状态树sm对应的历史时期em与当前的时期en的时间间隔小于预设间隔。[0153]比如,当预设间隔为2时,轻节点只存储当前时期以及前一时期,这两个时期的状态树,而轻节点如果要访问其它时期的历史状态树,就需要向全节点提出访问请求,由全节点在对应的历史状态树上进行访问查询。[0154]当然,轻节点也可以保存更多的历史时期的状态树,比如,预设间隔的取值为3-6时,轻节点就可以存储连续3-5个时期的状态树。[0155]需要注意的是,轻节点也可以是非连续时期的历史状态树,比如:保存当前时期,前1个历史时期,前3个历史时期,这三个时期的状态树。[0156]保存的原则可以设置为:如果该历史时期状态数据的创建和/或修改量大于预设阈值,或者说该历史时期的交易量大于预设阈值,则证明该历史时期的状态数据有较大概率会被用到,则将该历史时期对应的状态树保留在区块链节点中,直至对应的状态数据的访问热度低于预设热度阈值后,才将该历史状态树删除。[0157]当然,本领域技术人员也可以根据实际情况设置轻节点保存状态树的数量和保存规则,但是至少要保证轻节点至少包括:当前状态树sn和前一个时期的状态树sn-1。即轻节点中能够保存预设数量个连续的时期en所对应的所有状态树sn,预设数量大于或等于2。[0158]在一种可能的设计中,在本步骤中,将上一个时期en-1对应的第一历史状态树sn-1中访问频率小于预设阈值的节点删除后,得到当前时期en的状态树sn。[0159]s30获取状态数据。[0160]在本步骤中,状态数据包括:时期标识以及所述区块链节点为处理传入的区块和/或接收到的业务事件所必须的信息。[0161]本步骤可以分为两种情况:[0162]第一种,当区块链节点为接收用户交易请求的节点时,由于区块链的共识机制,其需要将交易打包成区块,发布到区块链网络中进行共识,因此,此时该区块链节点也称为出块节点。[0163]此时,获取状态数据,包括:获取用户发送的交易请求,并根据交易请求确定状态数据。[0164]第二种,当区块链节点不是接收用户交易请求的节点,而是区块链网络中执行共识的节点时,获取状态数据,包括:获取出块节点发送的区块,并根据区块确定状态数据。[0165]在本实施例中,状态数据对应的地址包括:时期标识以及地址编码。[0166]s30根据时期标识以及预设要求,将状态数据存储到状态树sn中,以便于区块链节点在处理各项业务时调用状态数据。[0167]在本步骤中,预设要求包括:每个时期en内生成的状态数据只能存储到与时期en对应的状态树sn中。[0168]具体可以分为五种情况:[0169]如果账户(e,s)在时期e被创建和修改,那么直接在树se的对应位置创建和修改;[0170]如果账户(e,s)在时期e+1被创建或修改,那么直接在树se+1的对应位置创建和修改;[0171]如果账户(e,s)在时期f(f》e+1)被创建,而且在树sf和sf-1上对应位置还没有创建,那么需要提供证明:账户(e,s)在这些树se,se+1,…,sf-2的对应位置都没有出现;[0172]如果账户(e,s)在时期f(f》e+1)被修改,而且在树sf和sf-1上对应位置还没有创建,假设账户(e,s)最后一次被修改是在时期e′(e≤e′《f),那么需要提供证明:账户(e,s)出现在状态树se′的对应位置,而且在这些树se′+1,se′+..sf-2的对应位置都没有出现;[0173]如果账户(e,s)在时期f(f》e)被修改,而且在树sf上对应位置已经创建,直接修改。[0174]在一种可能的设计中,该区块链状态数据处理方法,还包括:[0175]当所述状态数据在当前时期enow发生改变时,在所述当前时期对应的当前状态树snow上更新所述状态数据;[0176]区块链网络上的所有所述区块链节点将所述状态数据从各个历史状态树中删除,仅保留所述状态数据在各个所述状态树sn中对应的存储路径的哈希值。[0177]由于本技术将区块链不同时期的状态树分别存储,如果不做“状态”去重,将会给区块链节点带来很大的存储开销,尤其是全节点。[0178]本技术采用历史状态树修剪的方式:如果某个账户的“状态”(即本文中的状态数据)在当前时期发生改变,那么当前时期的状态树会保存该账户的最新“状态”,因此所有节点可以将该账户的旧状态从各个历史状态树中删除,仅保留状态树中对应位置的节点哈希值。[0179]本技术实施例提供了一种区块链状态数据处理方法,通过在每个时期en开始时,创建与时期en相对应的状态树sn;获取状态数据,状态数据包括:时期标识以及区块链节点为处理传入的区块和/或接收到的业务事件所必须的信息;根据时期标识以及预设要求,将状态数据存储到状态树sn中,以便于区块链节点在处理各项业务时调用状态数据;其中,预设要求包括:每个时期en内生成的状态数据只能存储到与时期en对应的状态树sn中。解决了现有技术中存在的当区块链系统运行一段时间后状态数据的检索和访问的效率大幅下降的技术问题。达到避免状态数据爆炸增长而导致区块链节点对交易处理效率或处理能力下降的技术效果。[0180]图4为本技术实施提供的另一种区块链状态数据处理方法的流程示意图。如图4所示,该区块链状态数据处理方法的具体步骤包括:[0181]s40在每个时期en开始时,创建与时期en相对应的状态树sn。[0182]s40获取状态数据。[0183]步骤s401~s402的具体名词及原理解释可以参考s301~s302,在此不再赘述。[0184]s40在当前时期enow对应的当前状态树snow上,根据地址判断是否存在对应的存储路径。[0185]在本步骤中,存储路径包括:状态树sn上的各个节点以及存储槽,节点包括中间节点以及叶子节点,存储槽设置在叶子节点上。[0186]当存在存储路径时,执行步骤s404,当不存在存储路径时,执行步骤s405。[0187]具体的,如果,如果还没有创建[0188]s40根据存储路径将状态数据存入当前状态树snow中。[0189]在本步骤中,在当前状态树snow上已经创建了存储槽(如图1所示),则只需要在存储槽中更新状态数据。[0190]s40判断时期标识是否满足免证明要求。[0191]在本步骤中,若满足,则执行步骤s406,若不满足,则执行步骤s407。[0192]在当前状态树snow上还没有创建与状态数据对应的存储槽,那么就需要去创建各个中间节点和叶子节点,同时在叶子节点上创建存储槽,再将状态数据存储到存储槽当中。[0193]但是,实际情况比较复杂,由于本技术对每个时期都建立了状态树,那么状态数据比如交易的账户,可能在之前的状态树中以及存储过了,因此需要去判断是否在历史状态树当中。[0194]在一种可能的设计中,根据时期标识判断是否满足免证明要求,包括:[0195]判断在区块链网络的任意一个区块链节点中是否都储存有时期标识对应的状态树s0。[0196]在本实施例中,根据时期标识判断是否满足免证明要求,包括:[0197]判断在区块链网络的任意一个区块链节点中是否都储存有时期标识对应的状态树s0。[0198]在本实施例中,区块链网络中至少包括两种区块链节点,即全节点和轻节点,全节点中保存了所有时期对应的状态树,但是轻节点中只保留了部分状态树,但是,轻节点中至少保存了当前状态树和前一时期的历史状态树。[0199]因此,免证明要求的实质是:如果状态数据的地址中的时期标识所对应的时期,能够在轻节点所保存的所有状态树所对应的各个时期中查找到,那么就可以直接在当前的状态树上根据地址创建存储路径,即各个中间节点、叶子节点和存储槽,将状态数据存入存储槽当中。[0200]比如,轻节点中存储了:当前时期enow,前一时期enow-1,前三时期enow-3以及前五时期enow-5这四个时期对应的状态树,那么如果状态树的时期标识与这四个时期中的任意一个相对应,那么就不需要区块链节点根据证明算法来计算证明,如沃克尔证明。(证明方法详见上文记载的“证明的生成方式”)[0201]在一种可能的设计中,判断时期标识是否满足免证明要求,包括:[0202]判断第一时期e0是否在当前时期enow之前的预设时间范围内,第一时期e0与时期标识相对应。[0203]可选的,时间范围包括:k个周期,周期为每个时期en所持续的时间长度,k大于或等于1。[0204]例如,当轻节点中存储了当前时期enow以及前一时期enow-1对应的状态树时,预设时间范围就是1个周期,即前二时期enow-2就不做预设时间范围内。[0205]即对应s303中描述的:[0206]如果账户(e,s)在时期e被创建和修改,那么直接在树se的对应位置创建和修改;[0207]如果账户(e,s)在时期e+1被创建或修改,那么直接在树se+1的对应位置创建和修改。[0208]如果账户(e,s)在时期f(f》e)被修改,而且在树sf上对应位置已经创建,直接修改。[0209]s40在当前状态树snow上,根据地址编码创建对应的存储路径。[0210]在本步骤中,若满足免证明要求,直接在当前的状态树上根据地址创建存储路径,即各个中间节点、叶子节点和存储槽,执行步骤s404,将状态数据存入存储槽当中。[0211]s40根据地址,在各个历史时期对应的历史状态树上判断是否存在状态数据。[0212]在本步骤中,若不存在,则执行步骤s408,若存在,则执行步骤s409。[0213]具体的,当不满足免证明要求时,需要进一步扩大历史状态树的范围。此时需要注意的是,轻节点当中并没有存储所有时期的状态树,因此,对于轻节点来说,本步骤的实施时,只能是向全节点发送证明请求,由全节点在其所存储的历史状态树中去查找是否存储对应的状态数据。[0214]在本实施例中,本步骤具体包括:[0215]在各个目标历史时期所对应的目标历史状态树上,根据地址编码判断是否存在状态数据,目标历史时期包括:从时期标识对应的第一时期e0开始的各个历史时期;[0216]其中,目标历史状态树不包括已经存储在轻节点上的各个轻节点状态树,轻节点状态树至少包括:当前时期的状态树sn以及当前时期之前一个时期的第一历史状态树sn-1。[0217]可选的,目标历史时期不包括:当前时期enow以及当前时期enow的前一个时期enow-1。[0218]s40利用预设验证模型生成第一证明信息。[0219]在本步骤中,当区块链节点为出块节点时,需要将第一证明信息添加到状态数据对应的区块中,并将区块发送到区块链网络中进行共识,第一证明信息用于表征状态数据不在各个历史状态树上。,执行步骤s406。[0220]即对应s303中描述的:[0221]如果账户(e,s)在时期f(f》e+1)被创建,而且在树sf和sf-1上对应位置还没有创建,那么需要提供证明:账户(e,s)在这些树se,se+1,…,sf-2的对应位置都没有出现。[0222]需要说明的是,只有生成了第一证明信息,才能够在当前状态树上创建存储路径,否则,是无法在当前状态树中存储状态信息。即在具体实现时,会设置对第一证明信息的检验,如果没有第一证明信息,就无法进行下一步的存储操作。[0223]还需要说明的是,本步骤的第一证明信息的生成方式,包括沃克尔证明,或者是上文记载的“证明的生成方式”。[0224]s40利用预设验证模型生成第二证明信息。[0225]在本步骤中,当区块链节点为出块节点时,将第二证明信息添加到状态数据对应的区块中,并将区块发送到区块链网络中进行共识,第二证明信息用于表征:状态数据在最后一次被修改时所对应的第二状态树s1上,并且在最后修改时期e1之后的各个历史状态树上都不存在状态数据,最后修改时期与第二状态树s1相对应。,执行步骤s406。[0226]即对应s303中描述的:[0227]如果账户(e,s)在时期f(f》e+1)被修改,而且在树sf和sf-1上对应位置还没有创建,假设账户(e,s)最后一次被修改是在时期e′(e≤e′《f),那么需要提供证明:账户(e,s)出现在状态树se′的对应位置,而且在这些树se′+1,se′+..sf-2的对应位置都没有出现。[0228]同理,需要说明的是,只有生成了第二证明信息,才能够在当前状态树上创建存储路径,否则,是无法在当前状态树中存储状态信息。即在具体实现时,会设置对第二证明信息的检验,如果没有第二证明信息,就无法进行下一步的存储操作。[0229]本步骤的第二证明信息的生成方式,包括沃克尔证明,或者是上文记载的“证明的生成方式”。[0230]s4当状态数据在当前时期enow发生改变时,在当前时期对应的当前状态树snow上更新状态数据。[0231]在本步骤中,如果状态数据对应的账户,在同一时期内发生多次交易业务,那么直接在当前状态树的存储槽中更新状态数据。[0232]即对应s303中描述的:[0233]如果账户(e,s)在时期e被创建和修改,那么直接在树se的对应位置创建和修改;[0234]如果账户(e,s)在时期e+1被创建或修改,那么直接在树se+1的对应位置创建和修改。[0235]如果账户(e,s)在时期f(f》e)被修改,而且在树sf上对应位置已经创建,直接修改。[0236]s41将状态数据从各个历史状态树中删除,仅保留状态数据在各个状态树sn中对应的存储路径的哈希值。[0237]由于本技术将区块链不同时期的状态树分别存储,如果不做“状态”去重,将会给区块链节点带来很大的存储开销,尤其是全节点。[0238]本技术采用历史状态树修剪的方式:如果某个账户的“状态”(即本文中的状态数据)在当前时期发生改变,那么当前时期的状态树会保存该账户的最新“状态”,因此所有节点可以将该账户的旧状态从各个历史状态树中删除,仅保留状态树中对应位置的节点哈希值。[0239]本技术实施例提供了一种区块链状态数据处理方法,通过在每个时期en开始时,创建与时期en相对应的状态树sn;获取状态数据,状态数据包括:时期标识以及区块链节点为处理传入的区块和/或接收到的业务事件所必须的信息;根据时期标识以及预设要求,将状态数据存储到状态树sn中,以便于区块链节点在处理各项业务时调用状态数据;其中,预设要求包括:每个时期en内生成的状态数据只能存储到与时期en对应的状态树sn中。解决了现有技术中存在的当区块链系统运行一段时间后状态数据的检索和访问的效率大幅下降的技术问题。达到避免状态数据爆炸增长而导致区块链节点对交易处理效率或处理能力下降的技术效果。[0240]为了便于理解上述两个实施例所提供的方法,下面从时间推进角度进行示例,涉及到三个时期:时期0、时期1和时期2,需要说明的是,时期0和时期1是相邻的两个时期,但是时期1和时期2并不一定相邻。[0241]在区块链系统初始化完成后,所有区块链系统中的节点分别创建与当前时期t0对应的的第一状态树s0。[0242]当时间运行到时期0时,即当前时期为时期0的时候:[0243]时期0开始时,所有节点分别创建第一状态树s0,s0即为当前时期的当前状态树。[0244]区块链网络中的任意一个用户端节点接收用户发起的交易,并为该交易创建对应的智能合约。[0245]出块节点接收并执行该交易,出块节点为智能合约生成一个合约地址,该合约地址包括:时期前缀以及地址编码,该时期前缀与当前时期相对应。[0246],出块节点根据预先设定的对账户的访问和修改的第一规则要求(即:如果账户(e,s)在时期e被创建和修改,那么直接在树se的对应位置创建和修改)以及合约地址,确定智能合约在第一状态树s0上的存储地址,即在第一状态树s0上的若干中间节点上创建子节点和与该子节点对应的存储槽。需要说明的是,这些中间节点都包含在了存储地址的地址编码中,因为这些中间节点在状态树中都对应着至少一个子节点,所以也称这些中间节点为父节点。而且,可以将一个父节点所对应的子节点都放在一个子节点集合中,以便于对状态树进行检索和访问。[0247]接下来,出块节点将智能合约的数据保存在存储槽中。[0248],出块节点更新各个子节点集合对应的累加器向量以及累加器值,该子节点集合对应的父节点包含在存储地址中,存储地址中包括至少一个父节点,该父节点为状态树上的中间节点。[0249],出块节点将交易打包区块,并向区块链网络发布该区块。[0250]区块链网络上的其它节点收到该区块后,执行该交易,同样需要根据第一预设要求在节点自身的第一状态树s0上对应的位置创建子节点和存储槽,把智能合约的数据保存在对应的存储槽内,同时更新各个子节点集合对应的累加器向量以及累加器值。[0251]在时期0内的任意时刻,任意用户通过用户端节点发起的交易与上述智能合约进行交互,那么这个交易对应的出块节点直接在第一状态树s0上对应的存储槽修改数据,同时该交易的区块由出块节点发布到区块链网络进行共识后,其它所有的节点也会执行与区块节点同样的操作,即在各个节点的第一状态树s0上对应的存储槽修改数据。[0252]例如:在时期0开始时,即区块链系统完成初始化后,所有节点分别创建第一状态树s0;[0253](1)张三发送交易创建一个智能合约c1,李四发送交易创建一个智能合约c2。[0254](2)出块节点收到交易后执行交易,分别为智能合约c1生成一个地址(0,0xabcdef)和智能合约c2生成一个地址(0,0×123456),根据账户访问和修改规则1(即:如果账户(e,s)在时期e被创建和修改,那么直接在树se的对应位置创建和修改),出块节点在第一状态树s0的0x3a4b5c和0x6d7e8f对应的位置创建子节点和存储槽,把智能合约的数据保存在了对应的存储槽,更新第一状态树s0中3a,4b,5c,6d,7e,8f所在的子节点集合累加器向量和累加器值。[0255]需要说明的是,这里生成地址的算法可以采用哈希算法,即hash(0,0xabcdef)=0x3a4b5c,hash(0,0×123456)=0x6d7e8f。[0256](3)出块节点将该交易打包区块,其他节点收到区块后执行交易,在各自的状态树s0的0x3a4b5c和0x6d7e8f位置创建子节点和存储槽,把该智能合约的数据保存在了对应的存储槽,更新状态树s0中3a,4b,5c,6d,7e,8f所在的子节点集合累加器向量和累加器值。[0257](4)在这个时期内,任意用户发送交易与智能合约c1或c2交互,直接在第一状态树s0的0x3a4b5c或0x6d7e8f位置对应的存储槽修改数据。其他同步区块的交易后执行同样的操作。[0258]当时间运行到了时期1时,即时期1为当前时期时:[0259]进入新的时期,所有节点都创建一棵新的空白状态树s1,保存状态树s0。[0260](1)任意用户发送交易与地址为(0,0xabcdef)的智能合约c1交互;[0261](2)出块节点收到交易后执行交易(无论出块节点是全节点还是轻节点),发现在状态树s1中没有键为0x3a4b5c的状态数据,在状态树s0中查找,找到了键0x3a4b5c的状态数据;[0262](3)出块节点为这个交易构建证明证明键0x3a4b5c存在于状态树s0中,把该证明和交易绑定一起打包到区块中。[0263](4)出块节点根据账户访问和修改规则2(即:如果账户(e,s)在时期e+1被创建或修改,那么直接在树se+1的对应位置创建和修改),在状态树s1的0x3a4b5c位置创建子节点和存储槽,将交易执行后的状态数据存储到该位置,更新状态树s1中3a,4b,5c所在的子节点集合累加器向量和累加器值;[0264](5)其他节点收到区块后执行交易,验证证明如果不正确则拒绝整个区块;如果正确,同样根据账户访问和修改规则2(即:如果账户(e,s)在时期e+1被创建或修改,那么直接在树se+1的对应位置创建和修改),在各自的状态树s1的0x3a4b5c位置创建子节点和存储槽,把新的状态数据保存在了对应的存储槽,更新状态树s1中3a,4b,5c所在的子节点集合累加器向量和累加器值;[0265](6)此后,在这个时期内,任意用户发送交易与智能合约c1交互,出块节点根据账户访问和修改规则2,直接在状态树s1的0x3a4b5c位置和对应的存储槽修改数据。其他同步区块的交易后执行同样的操作。[0266]当时间运行到了时期2时,即时期2为当前时期时:[0267]进入新的时期,所有节点都创建一棵新的空白状态树s2,保存状态树s1。全节点继续保存状态树s0,轻节点丢弃状态树s0。[0268]任意用户发送交易与地址为(0,0xabcdef)的智能合约c1交互,所有节点的处理方式与时期1一样;[0269]任意用户发送交易与地址为(0,0×123456)的智能合约c2交互:[0270]1)出块节点如果是全节点,发现在状态树s2中没有键为0x6d7e8f的状态数据,在历史状态树中查找,在s0找到了键0x6d7e8f的状态数据。全节点为该交易生成证明即证明键0x6d7e8f存在于状态树s0中且不存在于状态树s1中,把该证明和交易绑定一起打包到区块中。根据账户访问和修改规则4,在状态树s2的0x6d7e8f位置创建子节点和存储槽,将交易执行后的状态数据存储到该位置,更新状态树s2中6d,7e,8f所在的子节点集合累加器向量和累加器值,其他节点的操作与时期1中的第五步类似;[0271]2)出块节点如果是轻节点,发现在状态树s2和s1都中没有键为0x6d7e8f的状态数据,则向全节点请求该状态数据的证明,全节点的处理和上一步一样。出块节点得到证明后,验证并执行交易,后续操作与上一步的全节点一样。[0272]此后,在这个时期内,任意用户发送交易与智能合约c2交互,出块节点根据账户访问和修改规则5,直接在状态树s1的0x3a4b5c位置和对应的存储槽修改数据。其他同步区块的交易后执行同样的操作。[0273]王五使用一个(0,0×456789)地址发送交易:[0274]1)出块节点如果是全节点,发现在状态树s2中没有键为0xa1b2c3(假设hash(0,0×456789)=0xa1b2c3)的状态数据,在历史状态树中查找都没有找到键0xa1b2c3的状态数据。全节点为该交易生成证明态数据。全节点为该交易生成证明即证明键0xa1b2c3不存在于状态树s0和s1中,把该证明和交易绑定一起打包到区块中。根据账户访问和修改规则3,在状态树s2的0xa1b2c3位置创建子节点和存储槽,将交易执行后的状态数据存储到该位置,更新状态树s2中a1,b2,c3所在的子节点集合累加器向量和累加器值,其他节点的操作与时期1中的第五步类似;[0275]2)出块节点如果是轻节点,发现在状态树s2和s1都中没有键为0xa1b2c3的状态数据,则向全节点请求该状态数据的证明,全节点的处理和上一步一样。出块节点得到证明后,验证并执行交易,后续操作与上一步的全节点一样。[0276]此后,在这个时期内,王五使用该地址发送交易,出块节点根据账户访问和修改规则5,直接在状态树s2的0xa1b2c3位置和对应的存储槽修改数据。其他同步区块的交易后执行同样的操作。[0277]本技术提供的区块链状态数据处理方法,能够很好地永久性解决区块链状态的爆炸增长带给所有节点的存储压力,而且不会给普通用户带来任何体验上的区别,原有的智能合约编程方式没有改变,仅仅底层的虚拟机在修改账户状态的时候做出对应的改变。能够引入完全不需要存储区块链状态的验证者角色,使得更多人参与区块和交易的验证,增加区块链系统的安全性。轻节点的存在,使得处理交易和出块的效率更高,因为无需将计算资源浪费在修改庞大的状态树,全节点也可以采用一些策略将很久没有访问的过期状态存储在硬盘中,需要的时候再调出来。[0278]图5为本技术实施例提供的一种区块链状态数据处理装置的结构示意图。该区块链状态数据处理装置500可以通过软件、硬件或者两者的结合实现。[0279]如图5所示,该区块链状态数据处理装置500包括:[0280]处理模块502,用于在每个时期en开始时,创建与时期en相对应的状态树sn;[0281]获取模块501,用于获取状态数据,状态数据包括:时期标识以及区块链节点为处理传入的区块和/或接收到的业务事件所必须的信息;[0282]处理模块502,还用于根据时期标识以及预设要求,将状态数据存储到状态树sn中,以便于区块链节点在处理各项业务时调用状态数据;[0283]其中,预设要求包括:每个时期en内生成的状态数据只能存储到与时期en对应的状态树sn中。[0284]在一种可能的设计中,处理模块502,还用于在每个时期开始时,若区块链节点中存在前一个时期的第一历史状态树sn-1,则保存并冻结第一历史状态树sn-1。[0285]在一种可能的设计中,当区块链节点为全节点时,在全节点中保存每个时期en对应的状态树sn;[0286]当区块链节点为轻节点时,在轻节点中至少保存:状态树sn以及第一历史状态树sn-1,并在当前的时期en开始时,删除不满足预设存储要求的第二历史状态树sm。[0287]在一种可能的设计中,预设存储要求包括:第二历史状态树sm对应的历史时期em与当前的时期en的时间间隔小于预设间隔。[0288]在一种可能的设计中,轻节点中能够保存预设数量个连续的时期en所对应的所有状态树sn,预设数量大于或等于2。[0289]在一种可能的设计中,获取模块501,用于:[0290]获取出块节点发送的区块,并根据区块确定状态数据;[0291]或者,获取用户发送的交易请求,并根据交易请求确定状态数据。[0292]在一种可能的设计中,状态数据对应的地址包括:时期标识以及地址编码,对应的,处理模块502,用于:[0293]在当前时期enow对应的当前状态树snow上,根据地址判断是否存在对应的存储路径;[0294]当存在存储路径时,根据存储路径将状态数据存入当前状态树snow中;[0295]当不存在存储路径时,判断时期标识是否满足免证明要求;[0296]若满足免证明要求,则在当前状态树snow上,根据地址编码创建对应的存储路径;[0297]根据存储路径将状态数据存入当前状态树snow中。[0298]在一种可能的设计中,处理模块502,用于:[0299]判断在区块链网络的任意一个区块链节点中是否都储存有时期标识对应的状态树s0。[0300]在一种可能的设计中,处理模块502,用于:[0301]判断第一时期e0是否在当前时期enow之前的预设时间范围内,第一时期e0与时期标识相对应。[0302]可选的,时间范围包括:k个周期,周期为每个时期en所持续的时间长度,k大于或等于1。[0303]在一种可能的设计中,处理模块502,还用于:[0304]若不满足免证明要求,则根据地址,在各个历史时期对应的历史状态树上判断是否存在状态数据;[0305]若不存在,则利用预设验证模型生成第一证明信息,且当区块链节点为出块节点时,将第一证明信息添加到状态数据对应的区块中,并将区块发送到区块链网络中进行共识,第一证明信息用于表征状态数据不在各个历史状态树上;[0306]并在当前状态树snow上,根据地址编码创建存储路径,根据存储路径将状态数据存入当前状态树snow中。[0307]在一种可能的设计中,处理模块502,用于:[0308]在各个目标历史时期所对应的目标历史状态树上,根据地址编码判断是否存在状态数据,目标历史时期包括:从时期标识对应的第一时期e0开始的各个历史时期;[0309]其中,目标历史状态树不包括已经存储在轻节点上的各个轻节点状态树,轻节点状态树至少包括:当前时期的状态树sn以及当前时期之前一个时期的第一历史状态树sn-1。[0310]可选的,目标历史时期不包括:当前时期enow以及当前时期enow的前一个时期enow-1。[0311]在一种可能的设计中,处理模块502,还用于:[0312]若存在,则利用预设验证模型生成第二证明信息,并且当区块链节点为出块节点时,将第二证明信息添加到状态数据对应的区块中,并将区块发送到区块链网络中进行共识,第二证明信息用于表征:状态数据在最后一次被修改时所对应的第二状态树s1上,并且在最后修改时期e1之后的各个历史状态树上都不存在状态数据,最后修改时期与第二状态树s1相对应;[0313]并在当前状态树snow上,根据地址编码创建存储路径,根据存储路径将状态数据存入当前状态树snow中。[0314]在一种可能的设计中,处理模块502,还用于:[0315]当状态数据在当前时期enow发生改变时,在当前时期对应的当前状态树snow上更新状态数据;[0316]区块链网络上的所有区块链节点将状态数据从各个历史状态树中删除,仅保留状态数据在各个状态树sn中对应的存储路径的哈希值。[0317]在一种可能的设计中,处理模块502,用于:[0318]将上一个时期en-1对应的第一历史状态树sn-1中访问频率小于预设阈值的节点删除后,得到状态树sn。[0319]值得说明的是,图5所示实施例提供的装置,可以执行上述任一方法实施例中所提供的方法,其具体实现原理、技术特征、专业名词解释以及技术效果类似,在此不再赘述。[0320]图6为本技术实施例提供的一种电子设备的结构示意图。如图6所示,该电子设备600,可以包括:至少一个处理器601和存储器602。图6示出的是以一个处理器为例的电子设备。[0321]存储器602,用于存放程序。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。[0322]存储器602可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。[0323]处理器601用于执行存储器602存储的计算机执行指令,以实现以上各方法实施例所述的方法。[0324]其中,处理器601可能是一个中央处理器(central processing unit,简称为cpu),或者是特定集成电路(application specific integrated circuit,简称为asic),或者是被配置成实施本技术实施例的一个或多个集成电路。[0325]可选地,存储器602既可以是独立的,也可以跟处理器601集成在一起。当所述存储器602是独立于处理器601之外的器件时,所述电子设备600,还可以包括:[0326]总线603,用于连接所述处理器601以及所述存储器602。总线可以是工业标准体系结构(industry standard architecture,简称为isa)总线、外部设备互连(peripheral component,pci)总线或扩展工业标准体系结构(extended industry standard architecture,eisa)总线等。总线可以分为地址总线、数据总线、控制总线等,但并不表示仅有一根总线或一种类型的总线。[0327]可选的,在具体实现上,如果存储器602和处理器601集成在一块芯片上实现,则存储器602和处理器601可以通过内部接口完成通信。[0328]本技术实施例还提供了一种计算机可读存储介质,该计算机可读存储介质可以包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁盘或者光盘等各种可以存储程序代码的介质,具体的,该计算机可读存储介质中存储有程序指令,程序指令用于上述各方法实施例中的方法。[0329]本技术实施例还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的方法。[0330]本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本技术的其它实施方案。本技术旨在涵盖本技术的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本技术的一般性原理并包括本技术未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本技术的真正范围和精神由本技术的权利要求书指出。[0331]应当理解的是,本技术并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本技术的范围仅由所附的权利要求书来限制。

区块链有啥用

1、请您确认您或您所代表的机构是符合《中华人民共和国证券投资基金法》、《中华人民共和国信托法》、《私募投资基金监督管理暂行办法》、《信托公司集合资金信托计划管理办法》、《证券公司客户资产管理业务管理办法》、《证券公司集合资产管理业务实施细则》、《基金管理公司特定客户资产管理业务试点办法》及其他相关法律法规所认定的合格投资者。

2、(2)个人金融资产不低于300万元或者最近三年个人年均收入不低于50万元。(前款所称金融资产包括银行存款、股票、债券、基金份额、资产管理计划、银行理财产品、信托计划、保险产品、期货权益等。)

3、“本网站”指由上海景林资产管理有限公司(以下简称“本公司”)所有并及其网站内包含的所有信息及材料。本网站所发布的信息、观点和数据有可能因所基于的信息发布日之后的情势或其他因素的变更而不再准确或失效,本公司不承诺及时更新不准确或过时的信息、观点以及数据。

4、本网站介绍的信息、观点和数据仅供一般性参考,不应被视为购买或销售任何金融产品的某种要约,亦非对任何交易的正式确认。投资有风险,投资产品的过往业绩并不预示其未来表现,本公司不对产品财产的收益状况做出任何承诺或担保,投资者不应依赖本网站所提供的数据做出投资决策,在做出投资决策前应认真阅读相关产品合同及风险揭示等宣传推介文件,并自行承担投资风险。

最新出的区块链有哪些

1、很有可能大家关注的区块链技术一词,大部分来源于2017年比特币暴涨至十万元一枚,及由于打造出具备区块链技术方式玩客云的迅雷资源股票价格完成4倍增加,由此可见其他东西、一切企业只需沾上了区块链技术一词无不例外都一炮而红。数字货币一词逐渐深入民心,随着它发生的通常也有“挖币”、“数字货币”。

2、因而我们要先弄清楚“区块链技术”与“数字货币”相互关系,“数字货币”实际上代指的要以BTC为代表的数以百计的(数据)贷币,他们并不是一切一个国家的法定货币,他们其价值彻底是来自于市场中人们对它的价格毫无疑问,而“区块链技术”乃是适用起“数字货币”底层技术和基础架构的灵魂与关键。

3、看上去区块链技术这词太难了了解,一样的,由于仅仅一个区块链技术我们能觉得这是一个数据库系统,具备区块链技术特性,或是分布式系统的,数据库系统里面全是应用不一样密码算法优化算法所产生的含有时间格式的信息。

4、有些人做了一个很生动形象的比喻,是这样子的:你需要在淘宝上选购一件商品,那就需要先付款,这一大笔钱会暂放进支付宝钱包第三方平台上,待店家发货后你确定接到产品,支付宝钱包再将钱打给商家,支付宝钱包就成为了一个中心化的平台交易,全部买卖都要经过它开展,保障彼此权益。

区块链技术模型

1、作为一个颇受争议的新热点, 可编辑区块链技术受到研究者质疑最多的就是数据编辑可能为区块链带来中心化安全风险, 并进而降低链上数据的可问责性(Accountability)和可信任性(Trustability), 其中可问责性表示用户可以确知某项链上数据是否经过了修改, 而可信任性则意味着用户确知链上数据经过了所有验证者的共识验证. 显而易见, 现有文献提出的数据修改方案大多存在着中心化的变色龙哈希陷门密钥或者中心化的控制策略(

如何自学区块链

1、区块链是在计算机网络的节点之间共享的分布式数据库或分类帐。作为数据库,区块链以数字格式以电子方式存储信息。区块链以其在比特币等加密货币系统中的关键作用而闻名,用于维护安全和分散的交易记录。区块链的创新之处在于它保证了数据记录的保真性和安全性,并在不需要受信任的第三方的情况下产生信任。

2、典型数据库和区块链之间的一个关键区别是数据的结构方式。区块链以组的形式收集信息,称为块,其中包含信息集。块具有一定的存储容量,在填充时会关闭并链接到先前填充的块,形成称为区块链的数据链。新添加的块之后的所有新信息都被编译成一个新形成的块,一旦填充,该块也将被添加到链中。

3、数据库通常将其数据构造成表,而区块链,顾名思义,将其数据构造成串在一起的块(块)。当以分散的性质实施时,这种数据结构固有地形成了不可逆转的数据时间线。当一个块被填满时,它就被固定下来并成为这个时间线的一部分。链中的每个块在添加到链中时都会被赋予一个确切的时间戳。

4、区块链的目标是允许记录和分发数字信息,但不能编辑。通过这种方式,区块链是不可变账本或无法更改、删除或销毁的交易记录的基础。这就是为什么区块链也被称为分布式账本技术(DLT)的原因。

区块链交易运行原理

1、在我们的方案中,假设有多家公司。 我们在乳制品加工公司建立了一个集中式数据库。 但所有参与者都不想成为中央机构。 我们可以使用区块链分布式账本。 使用区块链将不再需要中央机构。 此外,拥有区块链节点的每个参与者都可获得账本副本,以便他们能够自行审核并与自己的系统集成。 但并不要求每家公司都设置自己的下级节点。 合作伙伴之间可以共享这些节点。

2、每个节点都通过区块链网络连接到其他节点。 例如,Dalia Pelayo 农场、冰淇淋工厂和冰淇淋店都各自管理着一个节点。 Contoso West 和 Contoso East 是同属一家母公司的两个独立合作伙伴。 Contoso 有一个节点。 节点与公司之间不必存在一对一关系。

3、区块链中的数据表示状态。 这就是为什么区块链非常适合使用加密货币之类的数字令牌。 我们可以把这种情况想象为实际货币的所有权:一枚硬币一次只能在一个人的口袋。 如果硬币在你的口袋,所有权就是你的。 如果将硬币给朋友,状态就会变为你的朋友拥有这枚硬币。 在我们的方案中,货物运输通过供应链。 产品的责任方也随运输转移。 我们想知道的数据包括责任方、温度以及产品是否合规。

4、区块链使用事务将数据的状态从一个值更改为另一个值。 例如,如果我们需要知道冰淇淋是否在低于冰点的温度下存储。 在运输冰淇淋的过程中,温度传感器会定期报告温度。 报告的温度是一个事务,会发送到区块链事务节点。

赞(0) 打赏
未经允许不得转载:南漳学习网 » 区块链数据更改后会如何-区块链数据更改后会如何显示
分享到: 更多 (0)

区块链是什么-区块链知识学习-南漳学习网

南漳学习网联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏