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

用于在区块链网络中记录工作历史并证明声誉的方法和装置与流程

2022-02-20 15:27:53 来源:中国专利 TAG:


1.本公开涉及区块链网络,并尤其涉及在区块链网络中记录工作历史并证明声誉。


背景技术:

2.挖矿节点(或“矿工”)是区块链网络的关键元素。在“工作量证明”区块链网络中,挖矿节点竞相完成工作量证明,以“赢得”挖掘区块的竞赛,从而收取交易费用和反映在新区块内的创币(coinbase)交易中的任何新创造的通证(token)。通过这种方式,矿工保护网络,从而确保交易有效并且所有参与节点都符合流行的区块链协议。然而,由于大多数区块链作为无许可协议运行,因此任何节点都可以加入或离开网络,并且任何节点都能够作为挖矿节点参与其中,而无需获得任何其他节点的事先批准。随着区块链的使用和交易量的增长,正确地注册和验证挖矿节点(或挖矿节点池)的身份也可能变得日益重要。
3.例如,当涉及到改变区块链协议时,任意或“自上而下”的码改变会破坏对系统稳定性和确定性的信心,并可能使区块链网络遭受攻击或可能的欺诈或盗窃。作为基于共识的系统,对区块链网络的底层码的任何改变都需要由组成系统的实体达成一致。在实践中,这意味着挖矿节点必须同意改变,因为它们是验证交易、组装候选区块和执行挖掘新区块的昂贵工作的实体。能够追踪和验证挖矿节点(或挖矿池)的身份可能是有利的。
4.一种用于在计算机网络中注册和验证身份的机制是通过使用公钥加密基础设施。密钥对中的公钥可以表示节点标识符。在这样的系统中,节点获得公钥私钥对,然后向第三方证书授权机构请求注册其公钥。证书授权机构对节点进行某种级别的在线或离线鉴别,并为公钥颁发数字证书,验证公钥是否与节点相关联。数字证书可以由证书授权机构签发。希望验证节点身份的不同节点依赖于其对证书授权机构的信任来支撑对由数字证书表示的节点身份的认证。
5.区块链系统通常是无需许可的,这意味着任何节点都可以加入或离开网络,并且其他节点无法控制某节点是否加入网络。这种灵活性对于确保有效地分配资源并允许根据需要和经济合理地添加计算资源而言是重要的。但是,在某些情况和某些场景下,为了信任、可靠性和稳定性的目的,能够验证节点(例如,挖矿节点)是区块链网络中的“声誉良好的”节点将是有利的。
附图说明
6.现在将通过示例的方式参考示出本技术的示例实施例的附图,其中:
7.图1以流程图的形式示出了在区块链上注册矿工身份的一种简化示例方法;
8.图2以流程图的形式示出了设置用于注册矿工身份的快速撤销选项的示例方法;
9.图3以流程图的形式示出了在区块链上记录矿工身份的一种示例方法;
10.图5示出了在区块链上记录工作历史的一种示例方法;
11.图6示出了使用区块链验证工作历史的示例方法;
12.图7示出了基于记录的工作历史确定挖矿节点的声誉分数的示例方法;和
13.图8以框图的形式示出了计算节点(例如,挖矿节点)的简化示例。
14.在附图中使用相同的附图标记来表示相同的元素和特征。
15.具体实现方式
16.在一个方面中,可以提供一种在区块链网络中的区块链上记录挖矿节点的工作历史的计算机实现的方法。该方法可以包括由挖矿节点挖掘包含注册创始交易(generation transaction)的第一区块,该注册创始交易在注册信息字段内包括挖矿节点的矿工标识符;以及由挖矿节点按顺序挖掘两个或更多个附加区块,每个附加区块包含创始交易,该创始交易包括信息字段,该信息字段包含矿工标识符和对顺序中在前的附加区块的创始交易的引用(reference),其中,该注册创始交易是顺序中的第一区块。
17.在一些实现方式中,矿工标识符可以是公钥,挖矿节点持有针对该公钥的私钥。
18.在一些实现方式中,每个附加区块中的创始交易可以包括指向注册创始交易的注册引用和数字签名。
19.在一些实现方式中,对顺序中在前的附加区块的创始交易的引用可以包括交易标识符、区块编号或出点(outpoint)之一。
20.在一些实现方式中,该方法还可以包括:由计算节点验证记录在区块链上的工作历史。在某些情况下,验证可以包括:标识顺序中的最后的区块;基于每个创始交易中包含的对在前的附加区块的创始交易的引用,从区块链中以相反的顺序检索来自附加区块的创始交易;检索注册创始交易;以及验证矿工标识符在注册创始交易中的注册。注册创始交易和创始交易提供挖矿节点的工作历史。
21.在一些实现方式中,该方法还可以包括:基于挖矿节点的记录的工作历史来确定挖矿节点的声誉分数。在某些情况下,确定包括:基于顺序中的区块数量的计数来计算声誉分数。在某些情况下,确定包括:基于将相应的权重分配给顺序中的每个区块并计算相应的权重的总和来计算声誉分数。在一些这样的示例中,将相应的权重分配给每个区块包括:对于每个区块,基于在挖掘该区块时应用的难度阈值来确定该区块的难度分数,并且基于难度分数设置相应的权重。在一些示例中,声誉分数可以计算为:
[0022][0023]
在上面的表达式中,rep
id
为声誉分数,i为引用第i个区块的索引,b为顺序中的区块的数量,以及ti为挖矿区块i时应用的目标难度。
[0024]
在一些实现方式中,该方法还可以包括:通过由挖矿节点挖掘投票区块在基于安全区块链的投票系统中记录加权投票,其中,该投票区块包含创始交易,该创始交易包含该投票区块的矿工标识符、对该投票区块的最近的创始交易的引用和投票信号。在某些情况下,投票区块创始交易还包括对于该挖矿节点而计算出的声誉分数。
[0025]
在另一方面中,本技术可以描述一种在区块链网络中的区块链上验证挖矿节点的工作历史的计算机实现的方法。该方法可以包括:标识由挖矿节点挖掘到的并具有创始交易的区块,该创始交易在信息字段中包括矿工标识符和对早期创始交易的引用;从区块链中以相反的顺序检索多个早期创始交易,直到包括关于矿工标识符的注册的最后的创始交易为止,每个早期创始交易包含矿工标识符和对处于相反的顺序的早期创始交易中相应的
在前的一个创始交易的引用;以及验证最后的创始交易中矿工标识符的注册。创始交易和多个早期创始交易提供挖矿节点的工作历史。
[0026]
在又一方面中,本技术可以提供一种在基于区块链的区块链网络中确定挖矿节点的声誉分数的计算机实现的方法。该方法可以包括:追踪链接的创始交易链,其中,创始交易各自在信息字段中包括挖矿节点的矿工标识符,并且除了第一创始交易之外的每个创始交易在信息字段中包括对所述链中链接的创始交易中的早期创始交易的引用,其中,每个创始交易在由挖矿节点挖掘到的相应的区块中;对于每个创始交易,确定其相应的区块的难度分数;以及基于与链中的创始交易相关联的相应的区块的难度分数确定挖矿节点的声誉分数。
[0027]
在另一方面,可以提供一种实现网络中的节点的计算装置。该计算装置可以包括存储器、一个或多个处理器和计算机可执行指令,该计算机可执行指令在被执行时,使处理器执行本文中描述的方法中的一种或多种。
[0028]
在又一方面,可以提供一种计算机可读介质,其存储用于操作网络中的节点的处理器可执行指令,该处理器可执行指令包括在由一个或多个处理器执行时,使处理器执行本文描述的至少一种方法的指令。
[0029]
通过结合附图审阅以下详细描述,本公开的其他示例实施例对于本领域普通技术人员而言将是显而易见的。
[0030]
在本技术中,术语“和/或”旨在涵盖列出的元素的所有可能组合和子组合,包括单独列出的元素中的任何一个、任何子组合或所有元素,并且不必排除附加元素。
[0031]
在本技术中,短语
“…


中的至少一个”旨在涵盖列出的元素中的任何一个或多个,包括单独列出的元素中的任何一个、任何子组合或所有元素,而不必排除任何附加元素,也不必需要所有元素。
[0032]
本技术将涉及哈希处理或哈希函数,其旨在包括多个加密哈希函数中的任何一个,这些加密哈希函数在应用于任意的数据或“消息”集合时,确定性地产生唯一的固定长度的字母数字字符串。哈希函数的结果可以称为哈希值、指纹、哈希结果或等价物。示例包括但不限于sha-2、sha-3和blake2。
[0033]
在本文档中,术语“区块链”被理解为包括所有形式的电子的基于计算机的分布式账本(ledger)。这些包括基于共识的区块链和交易链技术、许可的和未被许可的账本、共享账本及其变型。尽管已经提出并开发了其他区块链实现方式,但是区块链技术最广为人知的应用是比特币账本。尽管为了方便和说明的目的在本文中可能提及比特币,如通过比特币sv协议进行示例说明,但是应当注意,本发明不限于与比特币区块链一起使用,并且替代的区块链实现和协议落入本发明的范围内。
[0034]
区块链是一种点对点的电子式账本,其使用基于计算机的去中心化的分布式系统实现。该区块链由区块组成,而区块又由交易组成。每个交易是一种数据结构,该数据结构除了其他可能的信息之外,还对区块链系统中的参与者之间的数字资产的控制权的转移进行编码,并包括至少一个输入和至少一个输出。每个区块头都包含例如为默克尔根的形式的区块内容的摘要,并且每个区块头都包含前一个区块头的哈希,以使得区块被链接在一起来创建所有交易的永久、不可改变的记录,这些交易自其开始就已经被写入区块链。交易包含嵌入到其输入和输出中的被称为脚本的小程序,这些小程序指定如何以及由谁可以访
问交易的输出。在比特币平台上,这些脚本是使用基于堆栈的脚本语言编写的。
[0035]
区块链是在节点的网络上实现的。每个节点都是具有网络连接性和执行软件的计算装置,该软件执行适用的区块链协议。节点验证交易并将它们传播到网络中的其他节点。专门的网络节点(称为“挖矿节点”或“矿工”)将未确认的交易(即,待定交易)的集合收集到区块中并尝试“挖掘”该区块。在这些示例中,挖掘是指在网络中的任何其他矿工成功解答针对其相应的区块的工作量证明(pow)之前解答工作量证明。在比特币示例中,pow涉及对包含只使用一次的随机数(nonce)的区块头进行哈希处理,直到结果小于通过难度参数而设置的阈值为止。将只使用一次的随机数反复地递增并重复哈希处理,直到结果小于阈值为止或直到矿工接收到另一个矿工已经成功的通知为止。挖掘过程的变化对于本领域普通技术人员来说是熟悉的。
[0036]
在验证交易时检查的各种事物之中,节点确定交易的输入是否有效。特别是,节点评估解锁脚本是否评估为真,并确定输入是否引用来自早期交易的“未花费的交易输出”(utxo)。一些节点可能维护运行列表或utxo集,以便能够快速确定引用的交易输出是否在utxo集中。交易可以通过其唯一交易标识符txid来标识,在一些实现方式中,该唯一交易标识符txid是交易的哈希。一些交易可能具有多于一个的输出,因此可以通过txid和索引来标识独特的交易“出点”,其中,索引指向来自交易的有序的输出集中的输出中的一个。如果交易输出(例如,出点)存在于utxo集中,则该交易的输出是“未花费的”并且可用于用作输入。
[0037]
交易出点的解锁脚本限定如何证明对该输出的“控制”以便被运用。在许多情况下,与交易输出相关联的地址是公钥的哈希。为了证明对该输出的控制,解锁脚本通常需要公钥和使用对应的私钥而生成的数字签名。通过这种方式,控制私钥的节点能够控制在任何后续输入中何时以及如何使用交易输出。如下文将进一步讨论的,这具有以下推论:当对应于特定公钥的交易输入包括数字签名时,则与该特定公钥相关联的实体有效地签署或认证交易内容。
[0038]
公钥密码术在在线通信中已经变得无处不在。在许多情况下,需要过程和策略(policy)来提供公钥被与特定实体相关联的实体所拥有的确定性。确保公钥真实且未被泄露的最常见的方法是公钥基础设施(pki)。pki依赖受信任的第三方来“鉴别”公钥是否有效。这些实体是“证书授权机构”(ca)。ca提供确认公钥与特定所有方之间的绑定的数字证书的注册和颁发。公钥的持有方向另一个实体提供其公钥和其数字证书。然后,另一个实体可以通过确认受信任的ca已对证书进行数字签发来验证公钥的真实性。
[0039]
如上所述,挖矿节点是保护区块链网络的关键。当挖矿节点赢得寻找有效新区块的竞赛时,他们的工作就会得到补偿。补偿交出来自个人交易和包括在新区块中的“创币”交易的交易费用。创币交易没有输入,并且它向矿工输出规定数量的通证(例如,货币),从而有效地创建新的通证。创币交易也可以称为“创始交易”,因此这些术语在本文中可以互换使用。创币交易或创始交易具有某些区别于常规交易的特征。例如,每个有效区块只包含一个创始交易。每个创始交易都没有输入,并根据管理区块链协议由于成功的矿工而生成由当时流行的区块奖励设置的数量的通证输出。创始交易是“工作量证明交易”,因为它只能由成功地挖掘到区块(即,完成工作量证明)的挖矿节点创建。
[0040]
在许多区块链系统中,单个实体可以拥有、控制或指挥大量充当挖矿节点的单独
的计算机。在某些情况下,多个挖矿节点的资源可以一起集中在挖矿池中,该挖矿池利用大量的单独的处理器的计算能力。在下面的许多示例中,可能引用“矿工”、“挖矿节点”或由矿工/挖矿节点持有或控制的公钥私钥对。从上下文可以理解,这些引用可以包括实现挖矿节点的单独的计算机和/或实现由挖矿实体拥有或控制的挖矿池的计算机/处理器的集合或池。
[0041]
鉴于挖矿节点的重要性,能够验证挖矿节点和/或挖矿节点声称的公钥的真实性和身份将是有利的。能够在不依赖对第三方证书授权机构的信任的情况下进行该验证将是特别有利的。
[0042]
建立可验证的矿工身份
[0043]
根据本技术的一个方面,矿工可以通过挖掘在创币交易内包括矿工身份的声明的区块来建立矿工身份。新挖掘到的区块的有效性以及其中所有交易的有效性都由区块链网络确认。挖矿节点在创币交易中包括其矿工身份是由工作量证明支持的身份声明。以下示例中的矿工身份是公钥。不需要第三方ca来验证挖矿节点与其声明的公钥之间的关联,因为该关联由区块链网络和工作量证明支持。
[0044]
为了便于矿工身份的可能撤销,例如,如果对应的私钥被泄露,则矿工可以首先创建有效性检查交易,在该交易中声明矿工身份并且存在针对该交易的由矿工控制的输出。创币交易可以包括对该有效性检查交易的引用。另一个节点进行的身份验证操作的一部分可以用于通过转移由矿工控制的输出来确认有效性检查交易还没有被“撤销”。也就是说,矿工可以通过“花费”有效性检查交易的输出来使自己的矿工身份无效,从而将有效性检查交易从未花费的交易(uxto)集中移除。这提供了快速撤销机制,该机制不依赖于挖掘新区块来撤销矿工身份。
[0045]
现在将参考图1,其以流程图的形式示出了在区块链网络中建立矿工身份的一种示例方法100。该方法100包括设置操作102和注册操作104。设置操作102包括创建和传播有效性检查交易(vct)。vct包括任意输入和两个输出。一个输出是矿工控制的输出,其将任意通证分配给矿工控制的地址。vct的第二输出包括信息字段,该信息字段包含矿工身份,在该示例中,矿工身份是矿工选择的公钥pk
id
。矿工持有对应的私钥sk
id
。在基于比特币的实现方式中,信息字段可以是op_return字段。在该示例中,矿工身份(例如,矿工id)是公钥pk
id

[0046]
vct在区块链网络上传播,在区块链网络上它最终通过包括在挖掘到的区块中被确认,使得于是vct在链上。
[0047]
注册操作104涉及挖矿节点成功地挖掘新区块。挖掘区块涉及组装候选区块,该候选区块包含从未确认的交易的内存池中选择的多个交易。挖矿节点还将创币交易插入其候选区块中。然后它尝试通过使区块头(header)中的只使用一次的随机数重复地递增并对区块头进行哈希来尝试挖掘区块,以试图找到小于难度设置的哈希值。如果另一个挖矿节点成功了,则矿工验证另一个挖矿节点的新区块是否有效,然后创建新的候选区块并再次尝试。
[0048]
在操作104中,挖矿节点成功挖掘到新区块,并且新区块包含创币交易,该创币交易本身包含矿工身份(例如,pk
id
)并且包含对vct的引用。例如,引用可以是vct的交易标识符txid
vct

[0049]
一旦挖矿节点已经成功挖掘到包含声明矿工身份的创币交易的区块,则它已成功建立其矿工身份。身份是可验证的,并且可以在必要时以可证明和可追踪的方式由挖矿节点撤销或更新。此外,身份及其与挖矿节点的关联由工作量证明支持并由网络保护,从而允许第三方依赖矿工身份(例如,其公钥pk
id
)而无需对证书授权机构的信任。矿工身份然后可用于多种目的,包括追踪矿工活动、证明矿工真实性或状态、建立或参与和矿工的安全加密通信、以及出于各种目的对矿工进行排名等。
[0050]
现在还将参考图2,其示出了可以在建立矿工身份的方法100中使用的一个示例设置方法200。该方法在本示例中由挖矿节点执行。
[0051]
在操作202和204中,挖矿节点选择私钥sk
id
并找到对应的公钥pk
id
。公钥pk
id
是矿工标识符。
[0052]
然后,在操作206中,挖矿节点创建具有任意输入和两个输出的有效性检查交易。输入可以是任何utxo,挖矿节点持有针对其的对应的私钥。即,由矿工控制的任何utxo。在许多实现方式中,输入可以是足以抵消与vct相关联的任何交易成本的货币或通证数量,以确保vct被包括在区块中。在一些实现方式中,可以通过策略建立最小通证数量。
[0053]
输出之一是到由挖矿节点控制的任何地址的输出。也就是说,输出是到挖矿节点持有针对其的对应的私钥的地址,以使挖矿节点能够解锁相关联的锁定脚本。在一些示例中,输出地址可以标记为pk
vct
,它是挖矿节点选择的任何公钥,并持有针对其的对应的私钥。例如,输出可以是p2pkh(付款到公钥哈希)操作,其指定转移到由挖矿节点选择和控制的公钥哈希(例如,比特币地址)。
[0054]
另一个输出包括其中可插入信息的非操作信息字段。特别地,该字段包含矿工标识符pk
id
。在基于比特币的实现方式中,输出可以使用op_return操作码来提供信息字段。
[0055]
可能存在区块链协议,在其中非操作信息字段可以被包括在交易中,为了在交易内发布信息的目的,该信息不一定被实现为交易的“输出”,正如该术语可以理解的那样。然而,应当理解,这些示例中的术语“输出”指的是旨在包括替代区块链协议上的此类可能实现方式的信息字段。
[0056]
一旦在操作206中已经创建了vct,则在操作208中,挖矿节点就在区块链网络上传播vct。本领域普通技术人员将理解,vct的传播可能涉及网络的每个节点验证交易,然后将其发送到节点所连接的所有其他节点,使得交易快速地传播通过完整的区块链网络。作为未确认的交易,它将被插入到内存池中,各个挖矿节点将从该内存池中选择交易以包括在候选区块中。因此,它最终将通过包括在挖掘到的区块中的方式被“确认”。在操作210中,挖矿节点评估vct是否已通过被包括在挖掘到的区块中而被确认。一旦已被确认,则在操作212中,挖矿节点记录交易标识符txid
vct
。应当理解,在一些实现方式中,挖矿节点可以在vct被挖掘之前记录交易标识符。
[0057]
对于区块链的vct部分,其到pk
vct
的第一输出形成“未花费的”输出的uxto集的一部分,直到挖矿节点选择移动/转移与该输出相关联的通证为止。该uxto用作有效性检查机制。只要它仍然是uxto集的一部分,则vct中的矿工标识符就保持有效且未被撤销。一旦它不再在uxto集中,vct中的矿工标识符就不再有效。
[0058]
现在还将参考图3,其示出了可以在建立矿工身份的方法100中使用的一种示例注册方法300。该方法在本示例中由挖矿节点执行。方法300假设创建与矿工标识符pk
id
相关联
的有效性检查交易的设置操作已经发生。
[0059]
在操作302中,挖矿节点创建候选区块。候选区块包含从未确认的交易的内存池中选择的多个交易。挖矿节点然后在候选区块中插入创币交易,如操作304所反映的那样。除了为挖矿节点创造规定数量的新通证或货币之外,创币交易还包括信息字段,该信息字段包含矿工标识符pk
id
和对vct的引用。引用可以是交易标识符txid
vct
。例如,可以使用op_return码或等价物来提供信息字段。
[0060]
除了矿工标识符和对vct的引用之外,信息字段还可能包含附加信息。例如,它可能包含指示正在通过创币交易实现什么动作的动作标识符或码。在该示例中,动作可以是“注册”,以表示挖矿节点正在公开注册其矿工标识符。它还可以或替代地包括签名。作为示例,签名可以是信息字段的其余部分的签名,例如,签名:sig(sk
id
,动作||矿工id||vct),其中,vct是txid
vct
,矿工id是pk
id

[0061]
一旦已经生成了具有该创币交易的候选区块,挖矿节点就会尝试挖掘该区块,如操作306所示。它还评估竞争矿工是否已成功地挖掘到另一个区块,如操作308所示。如果竞争矿工赢得挖掘区块的竞赛,则挖矿节点验证另一个区块,将其添加到区块链,并返回操作302以构建新的候选区块并再次尝试。
[0062]
如果挖矿节点成功挖掘到候选区块,则它会记录创币交易的交易标识符txid
reg
。请注意,它可以替代地记下区块编号,因为它将只包含其他节点可能能够基于区块编号标识的一个创币交易。
[0063]
利用注册创币交易成功地挖掘到区块后,挖矿节点已成功地注册其矿工身份,并已将其发布到区块链上。接收到矿工标识符(例如,公钥pk
id
)的另一个节点可以验证公钥是否有效以及是否与挖矿节点相关联,而不依赖于对独立的证书授权机构的信任。
[0064]
图4以流程图的形式示出了节点可以执行以根据本技术的一方面验证矿工标识符的一个示例方法400。节点是区块链网络内部或外部的任何节点,用于验证矿工标识符pk
id
。例如,验证可以作为验证或批准来自矿工的请求、建立与矿工的通信会话或以其他方式证明公钥pk
id
的有效性及其与挖矿节点的关联的一部分而发生。
[0065]
在操作402中,节点接收或检索矿工id(pk
id
)和注册交易标识符(txid
reg
,或在某些情况下,是其中出现注册创币交易的区块编号)。操作402还可包括检索或接收挖矿节点声称已签署的消息。消息m和签名σm可以由挖矿节点提供。在某些情况下,消息及其签名可能是挖矿节点作为其身份的证明而提供或发布的数字证书的一部分。
[0066]
在操作404中,节点基于注册交易标识符txid
reg
从区块链检索注册创币交易。然后在操作406中,它验证或确认注册创币交易中的某些数据。例如,节点可以解析op_return字段以从创币交易中提取该字段中的信息。从经解析的信息中,它获得vct交易标识符txid
vct
。它可以确认op_return字段包括由挖矿节点提供的相同公钥pk
id
,并且“动作”为“注册”。
[0067]
根据在注册创币交易中发布的vct交易标识符,在操作408中,节点可以检索vct。节点可以确认vct中的op_return字段具有相同公钥pk
id
,如操作410所示。然后它可以评估vct的另一个输出是否保持为“未花费的”,即它是否仍为可用输出点的uxto集的一部分。这可能涉及直接或通过中间节点查询uxto集数据库。查询可以基于出点标识符,该标识符可以包括交易标识符txid
vct
和指示哪个输出的索引。如果输出未出现在uxto集中,则矿工标
识符无效,因为它已被撤销或替换。因此,验证失败。
[0068]
然而,如果出点在uxto集中,则节点可以将pk
id
视为挖矿节点的已验证的公钥,然后在操作414中,它可以使用pk
id
验证挖矿节点的签名以确认挖矿节点签名。注意,该操作414可以包括节点确认创币交易op_return字段(如果有的话)内的签名,或者节点确认消息m上的签名σm,或者节点确认这两者。显然,如果签名检查失败,那么声称的挖矿节点就不能被验证为对应的私钥的持有方,因此验证失败。如果签名检查成功,则挖矿节点被验证为与挖矿标识符(即,经验证的注册的公钥pk
id
)相关联的挖矿节点。
[0069]
如上所述,可以通过从uxto集中移除vct的第一输出来撤销注册的矿工id。这是通过“花费”该输出,将其用作任何其他交易的输入来完成的。这可能包括将分配给该第一输出的任何通证转移到撤销交易中的新地址。撤销交易的创建和传播足以导致对矿工id的任何验证失败,因为验证节点将无法在uxto集中定位输出。然而,矿工还可以通过在其下一个挖掘到的区块的创币交易中包括op_return字段来注册撤销。在一个示例中,op_return可以包括动作“撤销”和矿工id。在一些实现方式中,它还可以包括注册交易和撤销交易二者的交易标识符和签名。
[0070]
在许多情况下,挖矿节点可能希望“更新”或替换其矿工id,而不是因为其私钥被泄露而简单地撤销矿工id。这可能是由于私钥的公开或盗取,或者可能作为风险管理的一部分定期进行,以确保定期更新密钥材料。
[0071]
为了更新旧的矿工id pk
id-old
,挖矿节点首先为新的公钥pk
id-new
创建新的vct。从该过程中,它获得新的vct交易标识符txid
vct-new
。挖矿节点然后利用新的创币交易挖掘新区块来注册新的矿工id;然而,为了将新的矿工id链接到旧的id和旧的id的任何工作历史,矿工可以使用动作“更新”或“更新id”来通过发送信号表明创币交易不仅仅是第一次注册矿工id,而是替换之前的矿工id。更新后的创币交易中的op_return字段的内容可能包括:
[0072]
1.动作:更新id
[0073]
2.旧的矿工id:pk
id-old
[0074]
3.新的矿工id:pk
id-new
[0075]
4.旧的矿工id签名:sig(sk
id-old
,pk
id-old
||pk
id-new
)
[0076]
5.旧的vct签名:sig(sk
vct
,pk
id-old
||pk
id-new
)
[0077]
6.新的vct:txid
vct-new
[0078]
7.新的签名:sig(sk
id-new
,动作||新的矿工id||新的vct)
[0079]
在该示例中,应当理解,更新操作涉及挖矿节点提供多达三个签名:一个与旧的矿工id相关,一个与旧的vct相关,一个与新的矿工id相关。在某些情况下,可能不包括旧的vct签名。
[0080]
还应当理解,挖矿节点可以通过将来自旧的vct的输出用作一些其他交易的输入来使早期的矿工id无效。在一个示例中,输出可以是新的vct的输入。在另一个示例中,挖矿节点可能会等待,直到它成功地挖掘到区块来注册更新的矿工id为止,然后再传播单独的撤销交易以使其旧的矿工id无效。
[0081]
使用上述系统,矿工能够在区块链上建立和注册其可证明的标识符。通过将标识符包含在挖掘到的区块的创币交易中,矿工证明它是真正的挖矿节点,并且标识符和关联的材料的有效性得到工作量证明的支持。如果需要,vct提供了快速撤销机制。在一些示例
实现方式中,vct可以通过策略要求将至少预定的通证或货币价值分配给输出,从而利用权益证明补充工作量证明。有利地,上述系统避免了对证书授权机构的信任的需要,并且不涉及挖矿节点的附加工作并且涉及区块中非常少的附加数据。
[0082]
上述注册系统和方法使矿工能够证明身份并向挖矿节点提供另一节点可以在不依赖证书授权机构的情况下验证的数字证书。此外,如下所述,矿工标识符可用于将来自该矿工挖掘到的区块的创币交易可证明地链接在一起。这为矿工提供了与其矿工id相关联的可验证的工作历史。该工作历史可用于建立许多事情,包括矿工状态、访问某些资源的权利、出于某种目的对矿工的层次结构进行排名等。在以下描述中,该工作历史可称为“声誉证明”系统。
[0083]
声誉证明
[0084]
在一个方面中,本技术提供了用于在区块链上记录矿工工作历史以及用于验证矿工工作历史的方法和系统。如将要描述的,在下面的示例中,工作历史是通过由挖矿节点挖掘到的区块中链接的创币交易链来记录的。在一些实现方式中,工作历史可用于确定挖矿节点的声誉分数。可以在许多应用(包括作为示例的矿工投票操作)中使用声誉分数。
[0085]
在以下描述的一些实现方式中,创币文档各自在信息字段中包括矿工标识符。在一些实现方式中,可以使用上述方法和系统来建立和验证矿工标识符。然而,在一些实现方式中,可以使用其他技术或系统来建立矿工标识符并用于验证目的。因此,应当理解,下面描述的工作历史和声誉证明示例不一定需要在所有实现方式中使用上面描述的矿工标识符注册过程。
[0086]
如上所述,用于注册矿工标识符的一种机制是将矿工标识符放入由相关联的挖矿节点挖掘到的区块的创币交易中。矿工标识符可能出现在创币交易中的信息字段(例如,op_return字段)中。信息字段还可以包括签名或其他数据。如上所述,在一些实现方式中,信息字段可以包括对有效性检查交易的引用,这使得能够快速撤销矿工标识符并且使得其他方能够容易地验证矿工标识符尚未被撤销。
[0087]
创币交易还可结合注册的矿工标识符来利用以记录挖矿节点的工作历史。图5以流程图的形式示出了用于在区块链上记录矿工工作历史的一种示例方法500。方法500由与矿工标识符相关联的挖矿节点执行。矿工标识符可以是公钥,挖矿节点持有针对该公钥的对应的私钥,即,矿工标识符可以是pk
id

[0088]
方法500包括在操作502中注册矿工标识符。如上所述,注册操作包括在由挖矿节点挖掘到的区块内的注册创币交易中发布矿工标识符。
[0089]
在操作504中,挖矿节点继续尝试挖掘新区块。特别地,挖矿节点构建新的候选区块并插入创币交易,该创币交易包括信息字段,该信息字段包含矿工标识符。创币交易信息字段还包含对由同一矿工挖掘到的区块中先前的创币交易的引用。该先前的创币交易是最近挖掘到的区块,在该最近挖掘到的区块中创币交易包含矿工标识符。在挖掘到的第二区块的情况下,引用是针对注册创币交易。随后来自该挖矿节点的挖掘到的区块将包含创币交易,这些创币交易通过对区块被挖掘的顺序中最近挖掘到的区块的创币交易的引用而链接。例如,该引用可以是创币交易的交易标识符(例如,txid)。在某些情况下,基于节点可以标识该区块内的创币交易,引用可以是包含该创币交易的区块编号。在某些情况下,引用可以是“出点”,其包括txid和指向创币交易的输出中的一个(特别是op_return输出)的索引。
[0090]
在一些实现方式中,信息字段包含附加信息。例如,除了对来自挖矿节点的最近挖掘到的区块的创币交易的引用之外,信息字段还可以包含对由挖矿节点挖掘到的每个后续区块中的注册创币交易的引用。作为另一个示例,信息字段可以包括基于矿工标识符(即,使用与矿工标识符相关联的私钥)产生的数字签名。例如,数字签名可以是包括在信息字段中的(一个或多个)引用。
[0091]
一旦在操作504中已经创建了具有创币交易的候选区块,则在操作506中挖矿节点就尝试挖掘该区块。在操作508中,它还监测来自另一个挖矿节点的新区块的通知的接收。如果另一个节点成功找到新区块,则在操作510中,挖矿节点根据适用的区块链协议验证该新区块有效,然后将该新区块添加到区块链。如果挖矿节点在接收到来自另一个节点的新区块的通知之前成功挖掘到候选区块,则它在区块链网络上快速传播候选区块的成功挖掘,并在操作512中将该新区块添加到区块链。不管区块链上的新区块是来自挖矿节点还是另一节点,一旦发现新区块,挖矿节点就返回操作504以构建新的候选区块并再次尝试。
[0092]
将理解的是,假设挖矿节点偶尔成功地挖掘到新区块,则上述循环导致链接的创币交易链将挖矿节点挖掘到的区块从最近的区块链接回原始注册创币交易。由于op_return数据在区块链上可见,因此链接的创币交易集很容易被标识为挖矿节点的工作历史的已发布记录,每个创币交易都包含矿工标识符。
[0093]
现在参考图6,其示出了验证来自区块链的矿工工作历史的一种示例方法600。该方法600可以由任何计算节点执行,无论该计算节点是否是节点的区块链网络的一部分。
[0094]
计算节点在操作602中标识创币交易。该标识可以以多种可能的方式发生。例如,挖矿节点可以向计算节点提供其声称的身份和创币交易的交易标识符。交易标识符可以指向最近挖掘到的由挖矿节点产生的创币交易。在某些情况下,挖矿节点可以结合加入、投票、参与、通信或其他方式的请求向计算节点提供该信息,作为断言挖矿节点具有特定身份和相关联的声誉或工作历史的一部分。该断言可以由挖矿节点以某种方式发布,并且计算节点可以从发布中访问和检索信息。无论背景或机制如何,计算节点都会获取将特定创币交易标识为特定挖矿节点的声称的工作历史的一部分的信息。
[0095]
在操作604中,计算节点评估创币交易是否在信息字段中包含矿工标识符。在许多情况下,计算节点将获得挖矿节点的声称的标识符,并且操作604可能涉及确认相同的标识符是否出现在创币交易中。如果不是,则方法600失败,因为创币交易不验证声称的矿工身份的任何工作历史。
[0096]
在操作606中,计算节点还确定创币交易信息字段是否包含对早期创币交易的引用。例如,引用可以是txid号。在某些情况下,引用可能是标识将在其中找到创币交易的区块的区块编号或高度,或者可能是早期创币交易的出点。如果引用存在,并且是针对早期(较低的区块高度)挖掘到的创币交易,则在操作608中,计算节点从区块链检索该创币交易的副本并返回到操作604以确认它也包含矿工标识符并指向早期创币交易。以这种方式,计算装置使用创币交易信息字段中的引用通过链接的创币交易集进行追溯,该引用按照交易被挖掘的顺序链接回前一交易。
[0097]
如果在操作606中,创币交易中的一个不包含对早期创币交易的引用,则计算节点评估它是否是注册创币交易,即链中的第一个。根据信息字段,这是可验证的,该信息字段可能包含创币交易是注册创币交易的指示,例如它可能包含“动作:注册”或等效的码或指
示符。在某些情况下,替代地或附加地,可以基于链中的所有其他创币交易将其标识为注册创币交易来验证创币交易。如果该创币交易不是注册创币交易,则链被破坏并且方法600无法验证工作历史。如果是,则工作历史已经被标识,并且计算节点可以继续在操作612中验证矿工标识符。如上所述,在一些实施例中,这可以包括利用有效性检查交易和相关联的验证过程。
[0098]
作为一个示例,上述过程允许第三方计算节点验证特定挖矿节点具有特定工作历史。也就是说,计算节点可以很容易地追踪挖矿节点的工作历史,这为挖矿节点提供了可验证的声誉证明。与工作历史很少或没有工作历史的挖矿节点相比,具有产生有效区块的长历史的挖矿节点可能被认为更可靠、更重要、更值得信赖、更忠诚或更值得投资。基于此,“工作量证明”不仅用于确定哪个区块有效以及哪个矿工因其对计算能力的投资而接收到当前的奖励,而且还用于支持为投资计算能力而构建矿工声誉并且用于承诺构建特定的区块链。
[0099]
挖掘过程涉及搜索小于目标难度阈值的区块头哈希。该搜索涉及对区块头中的只使用一次的随机数值进行递增,对区块头进行哈希处理,评估一定数量的哈希结果是否低于难度阈值,如果不是,则将只使用一次的随机数值递增并再次尝试。难度阈值由协议设置,并基于区块链协议定期调整,以便大约每10分钟产生一个区块。进行调整是为了使得区块链网络考虑网络中整体哈希能力的改变。随着哈希能力增加,难度会改变,以确保不会太快且太容易地产生区块。例如,在比特币核心协议中,每2016个区块(大约14天)调整一次难度。例如,在比特币现金或比特币sv协议中,每144个区块调整一次难度。
[0100]
区块头包括字段,即nbits字段,该字段指定用于该区块的当前难度阈值。难度阈值以基本的256科学记数法表示。因此,如果a=a1a2a3a4是4个字节,则目标t被限定为:
[0101][0102]
a1的值必须在0≤a1≤34范围内,以确保目标始终保持小于2
256
,因此可以表示为32字节的字符串。鉴于sha256函数的行为就像随机预言机(即,sha256的输出是随机的256位字符串,其中每个位同样可能是1或0,与其它位无关),对于试验nnonce值区块头哈希低于目标的可能性为:
[0103][0104]
在本技术的另一方面中,可以基于挖矿节点的验证后的工作历史来确定挖矿节点的声誉分数。如上所述,工作历史可以由链接的创币文档链表示,这些文档证明挖矿节点、其矿工标识符和由该挖矿节点挖掘到的区块集之间的关联。
[0105]
在一个示例实现方式中,挖矿节点的声誉分数是基于挖掘到的区块的计数(即,链接的创币文档的计数)来确定的。该示例在区块链历史中的任何点处为任何区块提供相等的权重,前提是区块经由链接的创币交易形成挖掘到的区块的链的一部分。
[0106]
在另一个示例实现方式中,声誉分数可以基于挖掘到的区块的加权计数。也就是说,每个区块都可能具有与其相关联的权重。在一个示例实现方式中,权重可以基于区块高度。例如,一种实现方式可能为较旧的区块赋予更大的权重。在另一种情况下,一种实现方式可能为更近的区块赋予更大的权重。
[0107]
在另一种实现方式中,分配给区块的权重可以基于区块难度。也就是说,具有较低
难度阈值的区块(即平均而言需要更大的哈希能力来挖掘的区块)可以在确定声誉分数时给予更大的权重。在这种实现方式的一个示例中,声誉分数可以被确定为包含链接的创币文档链中的各创币文档中的一个的每个区块的目标难度的函数。
[0108]
作为示例,如果矿工声誉分数为rep
id
,区块i的目标难度为ti,并且工作历史中的区块的数量为b,则矿工声誉分数可以计算为:
[0109][0110]
在一些示例中,声誉分数可以基于整个工作历史或者可以基于高达最近的区块的最大数量的窗口,即,“滚动”声誉分数。在某些情况下,窗口可能基于区块链高度,例如,来自工作历史的任何区块落在当前的区块链高度的x个区块内。
[0111]
在一些示例实现方式中,当前的声誉分数可以由挖矿节点计算并且被包括在每个创币交易信息字段中。
[0112]
在某些情况下,声誉分数可以被归一化,例如将其除以最大声誉分数(例如,由区块链或窗口中的所有区块产生的声誉分数)。这将确保所有声誉分数都在0到1之间。
[0113]
现在参考图7,其示出了确定挖矿节点的声誉分数的示例方法700。该示例方法700可以由挖矿节点、由另一个区块链节点执行或由区块链网络外部的计算节点执行。
[0114]
在操作702中,追踪针对特定挖矿节点的链接的创币交易链,例如如上文结合图6所描述的。通过追踪创币交易,标识挖矿节点的工作历史。在操作704中,确定包含创币交易之一的每个区块的难度阈值。然后在操作706中,通过将函数应用于难度阈值集来确定挖矿节点的声誉分数。如上所述,这可以包括对难度阈值(或它们的倒置值(inverted values)求和。可以通过函数应用附加的或替代的加权。结果是挖矿节点的声誉分数,其在操作708中输出。
[0115]
声誉分数是挖矿节点对区块链的贡献的可量化度量,可用于多种场景。有利地,用于确定和验证矿工身份及其相关联的声誉分数的所有数据都可以从区块链公开获得,并且借助于工作量证明支持的区块链的不可变性质进行验证。为了防止恶意行为,挖矿节点的声誉分数只能通过挖矿区块来提高,即通过对区块链网络的稳定性的积极贡献。
[0116]
声誉分数由包括其矿工标识符和到创币文档中先前的区块的链接的挖矿节点形成。创币文件的内容在挖矿节点的控制之下,这意味着挖矿节点不需要依赖任何第三方验证或认证来构建声誉。此外,挖矿节点不能伪造或篡改声誉。
[0117]
可以在许多应用中使用可验证地确定具有关联的矿工身份的挖矿节点的声誉分数的能力。例如,参与特定协议或活动的权利可以基于具有最小阈值声誉分数的挖矿节点来预测,以便仅允许具有特定系谱的矿工参与。另一个潜在的应用是投票。特别是当涉及到对底层区块链协议的建议的改变时,矿工可以负责提交投票,并且该投票可以以某种方式被加权。一个选项是基于声誉分数对投票进行加权,从而基于具有较高声誉分数的矿工已经做了更多的工作来构建现有的区块链来赋予具有较高声誉分数的矿工更大的权重。
[0118]
在区块链中使用的一个示例投票方案涉及开放时间窗口,在该时间窗口期间矿工可以进行投票,然后基于在该时间窗口期间挖掘到的区块来清点(tally)投票。这将在时间窗口期间为具有最大的哈希能力的矿工提供最多的选票,并且不考虑贡献历史。这可能导
致“哈希战”,使系统容易受到“租用的哈希”的影响,其中有意歪曲投票结果的矿工暂时将大量计算能力提交给区块链,以便在窗口期间支配区块链的哈希能力,但没有资源或兴趣将这些大量的计算能力长期投入到区块链中。在某些情况下,“租用的哈希”是不可持续的,因为它是非经济的资源分配,但却是由该矿工为强制投票结果而招致的成本。因此,矿工所获得的对投票的影响与该矿工对区块链的实际参与和投资不成比例。
[0119]
在一个示例中,矿工投票过程可以允许挖矿节点参与,前提是挖矿节点具有注册的矿工标识符(例如,pk
id
)以及关联的声誉分数rep
id
。投票发生在商定的时间窗口(从开始时间到结束时间(或者,从起始区块高度到结束区块高度))期间。就任何投票的窗口和定时达成共识的机制可能是链上的,也可能是链下的。
[0120]
为了投票,挖矿节点必须在投票窗口期间挖掘投票区块。在投票区块中,矿工在创币交易中插入其矿工标识符和对其最近的创币交易的引用。在一些实现方式中,它还可以包括其计算的声誉分数。挖矿节点还包括投票信号。根据投票情况,信号可能是二元的“是”/“否”或“赞成”/“反对”信号,或者可能是多值信号,例如在三个或更多个选项之间进行选择、三个或或更多个选项之间进行排名等。在一些示例中,创币交易还可以包括基于对应于矿工标识符的私钥的数字签名。数字签名的级别可能高于创币交易中的信息字段的其他内容。
[0121]
在一些实现方式中,单个矿工可能有权在投票窗口期间多次投票。在一些其他实现方式中,每个矿工(即,每个关联的矿工标识符pk
id
)仅允许投票一次。在后一种情况下,如果矿工挖掘到声称要投票的多于一个的区块,则可以应用策略来确定要对哪个计数。例如,策略可能是采用最早(最低区块高度)的投票。或者,策略可能是采用最后(最高区块高度)的投票,以允许矿工在窗口期间改变他们的投票。
[0122]
任何投票监测器都可以通过验证矿工标识符(如上所述)和验证与该矿工标识符相关联的声誉分数(如上所述)来验证投票是否有效。如果需要签名作为投票创币交易的一部分,则它可以防止另一个矿工恶意挖掘区块并声称通过使用他们的pk
id
来投另一个矿工的选票的可能性。投票窗口关闭后,任何观察方都可以通过对每个选项的声誉分数加权后的投票进行求和来确定结果,因为所有信息都记录在区块链上并且可以被验证。
[0123]
通过使用历史区块数据而不是当前和未来的区块数据计算投票,可以在相对较短的时间段内进行投票,同时确保使用足够的工作量证明数据计算投票权重以准确地反映链式工作。这可以实现相对较短的投票时段,而不会存在投票权重被临时哈希突发扭曲的风险。
[0124]
但是,由于投票需要每个pk
id
挖掘新区块,因此必须给予足够的时间使得矿工能够投票。假设区块时间为10分钟,如果具有pk
id
的矿工有x%的网络哈希率,那么在t小时内挖掘至少一个区块的概率是:
[0125][0126]
下面的表1给出了各种x和t的p
[0127]
xt=24t=48t=72t=960.5%0.5140.7640.8850.9441%0.7650.9450.9870.997
5%0.9990.999≈1≈125%0.999≈1≈1≈1
[0128]
从上表将可以理解的是,即使pk
id
只有1%的网络哈希率,72小时的投票期几乎可以保证他们能够挖掘到投票区块。
[0129]
在可能的哈希战场景的至少一个示例建模中,上述声誉系统可以证明会降低租用的哈希的有效性,使得即使攻击方在14天内支配了75%的网络,攻击方也将仅管理积累23%的投票能力。
[0130]
应当理解,各种上述示例方法的上述操作中的一些或全部可以按照不同于所示出的顺序执行和/或可以在不改变那些方法的整体操作的情况下同时执行。
[0131]
现在参考图8,其以框图形式示出了根据本技术示例的简化计算装置800。该计算装置800可以执行上述功能中的一个或多个。例如,计算装置800可以是挖矿节点。在一些实现方式中,计算装置800可以是非挖矿节点,其操作以验证区块链记录的数据,例如,诸如矿工标识符、矿工工作历史、矿工声誉分数或矿工投票区块等。
[0132]
计算装置800包括处理器802,其可以包括一个或多个微处理器、专用集成电路(asic)、微控制器或类似的计算机处理装置。该计算装置800还可以包括存储器804和网络接口806,该存储器804可以包括持久性和非持久性存储器以存储值、变量以及在某些情况下还包括处理器可执行程序指令。
[0133]
计算装置800可以包括处理器可执行应用程序808,其包含处理器可执行指令,这些指令在被执行时使处理器802执行本文所述的一个或多个功能或操作。
[0134]
以上呈现的各种实施例仅是示例并且绝不意味着限制本技术的范围。本文描述的创新的变化对于本领域普通技术人员来说将是显而易见的,这样的变化在本技术的预期范围内。特别地,可以选择来自上述示例实施例中的一个或多个的特征来创建替代示例实施例,其包括可能未在上文明确描述的特征的子组合。此外,可以从一个或多个上述示例实施例中选择特征并将其组合以创建替代示例实施例,其包括上面可能没有明确描述的特征的组合。本领域技术人员在整体审阅本技术时将容易明白适合于这种组合和子组合的特征。本文和引述的权利要求中描述的主题旨在涵盖和包含所有合适的技术变化。
再多了解一些

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

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

相关文献