挖矿:工作量证明 “ 区块 ”部分简要介绍了块困难的概念。赋予难度意义的算法被称为工作量证明(PoW)。 以太坊的工作证明算法被称为“Ethash”(以前称为Dagger-Hashimoto)。 该算法被正式定义为: 其中m是mixHash,n是hash,Hn是新块的头(不包括nonce和mixHash分量),Hn是块头的hash,d是DAG,它是大数据集。 在“ 区块 ”部分,我们讨论了块头中存在的各种项目。其中两个组件被称为mixHash和nonce。你可能会记得: mixHash是 一个hash,当与nonce相结合时,证明这个块已经执行了足够的计算; nonce是一个hash,当与mixHash结合使用时,证明这个块已经执行了足够的计算; PoW功能用于评估这两个项目。 如何使用PoW函数计算mixHash和nonce是相当复杂的,它是大概这样工作的: 会为每个区块计算一个”种子”。每个“时期”的种子都不一样,每个时期是30,000个区块长度。对于第一时期,种子就是32位0的hash值。对于后续的每个时期,种子就是前一个种子hash值的hash值。使用这个种子,节点可以计算一个伪随机“缓存”。 这个缓存是非常有用的,因为它可以使“轻节点”的概念变成现实,轻节点概念在这篇文章的前面讨论过。轻节点的目的就是让某个节点有能力高效的校验交易而用不着存储整个区块链的数据集。一个轻节点可以仅基于缓存来校验一个交易的有效性,因为缓存可以重新生成需要校验的特定块。 使用缓存,节点可以生成DAG“数据集”,其中数据集中的每个项目都依赖于缓存中的少量伪随机选择的项目。为了成为矿工,你必须生成这个完整的数据集; 所有完整的客户和矿工都存储这个数据集,数据集随时间线性增长。 然后,矿工们可以对数据集进行随机切片,并通过一个数学函数将它们组合成一个“ mixHash”。“一个矿工将重复产生一个混合hash,直到输出低于期望的目标hash。当输出满足这个要求时,这个hash被认为是有效的,并且该数据块可以被添加到链中。 2 挖矿:安全机制 总体而言,PoW的目的是以密码安全的方式证明已经花费了特定数量的计算来产生一些输出(即nonce)。这是因为除了列举所有可能性之外没有更好的方法来找到低于所需阈值的nonce。重复应用hash函数的输出具有均匀的分布,所以我们可以确定,平均来说,找到这样一个hash所需的时间取决于难度阈值。难度越高,解决现时的时间就越长。这样,PoW算法赋予难度概念的意义,用于强化区块链安全。 区块链安全意味着什么?很简单:我们要创建一个每个人信任的区块链。如果存在不止一个链,用户就会失去信任,因为他们无法合理地确定哪个链是“有效的”链。为了让一组用户接受存储在区块链中的基础状态,我们需要一群人相信的单个规范区块链。 这正是PoW算法的作用:它确保特定的区块链将在未来保持规范,使得攻击者难以创建覆盖历史的某个部分的新块(例如通过擦除交易或创建假交易)或保持一个分叉。为了首先验证自己的区块,攻击者需要始终如一地解决nonce问题,比网络中的其他任何人都快,以至于网络认为他们的链是最重的链(基于我们之前提到的GHOST协议的原理)。除非攻击者拥有超过一半的网络挖矿能力,这种情况被称为大多数51%的攻击,这是不可能的。 3 挖矿:财富分配机制 除了提供安全的区块链之外,PoW也是一种将财富分配给那些为了提供这种安全而花费自己算力的人的方式。回想一下,矿工获得挖矿块的奖励,包括: “获胜”区块的5枚以上的静态区块奖励(即将变成3个ether) 区块内的交易消耗的Gas成本 包括ommers作为区块的一部分的额外奖励 为确保长期使用PoW共识的安全和财富分配机制,Ethereum努力灌输这两个属性: 让尽可能多的人访问。换句话说,人们不需要专门的或不常用的硬件来运行算法。这样做的目的是使财富分配模型尽可能开放,以便任何人都可以提供任何数量的计算能力来换取以太网。 减少任何单个节点(或小集合)造成不成比例的利润的可能性。任何可能产生不成比例的利润的节点意味着该节点对于确定规范区块链具有很大的影响。这很麻烦,因为它降低了网络的安全性。 在区块链网络中,与上述两个属性相关的一个问题是PoW算法是SHA256hash函数。这种类型的功能的弱点是可以使用专用硬件(也称为ASICs)更有效地解决这个问题。 为了缓解这个问题,以太坊选择让PoW算法(Ethhash) 提高内存级别难度。这意味着算法的设计使得计算nonce需要大量的内存和带宽。 较大的内存需求使得计算机难以同时使用内存来同时发现多个临时数据,高带宽需求使得即使是一台超高速计算机也难以同时发现多个临时数据。这降低了集中化的风险,并为正在进行验证的节点创造了更加公平的竞争环境。 有一点需要注意的是,以太坊正在从一个PoW共识机制转变为一种被称为“证明权益”的东西。 (责任编辑:) |