一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

具有能量的特征为动力的区块链的制作方法

2021-11-20 05:26:00 来源:中国专利 TAG:

具有能量的特征为动力的区块链
1.相关申请的交叉引用
2.本技术要求享受于2019年2月21日递交的澳大利亚临时专利申请no2019900586的优先权,通过引用方式将其完整内容并入本文。
技术领域
3.本公开内容涉及分布式账本技术,并且更具体地但不限于采用工作量证明(proof

of

work,pow)方法的区块链数据库。


背景技术:

4.在整个说明书中对现有技术的任何讨论都不应以任何方式被视为承认此类现有技术是广为人知的或构成本领域公知常识的一部分。
5.区块链是一种开放的分布式账本,其可以抵抗修改。区块链包含存储在以加密方式链接的“区块”中的记录列表。添加到区块链的每个区块都包含前一个区块的加密哈希。
6.区块链在许多领域都有潜在的应用,例如供应链完整性领域。存在用于支持区块链上区块中数据的完整性的两种主要方法。它们是工作量证明(pow)和权益证明(pos)。
7.在pow区块链中,“矿工”,其通常使用专用硬件,参与搜索伪随机数的竞争。只有一个矿工可以通过找到这样的随机数来赢得这场竞争。然后使用该数字来创建新区块的哈希值。该系统有效地只允许一个矿工来产生或挖掘区块链中的下一个新区块。即使几个矿工找到合适的数字,也只有其中一个可以获胜。目前,具有普通计算能力(例如,笔记本电脑或智能手机)的矿工赢得竞争的机会可以忽略不计。
8.传统的pow方法具有低吞吐量。例如,比特币通常可以保持每秒1~2笔交易(tps)的吞吐量,而以太坊平均可以达到15tps左右。
9.通常,竞争寻找伪随机数的矿工越多,竞争就越困难,而反过来每个矿工消耗的能量也就越多。
10.在pos区块链中,新区块由参与者以与他们在区块链中的权益成正比的概率确定。因此,区块链的完整性可能由少数参与者控制,该少数参与者中的每个参与者都在区块链中拥有大量权益。具有少量权益或没有权益的人对区块链的贡献很小或根本没有。
11.构建基于pow的区块链比基于pos的区块链消耗更多的能量,但更健壮,因为它无法在不消耗大量能量的情况下构建。


技术实现要素:

12.提供了一种用于分布式账本中的区块生成的方法,所述方法包括:
13.多个客户端设备中的每个客户端设备定义相关联的电池,其中,每个电池包括工作量证明(pow)以及相关联的客户端设备的唯一标识符;
14.所述多个客户端设备中的每个客户端设备向维护所述分布式账本的多个节点广播所述相关联的电池;
15.所述多个节点在所述分布式账本中记录所述电池;
16.所述多个节点经由电池选择算法选择与所述多个客户端设备中的第一客户端相关联的第一电池以在所述分布式账本中生成新区块;并且
17.所述第一客户端设备使用所述第一电池来生成所述新区块。
18.该方法的优点是:由客户端设备用于执行工作量证明所消耗的能量不会被浪费,而是用作电池的一部分以在区块链中生成新区块。
19.所述唯一标识符还可以包括所述电池的唯一电池标识符。
20.这种方法的优点是:客户端设备可以具有一个以上的电池。
21.所述唯一标识符可以包括相关联的客户端设备的公共加密密钥。
22.该方法的优点是:所述网络中的节点能够使用客户端的唯一标识符来验证客户端的签名。
23.所述pow可以基于现有区块。
24.所述pow可以包括:接收
25.(hash(b)xor blind)作为输入,
26.其中

hash(b)’是在其上执行pow的现有区块b的哈希,而

blind’是随机值。
27.该方法的优点是:可以对矿工隐藏区块b的内容。
28.所述电池选择算法可以包括:将更大的选择概率分配给记录在所述分布式账本的最旧区块上的一个或多个电池。
29.该方法的优点是:旧电池的利用率更高,从而降低了电池在区块链上长时间存在的可能性。
30.所述电池选择算法还可以包括:将更大的选择概率分配给记录在最旧的生成的区块中的一个或多个电池,所述电池本身基于最年轻的生成的区块的。
31.提供了一种用于维护分布式账本的网络,所述系统包括多个节点和多个客户端设备。
32.其中,所述多个客户端设备中的每个客户端设备被配置为:
33.定义相关联的电池,其中,每个电池包括工作量证明(pow)以及相关联的客户端设备的唯一标识符;
34.通过所述网络向所述多个节点广播所述电池;以及
35.响应于被所述节点选择而生成新区块;
36.并且所述多个节点中的每个节点被配置为:
37.接收通过所述网络广播的电池;
38.在所述分布式账本中记录接收到的电池;以及
39.经由电池选择算法选择与所述多个客户端设备中的第一客户端相关联的第一电池以在所述分布式账本中生成新区块。
40.提供了一种由客户端设备执行的用于在分布式账本中生成区块的方法,所述方法包括:
41.定义电池,其中,所述电池包括工作量证明(pow)以及相关联的设备的唯一标识符;
42.通过网络向多个节点广播电池;以及
43.响应于所述电池被所述多个节点选择而生成新区块,其中,所述节点经由电池选择算法从多个广播电池中选择所述电池。
44.提供了一种用于分布式账本中的区块生成的设备,所述设备包括处理器,所述处理器被配置为:
45.定义电池,其中,所述电池包括工作量证明(pow)以及相关联的设备的唯一标识符;
46.通过网络向多个节点广播电池;以及
47.响应于所述电池被所述多个节点选择而生成新区块,其中,所述节点经由电池选择算法从多个广播电池中选择所述电池。
48.提供了一种(可选是非暂时性的)计算机可读介质,其被配置为存储指令,这些指令在被执行时使处理器执行:
49.定义电池,其中,所述电池包括工作量证明(pow)以及相关联的设备的唯一标识符;
50.通过网络向多个节点广播电池;以及
51.响应于所述电池被所述多个节点选择而生成新区块,其中,所述节点经由电池选择算法从多个广播电池中选择所述电池。
52.提供了一种由节点执行用于维护分布式账本的方法,所述方法包括:
53.通过网络从多个客户端设备接收多个电池,其中,每个电池包括工作量证明(pow)以及相关联的客户端设备的唯一标识符;
54.在所述分布式账本中记录接收到的电池;以及
55.经由电池选择算法选择与所述网络的所述多个客户端设备中的第一客户端相关联的第一电池以在所述分布式账本中生成新区块。
56.提供了一种用于维护分布式账本的设备,所述设备包括处理器,所述处理器被配置为:
57.通过网络从多个客户端设备接收多个电池,其中,每个电池包括工作量证明(pow)以及相关联的客户端设备的唯一标识符;
58.在所述分布式账本中记录接收到的电池;以及
59.经由电池选择算法选择与所述网络的所述多个客户端设备中的第一客户端相关联的第一电池以在所述分布式账本中生成新区块。
60.提供了一种(可选是非暂时性的)计算机可读介质,其被配置为存储指令,这些指令在被执行时使处理器执行:
61.通过网络从多个客户端设备接收多个电池,其中,每个电池包括工作量证明(pow)以及相关联的客户端设备的唯一标识符;
62.在所述分布式账本中记录接收到的电池;以及
63.经由电池选择算法选择与所述网络的所述多个客户端设备中的第一客户端相关联的第一电池以在所述分布式账本中生成新区块。
附图说明
64.现在将参考附图仅通过示例的方式描述本发明的优选实施例,在附图中:
65.图1示出了根据一个实施例的示例性方法;
66.图2是根据一个实施例的电池的示意示出;
67.图3是分布式网络的示意示出;
68.图4是根据一个实施例的电池的示意示出;
69.图5是根据一个实施例的区块结构的示意示出;
70.图6是根据一个实施例的区块结构的示意示出;
71.图7是第一网络的示意示出;
72.图8是第一网络的示意示出;
73.图9是示例性缓冲器结构的示意示出;
74.图10是用于选择电池的算法的示意示出;以及
75.图11是用于选择候选电池的算法的示意示出。
具体实施方式
76.本公开内容涉及工作量证明(pow)方法。具体而言,本公开内容涉及用于分布式账本技术(也被称为enerid区块链)的非竞争性pow方法,并支持区块链中的实时和非实时数据记录。
77.pow是用于支持区块链完整性的基础机制,所述区块链例如比特币区块链(详见s.nakamoto;bitcoin:a peer

to

peer electronic cash system.url:http://bitcoin.org/bitcoin.pdf)以及fruitchains(水果链)(详见r.pass and e.shi;fruitchains:a fair blockchain;acm分布式计算原理研讨会论文集(podc'17),2017)。常用的pow机制基于加密哈希函数。给定特定于区块链的信息info,基于哈希的pow要求用户搜索随机数或nonce,以便哈希函数的输出hash(nonce,info)满足某个标准,例如小于由基于pow的区块链协议指定的特定值。由于哈希函数的单向性和伪随机性特征,数nonce只能通过试错法搜索来获得。因此,适当的nonce被用作pow。nist已经标准化了许多哈希算法,例如比特币区块链中使用的sha

256。不仅是基于哈希的pow机制,本公开内容中的enerid区块链可以用任何pow机制来实现。pow机制必须满足的主要标准是:解决方案(即本公开内容中的nonce)必须成本高昂和/或耗时而产生,但易于验证。由于pow的这种不确定性和耗时性,因此,当前基于pow的区块链无法以实时方式记录数据。
78.基于pow的区块链需要消耗大量的能量来构建。然而,正是这种能量消耗提供了该方法的鲁棒性并且实际上是由设计决定的。重新创建/重写区块链的任何尝试都至少需要再次花费相同数量的能量,因为将必须重新挖掘所有随机数。
79.然而,除了获胜矿工消耗的能量之外或之上,大量的能量基本上被许多失败的矿工浪费了。这些失败的矿工也消耗了能量以寻找随机数,但由于他们没有赢得竞争,因此他们没有能力在区块链中签署新区块。因此,这些失败的矿工所消耗的能量被浪费了,并且因此构建区块链的能源成本明显高于所记录的pow。
80.基于电池的工作量证明—概述
81.参考图1至图3描述了一种更节能的基于pow的分布式账本。
82.用于分布式账本中的块生成的方法100如图1所示。方法100在分布式网络300中执行,例如图3所示,包括多个客户端设备302至306以及节点304至308。
83.从网络300可以明显看出,一些客户端设备304、306也是节点。如图所示的网络300是示例性网络并且不应被视为限制。网络300的其他配置包括:所有客户端设备都是节点并且所有节点都是客户端设备,以及节点和客户端设备是互斥的。
84.方法100开始于步骤102,其中多个客户端设备302至306中的每一个定义相关联的电池200,如图2所示。每个电池200包括由相关联的客户端设备执行的工作量证明202,以及与该客户端设备相关联的唯一标识符204。
85.一旦在步骤102处定义了电池200,则在步骤104处将每个客户端设备的电池200广播到维护分布式账本的多个节点。为清楚起见,图3仅示出客户端设备302广播电池200,然而实际上这将由定义电池的每个客户端设备执行。此外,节点和设备网络300彼此进行双向通信。
86.在步骤106处,多个节点304至308在分布式账本中记录接收到的电池。稍后,节点304至308执行步骤108,其中电池选择算法由每个节点304、306、308使用来选择与第一客户端设备相关联的第一电池。
87.然后由第一客户端设备执行步骤110,其使用第一电池在分布式账本中生成新区块。具体来说,第一电池的pow 202用于生成区块。
88.上述方法允许更节能地构建基于pow的分布式账本,因为未获胜的矿工消耗的能量没有被浪费,而是被存储起来以备日后使用。同时,这种方法保留了pow账本的鲁棒性。
89.方法100的另一个优点是它允许区块链的更大吞吐量,因为它允许更大的区块形成率。这一优势是由于记录在区块链上的电池存储库而实现的。当对于区块的需要出现时,可以利用电池来创建块。相比之下,用于pow的现有技术方法要求pow与区块生成同期进行,这导致区块生成的显著延迟并因此降低了吞吐量。
90.在一些实施例中,如图4所示,电池200'还包括电池200'的唯一电池标识符202'。电池标识符206定义特定的电池并允许客户端设备产生仅具有单个客户端标识符的多个电池。电池200'还可以包括矿工消息208,其包括客户端设备希望记录在区块链中的数据。由于生成电池所需的时间(下面更详细地讨论),矿工消息208适用于非实时数据记录。
91.定义电池
92.为了创建电池,客户端设备生成公钥/私钥对(pk,sk),其中,公钥pk用作客户端设备的唯一标识符204。包括客户端设备的唯一标识符204的任何电池都被称为与该客户端设备相关联。在当前示例中,唯一标识符是由客户端设备生成的公钥。然而,在其他实施例中,唯一标识符204可以采取不同形式,包括但不限于唯一序列号、ip地址、唯一介质访问控制(mac)地址(无论是通用的还是本地管理的)或其他适当的标识符,包括标识符的组合。
93.最初,客户端没有执行pow,并且因此不允许在区块链中创建区块。
94.为了正式定义pow,令c表示分布式账本,b是区块,其在链c中具有区块标识符blk

id。为了执行pow,客户端必须找到nonce或随机数,使得:
95.hash(pk,hash(b)

blind,nonce,battery

id,miner

message)<target,
96.其中,其中

是异或运算(xor),battery

id是新的唯一电池标识符,blind是随机值,miner

message是由矿工提供的任何消息,而target是用于控制pow难度的参数。当c是私有链时,hash(b)

blind保护区块b的机密性,同时允许pow的外包并支持电池市场,而不会泄露链。在pow外包场景中,可以将miner

message替换为其哈希值以保护隐私。如果c是
公开的,并且区块b中的数据不是秘密的,则可以从pow中省略

blind。
97.电池可以被定义为:
98.(battery

id,nonce,blk

id,blind,pk,miner

message,sig)
99.其中sig是可以用公钥pk验证的电池前四个字段的签名。据说该电池指的是c中的区块“blk

id”。由于随机nonce搜索,生成电池需要时间,并且因此要被记录在电池中的矿工消息208是非实时数据记录。替代地,下面参考图5讨论的数据518是用于直接记录在区块中的实时数据,因为生成新区块不涉及pow。
100.当电池200被创建时,定义102该电池的客户端设备302将其广播104到网络300中的节点。在实践中,电池200是包括上面列出的信息的数字对象或文件,并且通过适当地寻址电池200来广播104,使得网络300中的所有可能节点都接收到它。在一些实施例中,不将电池200广播到所有可能的节点,而仅广播到所选择的节点。在该实施例中,广播步骤104涉及将电池200寻址为多播数字对象,以使其仅被发送到预期节点。
101.在一些实施例中,客户端设备302确实执行广播步骤104,但是将广播104电池200委托给另一设备。
102.电池200由验证pow 202'的节点304至308接收。假设节点304至308能够验证pow 202',则电池200会像其他数据一样被记录106。也就是说,其被存储在缓冲器中(在下面更详细地描述)以在区块被生成110时添加到链c的未来区块。
103.在大多数情况下,节点304至308选择108之前记录的电池来生成新区块。下面详细描述选择步骤108。因此,c不仅存储数据,还以电池的形式存储pow的记录。这可以看作是c存储能量以对推动其自身的增长。在一些实施例中,c还存储控制其增长的一些控制指令。当创建电池时,最佳实践是客户端参考它可以看到的链中的最后一个区块。
104.电池选择算法概述
105.如上所述,节点304至308选择108电池来生成新区块。电池选择算法以确定性方式从记录在c的较早块中的电池中选择电池。然而,在添加新区块之前,将概率分配给电池以供选择以生成将在新区块之后的区块。较高的概率被分配给记录在c的较早块中的电池。在存储在较早块中的电池中,参考较新区块的电池被分配较高的选择概率。这在定义电池时为客户端设备参考时间上最近的区块提供了激励。在下面的单独部分中,提供了称为“next(c)”的示例性电池选择算法的细节。
106.在c上的数据记录请求增加,使得区块形成超过电池创建的时间段期间,系统能够“减少”记录的电池。在实践中,该减少涉及使用存储在先前记录的电池中的pow 202'来执行记录请求,从而使用所存储的电池。也就是说,创建所存储的电池的客户端设备能够在c中生成新区块,并且从而减少存储在c中的电池数量(因为电池只能使用一次)。这为消耗所有电池(包括来自慢速设备的电池)提供了机会。因此,用于产生电池的电力不会被浪费;相反,它存储在电池中,等待最终在区块链构建时被消耗掉。
107.在上述方法中,无论计算能力如何,每个客户端都具有产生电池的机会。这是因为客户端设备没有在实时竞争以产生pow。相反,每个客户端都能够在由他们自己的可用计算能力所确定的时间内独立地产生pow。因此,与同期的pow方法相比,对挖掘能力进行汇聚的激励减少了。这是有利的,因为矿工的汇聚与分布式账本的重要的分散式设计目标背道而驰。
108.区块结构
109.如上所述,链c是一系列相链接的区块。除了第一个或首创的区块之外,c中的区块b可以是两种类型之一。
110.在第一类型中,如图5示意性所示,区块500包括唯一区块标识符502、电池标识符504、指示区块的创建时间的时间戳506、前一区块的标识符508、前一区块的哈希值510、签名512、确定性随机数(drn)514、控制字段516、数据518以及电池520。
111.电池标识符504是用于创建区块500的电池200的唯一标识符204。电池标识符504与记录在c中的前一个区块上的电池相关联。
112.签名512是区块500的所有其他字段502至510和514至520的签名。可以用与电池标识符504相关联的公钥pk来验证签名512。
113.数据518包括存储在分布式账本上的目标数据,并且是包含merkle哈希树的根的字段。
114.电池520记录新生成的电池,将来可以使用这些新生成的电池来创建新区块。
115.控制字段516包括控制指令,例如调度消息传送服务器的指令,以及通知具有相关联电池的客户端设备的可用性的指令。
116.drn 514对于创建该区块的客户端/电池是确定性的,但在该区块被发布之前,对于其他客户端和节点是随机且未知的。它是使用生成了区块的客户端的私钥和该客户端使用的电池创建中的随机数和盲注以及前一个区块508的drn 514的值来计算的。
117.图6中示意性地示出的第二区块类型600类似于第一类型500,除了电池标识符504被电池604替代。电池604中的区块标识符必须指定链中的最后一个区块,也就是说,电池604必须参考链c中的最后一个区块。应该注意的是,该区块中的电池604尚未包括在链c中。第二区块类型600允许在被选择以创建区块的客户端没有响应时或在链c中没有记录电池时进一步构建链c。
118.区块链协议
119.设想了两种情况,分别在图7和图8中示出。图7的网络700适用于第一种情况,其中所有客户端设备702都具有公共ip地址,并且总是准备好创建新区块,或者它们的不可用时间是可预测的。消息传送服务器704用于帮助新客户端设备或节点连接到网络700。对于企业区块链应用,该场景适用于其中节点可以是专用机器的情况,这些专用机器可能来自不同的组织,彼此不信任,用于维护区块链。这由下面详细讨论的第一区块链协议来管理。
120.在图8的第二场景中,假设客户端802不可靠。这可能是因为由于缺少公共ip地址或由防火墙进行的分组过滤,该客户端无法连接到节点/客户端,或者它可能并不总是连接到网络。例如,该场景中的客户端设备804可以是可能已关机或具有私有ip地址的移动电话。这由下面详细讨论的第二区块链协议来管理。
121.第一协议比第二协议简单得多。下面将在介绍缓冲器结构之后描述这两种协议。
122.首创区块
123.在第一区块或首创区块中,唯一区块标识符502为零,电池标识符504是消息服务器的公钥,时间戳506指示区块500的创建时间,前一区块的标识符506和前一区块的哈希508二者均为零。签名512是该首创区块中时间戳506和控制字段516的签名,drn 514为零,数据518和电池520二者都是空字段。控制字段516包括用于选择下一个电池以在链c中创建
新区块的指令,下面更详细地描述。
124.在上面讨论的第一场景中,消息传送服务器用于帮助客户端或节点连接到区块链网络。在第二场景中,其用于促进网络通信。消息服务器提供公钥pk以充当首创区块中的电池标识符504。私钥pk可以验证签名512。公钥pk也用于第二和第三块中的电池标识符504,因为在首创区块中不包括电池。消息传送服务器的ip地址以及建立通信通道所需的其他信息可以包括在控制字段516中。
125.缓冲器结构
126.当节点或客户端向区块链提交数据、电池或指令时,它最初存储在这些节点中的一些节点或所有节点的三个独立缓冲器中。缓冲器结构如图9所示,并且包括数据缓冲器902、控制缓冲器904以及电池缓冲器906,以分别用于临时存储数据、控制信息和电池。
127.在一些实施例中,缓冲器902中的数据将在不涉及pow的情况下被记录;因此,它可以是实时数据。缓冲器902中的数据由提交数据的客户端签名,并包括客户端的相对应的公钥。
128.由于对于实时数据备案不需要pow,因此提交实时数据的客户端必须提供汇款备案,以维护区块链的完整性。例如,可以是:客户端提供enerid币作为汇款,其中enerid币是基于enerid区块链的加密货币单位。客户端可以使用其他货币来购买enerid币,或者通过使用开采的电池创建新区块来赚取enerid币。实时记录所花费的币被消耗并从enerid区块链中被删除。
129.取决于在控制字段516中配置的区块大小,在创建新区块时,一些数据可以存储在缓冲器902中,并且一些缓冲器内容将被记录在区块链中。客户端因签署新区块或建议将电池记录在由另一客户端创建的新区块中而获得奖励。
130.对于第一区块链协议,每个节点都有其自己的缓冲器。应该注意的是,仅有效电池存储在电池缓冲器906中。
131.对于适用于如图8的网络800之类的网络的第二区块链协议,用于节点的缓冲器由消息传送服务器704'提供。这是因为一些客户端/节点不可靠。
132.缓冲器可能为空。因此,新区块只能记录数据、只能记录电池、只能记录控制指令,或者它们的组合。
133.在第一协议中,每个节点存储当前区块链的其自己的副本,而在第二协议中,消息传送服务器704'存储副本并提供对其他节点的访问。这并不排除其他节点具有用于对区块链的分布式存储的缓冲器,尽管这不是必需的。
134.第一区块链协议
135.给定当前所有节点都同意的区块链c,该协议的一个关键步骤是创建下一个区块,该下一个区块仍然可以被所有节点同意。通过这种方式,协议归纳地保证了所有节点当中增长链的共识。
136.在该协议中,下一个区块由电池创建。但是,需要确定性地选择电池,使得所有节点就所选择的电池达成一致,并且因此就由其创建的下一个区块达成一致。此外,如果该电池甚至在不同时间错误地创建若干版本的新区块,则协议应具有确定性机制来解决不一致的问题。
137.由函数“next(c)”表示的电池选择算法如图10所示,并已开发用于选择下一个电
池。该函数包含在首创区块的控制字段516中。
138.在一些实施例中,可以在后面的区块中更新next(c)函数。
139.还开发了另外的函数,reconciliation(c,c'),以通过选择链进行保持以来解决两个链c和c'之间的不一致。在比特币协议中,将c和c'之间的较长链被保持。即使c和c'具有相同的长度,reconciliation(c,c')函数在做决定时也会考虑更多的因素并且进行工作。
140.下面详细讨论next(c)以及reconciliation(c,c')函数。
141.对于第一协议,电池可以向控制缓冲器提交签名的指令,表明它将不能创建新区块;该语句在包括在块中时生效。类似地,当该身份再次可用时,它会提交签名的声明,表明其可用性。
142.电池选择算法—next(c)函数
143.如上所述,由next(c)函数从存储在c中的所有电池中选择108记录在c中的电池。next(c)函数是所有客户端设备和节点共享的确定性函数。因此,每个客户端设备都可以独立检查与其相关联的电池200'是否被选择;在这种情况下,该客户端设备在c中生成110下一个区块。然后该区块由网络300中的节点304至308使用公钥pk来验证签名sig来进行检查和同意。
144.next(c)函数1000如图10所示。最初,在步骤1002处,选择c中记录的最旧的可用电池。然后在步骤1004处,将这些电池按年龄的升序排列。然后在步骤1006处,计算每个电池的哈希值。哈希值是使用电池标识符drn 514和计数器值(例如串联)计算得出的。在步骤1008处,确定产生最小哈希值的电池标识符。然后在步骤1010处,选择与该电池相关联的客户端设备以产生下一个区块。如果两个或更多个哈希值共同最小,则在重复步骤1008之前在增加计数器值之后重复步骤1006。重复步骤1006和1008,其中,增加计数器值,直至选择了电池。
145.因此,给定当前链c,每个电池可以使用next(c)函数1000来独立地检查它是否是所选择的电池。所选择的电池然后将会生成下一个区块来增长c。由于该新区块的生成不涉及同期执行pow,因此生成速度快,并且所记录的数据可以是实时数据。然后,该新区块直接由与所选择的电池相关联的客户端设备或经由消息传送服务器广播到所有其他节点。如果新区块有效并包括在链中,则所选择的电池的所有者将获得一枚enerid币;该币可以与其他客户端交易或由所有者自己使用与所选择的电池中的公钥相对应的私钥来进行消费。
146.其他节点确认新区块是否是由使用next(c)计算的电池进行签名的。如果是这样,除非选择的电池是c中最后一个可用的电池,否则该新区块将被接受。当大量请求在短时间内被提交到区块链从而耗尽了电池存储库时,就会发生这种情况。为了解决这个问题,如果next(c)返回c中最后一个可用的电池,则由它签名的新区块必须包含至少一个未使用的电池才能被接受。如果没有未使用的电池要记录,则在使用所选择的电池生成新区块之前,与所选择的电池相关联的客户端设备必须等待直到新的电池被开采。
147.当创建新区块时,与由next(c)选择的电池相关联的所选择的客户端记录来自其本地缓冲器的数据;应该注意的是,数据必须由具有足够的币作为有效性条件的私钥来签名。如果新区块包括无效数据,则它是无效的。但是,它只记录由其他客户端设备所建议的电池。这避免了客户端设备只能记录与其自身或优选客户端设备的其他组相关联的电池。
148.这是由所选择的客户端实现的,也就是说,具有由next(c)1000选择的电池的客户端,发出针对要包括在区块中的电池建议的请求。这些请求针对使用下面概述的过程识别的特定建议客户端设备。
149.令确定性随机数(drn)和确定性随机数’(drn’)分别表示该新区块和c的最后一个区块中drn 514字段的值。那么,可以建议电池的第i个客户端是在c中创建第j个区块的客户端,其满足:
150.j=(drn

drn’)i%len,
151.其中len是c的长度(区块的数量),

是异或xor运算符,而%是模数运算。第i个客户端只能建议带有标识符battery_id的电池,满足:
152.battery_id%n=i,
153.其中,n是与可以建议的其他客户端相关联的电池的最大数量。该条件可确保某个电池不被多个建议客户端所建议。
154.应该注意,必要的是:所选择的客户端必须发出请求,因为其他客户端不知道新区块中drn的值,并且因此无法知道它们是否适合提供建议。
155.从第i个建议客户端返回给所选择的客户端的建议以以下形式提供:
156.(i,batteries,sig),
157.其中,sig是签名,由第i个客户端的私钥组成,是i和所建议的电池的串联。该签名是用建议客户端的公钥可验证的,建议客户端的公钥可以通过c的第j个区块中的电池id找到。
158.reconciliation(c,c’)函数
159.创建c的最后一个区块的电池可能会通过创建新区块的两个版本而表现出故障行为,每个版本记录不同的电池和数据哈希值。为了解决这种不一致,每个节点都使用reconciliation(c,c')函数来选择要保留的最后一个区块或者要保留哪条链。
160.在第一协议中,所有电池都可用于创建块,或者它们的不可用性是可预测的。在这种情况下,可以使用第二区块类型600来扩展链c,并且创建区块的电池不需要等待所有电池建议的电池的响应。如果允许,当所选择的电池没有响应时,可能会有多个新的第二类型600区块来扩展c。下面的reconciliation函数也需要考虑这种情况。
161.给定两个区块链c和c',所有节点都使用函数reconciliation(c,c')来确定应该保留哪条链。该函数是两步过程。
162.如果c和c’具有不同的长度,则保留c和c'之间较长的那个。
163.否则,定位c和c’不一致的第一区块;分别表示为b和b'。如果b和b'中只有一个是第一类型500,那么包含它的链将被保留为可信链。
164.在b和b'二者都具有第一类型500的情况下,由于上述next(c)函数的定义,它们必须由同一个电池创建。在这种情况下,具有较小签名512值的链被保留为可信链。
165.如果b和b’都具有第二区块类型600,那么在b和b'之前的区块中的确定性随机数(drn)514用于函数1000的步骤1006和1008以生成创建b和b'的电池的值。具有由较低值创建的区块的链被保留为可信链。这避免了两条独立链增长的情况,而是基于现有数据来解决不一致的情况。相比之下,比特币协议允许两条链都增长,而然后选择二者中较长的一条链。
166.应该注意的是,如果c中记录的所有电池都不可用,则该协议相当于用于比特币交易的传统pow区块链。
167.还应注意的是,当没有可用电池时,创建第二类型600的新区块的速度会慢得多,从而影响区块链协议的吞吐量。在这种情况下,下面描述的第二协议将产生更高的吞吐量。
168.第二区块链协议
169.在第二区块链协议中,客户端设备的可用性是不可预测的,并且它们可能没有公共ip地址来直接接收来自其他矿工的通知或请求。例如,客户端设备(例如移动电话)可能会在特定时间关闭。
170.在消息传送服务器704’的帮助下,解决了不可预测的可用性和私有ip地址问题。主消息传送服务器704'被信任以传播消息,而不隔离任何网络节点。应该注意的是,第一协议不一定需要消息传送服务器,而在该协议中,它是网络架构的必要部分。
171.在第二协议中,管理节点808被设计为主消息传送服务器,如果这两个节点都不具有公共ip地址,则节点可以通过该主消息传送服务器与另一个节点通信。具有电池的每个可用客户端设备都与消息传送服务器704'保持网络连接。除了主消息传送服务器之外,其他节点可以请求成为被调度的消息传送服务器。
172.管理节点808具有偶尔更新的公钥/私钥对;其初始公钥记录在首创区块中。管理节点808可以创建新的密钥对并将新的公钥包括在由它传播的区块的控制字段516中。当管理节点808的新公钥在新区块中发布时,旧公钥不再有效。当管理节点808传播新区块时,它将传播签名附加到控制字段。传播签名是整个区块的签名。
173.具有电池的客户端可以在创建新区块时请求成为被调度的消息传送服务器。在请求被管理节点808批准后,客户端设备成为被调度的消息传送服务器,其传播新区块,其中,其签名被添加在新区块的控制字段516中。对被调度的消息传送服务器的请求和批准也记录在控制字段516中。在批准中,管理节点表示可以由该被调度的消息服务器来传播10个区块(可配置的)。在以下三种情况下,管理节点808重新获得对消息传播的控制:
174.a.被调度的消息传送服务器已经处理了计划数量的区块;
175.b.被调度的消息传送服务器在预定时间(10秒,可配置的)内无法传播消息;
176.c.被调度的消息传送服务器被认为是不诚实的,因为它会将不一致的新区块传播到其他节点。
177.在第二协议中,更新的next(c)函数用于返回一组候选电池,而不是像第一协议中那样只返回一个候选电池。该组的大小是可配置的。更大的组允许更多符合条件的电池用于创建新区块,代价是增加网络业务和增加由消息传送服务器704'进行的处理。
178.经更新的next(c)函数1100类似于next(c)函数nn,并在下面参考图11进行描述。
179.最初,在步骤1102处,选择c中记录的100个最旧的可用电池。然后在步骤1104处,将这些电池按使用时间的升序排列。然后在步骤1106处,计算每个电池的哈希值。使用c的最后一个区块的电池标识符402和drn514的串联来计算哈希值。在步骤1108处,哈希值之前是按升序排列的。然后在步骤1110处,选择与前几个哈希值相对应的电池,其中,所选择的确切数量为将是应用特定的可配置参数。
180.应该注意的是,可以使用原始next(c)函数1000的步骤1006和1008对由该经更新的next(c)函数返回的候选的列表进行排序。
181.在第二区块链协议中,当前链c可以被扩展为两种类型的区块:
182.·
由使用经更新的next(c)函数1100选择的电池来创建的第一类型500结构的区块;或者
183.·
由新开采的电池(指的是c中的最后一个区块)创建的第二类型600的区块。
184.如果至少一个由经更新的next(c)函数1100选择的电池可用,则由该电池构建的新区块具有第一类型500。如果所有所选择的电池都不可用,则新开采的电池将被用于创建第二类型600的新区块。
185.网络中的消息传播时间名义上被设置为10秒(是可配置的数量)。使用经更新的next(c)函数1100,链c被扩展为具有第一类型500或第二类型600的新区块。
186.如果与由经更新的next(c)函数1100选择的电池相关联的客户端设备可用,则添加第一类型的区块。此外,如果客户端想要充当被调度的消息传送服务器,则其可以通过包括其公共ip地址而在区块的控制字段516中指示该请求。电池和数据字段以与第一场景相同的方式来构建;然而,如果负责建议电池的所有其他客户端或节点在预定时间段(通常为10秒)内没有响应,则管理节点可以向客户端提供可配置数量的电池。
187.然后,如果c中时间最近的区块中批准了一个新区块,则该新区块然后被发送到管理节点以及当前被调度的消息传送服务器。
188.如果与由经更新的next(c)选择的电池相关联的所有客户端设备都不可用,则生成第二类型的区块。此外,该区块不能立即被添加。管理节点808或被调度的消息传送服务器然后等待参考c中最后一个区块的新电池的挖掘。与新电池相关联的客户端然后创建第二类型600的新区块以使c增长。该新区块然后被发送到管理节点和被调度的消息传送服务器。创建此类新区块的客户端的电池利用原始next(c)函数1000的步骤1006和1008进行排序,并且由最小的battery_id创建的新区块在管理节点或被调度的消息传送服务器进行上述操作时被该管理节点或被调度的消息传送服务器选择并传播。
189.应该注意的是,创建第二类型600的区块需要更多时间,因为涉及同期工作量证明。如果存在可用的电池,这将为所选择的电池提供足够的时间来创建和传播第一类型500的区块。以下经更新的reconciliation函数处理第一类型区块和第二类型区块同时在网络中流通的情况。
190.在这种情况下,来自符合条件的客户端设备的新区块由管理节点或被调度的消息传送服务器接收,该管理节点或被调度的消息传送服务器选择这些新区块其中之一来扩展链。然后该管理节点或被调度的消息传送服务器将所选择的区块传播到整个网络,如下所述。
191.当管理节点或被调度的消息传送服务器从符合条件的客户端设备获取新区块时,他们需要选择这些新区块其中之一来扩展链并将该新区块传播到整个网络,如下所述。
192.如果没有被调度的消息传送服务器,则管理节点根据这些新区块中的电池标识符在10秒钟的结束时对接收到的新区块进行排序,并使用功能1000的步骤1006和1008来选择客户端。应该注意的是,如果由原始next(c)计算的候选电池以新区块进行响应,管理节点可以立即进行,而无需等待10秒钟。
193.然后,如果存在未被批准的请求,则管理节点将对最后被调度的服务器请求的批准添加到控制字段516中。批准表示该被调度的服务器可以处理的区块的数量(可配置的数
量)。
194.最后,管理节点对该区块进行签名,将该签名(即传播签名)放入控制字段516,并将该区块传播到所有其他节点。如果满足以下条件,则接受该新区块:
195.·
对该区块进行签名的电池id在next(c)的范围内;
196.·
控制字段中的传播签名也是有效的;以及
197.·
电池的字段由客户端设备正确建议,如第一种情况中所述或由管理节点建议。
198.如果存在一个经批准的被调度的服务器,则该服务器以与管理节点相同的方式来处理新区块,除了它不能批准请求。然后,经调度的消息传送服务器签署该区块,将传播签名放入控制字段516,并将该块和随后可由经更新的next(c)选择的所有标识传播到管理节点。管理节点也将该新区块转发到所有节点。由于被调度的服务器可能是小型设备,因此这种传播策略可以减少被调度的服务器的处理负担。以相同的方式检查该新区块是否被接受。
199.在20秒的结束时(网络传播时间的两倍,可配置),如果被调度的消息传送服务器没有传播任何新区块,并且管理节点知道具有所选择的电池的一些客户端提供了新区块,则管理节点将针对响应性来测试被调度的消息传送服务器。如果它没有进行响应,则管理节点如上所述创建新区块。此外,管理模式取消对被调度的服务器的批准,因为它没有进行响应。
200.当节点想要提供区块链存储服务时,它可以与请求成为被调度的服务器相同的方式来发出请求。管理节点和被调度的消息传送服务器将新区块传播到被批准用于提供区块链存储服务的节点。
201.当存在多个区块链存储时,如果一个被调度的服务器传播不一致的区块(即传播由不同客户端设备创建的区块),当其作为被调度消息传送服务器的角色结束时,将检测到这种不一致。当在管理节点认为被调度的消息传送服务器不可用之后,该被调度的消息传送服务器开始传播时,可能发生另一种不一致。
202.当发生不一致时,下文定义的经更新的reconciliation函数将由所有存储服务和节点用来决定应该保留哪个链。
203.经更新的reconciliation函数
204.给定两个链c和c',经更新的reconciliation(c,c')函数由所有节点用来确定应该保留哪条链。在输入c和c’时,用以下步骤来定义该函数。
205.如果c和c’具有不同的长度,则保留c和c'之间较长的那个。
206.否则,定位c和c’不一致的第一个区块;分别表示为b和b'。如果b和b'中的一个具有来自被调度的消息传送服务器的传播签名,而另一个具有来自管理节点的传播签名,则包含由被调度的服务器传播的区块的链被保留。
207.如果b和b'中只有一个具有第一类型500,那么包含第一类型500的链被保留。
208.如果b和b’二者都具有第二区块类型600,那么在b和b'之前的区块中的drn 514用于函数1000的步骤1006和1008以生成创建b和b'的电池的值。具有由较低值创建的区块的链被保留为可信链。这避免了两条独立链增长的情况,而是基于现有数据来解决不一致的情况。相比之下,比特币协议允许两条链都增长,而然后选择二者中较长的一条链。
209.在b和b'二者都具有第一类型500并且由同一个电池创建但具有不同的数据哈希
值或电池的情况下,那么b或b'中具有较小签名512值的链将被保留为可信链。
210.如果b和b'二者都是第二类型600区块,则过程与它们都是第一类型500区块相同。
211.应该注意的是,经更新的reconciliation(c,c')函数是确定性函数,并且所有节点就结果达成一致。
212.权限
213.除了电池,第二协议可以支持具有权限的客户端设备。实际上,这些设备可以是属于政府机构、班级老师或公司ceo的设备。区块链中的数据记录请求可以指示是否将其记录在由具有权限的客户端创建的区块中。当具有权限的客户端创建区块时,它仅收集指定其为区块创建者的数据。例如,当班级中的学生提交作业时,他们可能希望他们的作业在由班级老师创建的同一区块中。
214.安全性
215.如果恶意客户端有意篡改链中的区块,并且仍想保持链的完整性,则必须从被篡改的区块重新构建链;否则无法验证后续区块中的签名。对于第二区块链协议,后续区块的控制字段516中的传播签名也无法被验证。
216.具有相同首创区块的两条不一致的链不能无限增长,这一事实提供了安全性。区块链安全的基本思想是:当恶意客户端构建不一致的链时,所有诚实客户端都可以使用reconciliation函数来忽略损坏的链。这里的一个假设是:恶意矿工在网络中拥有不到一半的计算能力。也就是说,有更多诚实客户端被选择来创建新区块。诚实客户端将不会对包含被恶意客户端刚刚篡改的区块的较短链做出贡献。下面将针对每个区块链协议更详细地讨论这些想法。
217.第一区块链协议的安全特征
218.如果假设至少有一半的节点和客户端是诚实的,那么链c对恶意活动是鲁棒的。为了说明这一点,假设c中的区块b已被接受。如果恶意矿工创建了b,那么它可以篡改b并对区块b重新签名。由于我们假设所有节点都知道所有最后的区块,因此只有具有相关联的电池的恶意客户端才能增长被篡改的链,被篡改的链在篡改时间中是很短的。来自区块b的原始链随着由具有电池的诚实和恶意客户端创建的区块而增长。由于用于从原始c中的b构建新区块的客户端中至少有一半是诚实的,因此被篡改的链仍然很短,因为对其的唯一贡献来自恶意客户端。
219.此外,如果由next(c)函数选择具有电池的诚实客户端在被篡改的链中创建新区块,那么被篡改的链根本无法增长,因为诚实客户端将不会使短链增长。由于更多诚实的客户端构建了链,因此由next(c)函数选择诚实客户端的机会更大,并且因此被篡改的链的增长最终无法继续。应该注意的是,恶意客户端可以开采第二区块类型600来使被篡改的链增长。然而,pow很慢,并且reconciliation函数优先考虑较长的链和第一区块类型500。
220.当区块链作为私有链部署在几个互不信任的节点(例如,三个互不信任的银行当中的区块链)当中时,区块链可以在没有上述假设的情况下提供更强的安全性。假设每个客户端都与私有链中的节点相关联。在这种部署中,节点可以保证首创区块和由它创建的区块b之间记录的数据的安全性。即使所有其他节点串通篡改首创区块和b之间的区块,并设法在没有该节点的情况下使更长的链增长,该节点也可以使用这两条不一致的链作为对抗其他节点的证据,因为节点的一个客户端必须对不一致的区块进行签名。
221.第一区块链协议的安全特征
222.对于第二区块链协议,新区块由管理节点定期签名以进行传播,其中,其签名包括在控制字段516中。假设管理节点总是传播所有新区块,则它不能参与传播不一致的区块;否则,它将被捕获,因为存在具有相同的先前区块的两个新区块,但具有来自管理节点的不同传播签名。
223.即使管理节点传播不一致的区块,也只有来自由经更新的next(c)函数返回的集合中的恶意客户端才能用于扩展被篡改的链;否则,重新构建的链将像在第一协议中一样卡住,因为诚实客户端将不会针对较短的链对区块进行签名。由于更多的电池来自诚实用户,因此被篡改的链不能像由诚实客户端所构建的链一样增长。
224.经济模式
225.第一区块链协议应该被部署用于企业区块链应用,使得所有矿工/客户端都是专用机器并且始终可用。对于第二区块链协议,管理节点可以对数据记录进行充电,并且然后向创建新区块和/或为新区块建议电池的客户端支付电池。由于这种经济激励,管理节点可以部署在数据中心,提供高效并且可靠的消息传送服务,并且不会传播不一致的区块。应该注意的是,如上文所讨论的,不一致块的传播不会影响区块链的安全性。但是其会影响效率,因为节点需要转链和对账。
226.在区块链协议中,具有相关联电池的客户端设备和消息传送服务器需要承担责任,因为它们的签名包括在创建或传播的新区块中。当next(c)函数选择电池时,可能需要与该电池相关联的客户端的公钥拥有预定数量的可用电池。如果该客户端创建不一致的新区块,作为惩罚,next(c)函数将不再考虑其可用电池。以类似的方式,被调度的消息传送服务器可以被管理节点批准。
227.本领域技术人员将意识到,在不脱离本公开内容的宽泛的一般范围的情况下,可以对上述实施例进行多种变化和/或修改。因此,本文的实施例在所有方面都被认为是说明性的而非限制性的。
228.本领域技术人员将意识到,在不脱离本公开内容的宽泛的一般范围的情况下,可以对上述实施例进行多种变化和/或修改。因此,本文的实施例在所有方面都被认为是说明性的而非限制性的。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献