主页 > imtoken钱包2.0版本下载 > 比特币视角下的PoW机制

比特币视角下的PoW机制

imtoken钱包2.0版本下载 2023-01-17 04:30:38

ps:以下内容需要区块链基础知识。

共识机制只有两个核心:

虽然不同的共识机制实现方式不同,但目的是一致的,即社区节点在记账上达成共识,账本内容保持一致。主要实现方式有***POW***、POS、DPOS、BFT、PBTF、DBTF***等。其中,由于第一个比特币作为第一个区块链应用采用***POW(Proof of Work ) 共识机制,这个机制是最经典的。在没有特别说明的情况下,以下内容默认以比特币为案例分析该机制,但对模型进行了不同程度的简化。

战俘简介

在比特币世界中,POW 机制是为挖矿而设计的。这种设计只有两个核心:

这种机制在生活中并不少见。例如,在获得大学文凭的过程中,只有经过四年学习获得学分的人才能获得文凭。谁先得到功劳,就可以证明谁付出了更多的努力,也就是提供了更多的“工作量”。但是,如果学分没有完全完成,就无法提供有效的“工作量”证明比特币中计算hash目的是啥,自然也无法获得毕业证书。

POW 机制解决了共识问题中的第一个问题,谁建块。但是这个机制也带来了很多问题,所以还需要一些其他的设计来完善这个机制。

块的组成

区块链通常是指块的线性(树)组合。当然也有有向无环图等结构,但目前链式结构仍是主流。区块作为一种数据存储介质,记录了一段时间内网络中发生的所有交易信息。以比特币为例,一个完整的比特币区块由以下几部分组成:

字段字节描述

区块头

80

p>

头文件

尺寸

4

表示块存储大小

计数器

1-9

交易数量

交易清单

/

没什么好说的

块头文件由以下内容组成:

字段字节描述

版本

4

区块版本号

父哈希

32

前一个区块的哈希

默克尔根

32

区块中交易列表的Merkle根的哈希值

时间戳

4

UNIX 时间戳

难度级别

4

工作量证明的难度与全局计算能力负相关

随机数

4

幸运值,每次抽奖后的数字

为了简化模型,block可以大致表示为如下图例

每个区块 一个区块其实就是一个账本,每个人都有权拥有一个账户。这些账本通过保存一个标识符(区块哈希)形成链式结构,线性保存了这个区块世界中发生的所有交易记录数据,形成了一条很长的链,即区块链。 (应该说是树状的)。每个块都有一个固定的模板,模板定义了三个重要的属性:

ps:为了简化模型考虑,当前区块的hash也放在了上面图例中的区块中。 ,其实比特币在构建新区块的时候只是计算老区块的哈希值。

哈希函数

哈希函数(hash function)是一种在挖矿机制中起核心作用的算法。这是一种为任何数据创建数字指纹的方法,其中 SHA256 是最广泛使用的变体之一。该算法的细节这里不做详细解释,只总结一下该算法的特点:

测试哈希函数可以使用这种链式哈希值算法

测试可以找到字符串“Hello,world”和“Hello,world!”的SHA256散列值是

31d74184aa8f98106c3767651126828cc3d8728919c673f8af76e11a042acd69

d7bb29d07c0cf23193c660af231ad6c6c40dde52e4efaf6d4f441b16b16f024a

游戏

上述区块中的Nonce值和哈希值函数与挖矿机制密切相关。挖矿的本质是一次又一次的数学益智游戏。谜题是一个哈希函数的结果,谜题的答案就是这个函数的输入,奖励就是获得最终的区块构造权并获得相应的奖励。在比特币的世界中,矿工在网络中接收交易广播。理论上,每个矿工都可以将这些交易打包成区块,但系统设计肯定不会这样做。因此,在这种独特的 POW 机制中,每个矿工都需要找到一个唯一值 Nonce 并将其添加到区块中,这样最终生成的区块哈希值的前十位都是 0。谁先找到这个数字,谁就有权利构建块。数据打包后,新生成的区块将发送给其他矿工进行验证。当验证 Nonce 值和交易内容没有问题时,证明这个区块已经被社区同意并添加到区块链的最后位置。与此同时,一个新的循环开始了。值得注意的是,在这个过程中,Nonce 值只是一个名称。如果可能,也可以简称为“幸运值”或“彩票号码”。

益智游戏的过程可以简单概括为以下函数模型:

SHA256(Trans+PreHash+Nonce)=0000000000........

ps:上面的公式也简化了模型的处理,其实在比特币的设计中,这个区块应该是双SHA256,参数也不仅仅是上面三个。至于算出hash值的结果是“hash值的前10位为0”还是“hash值小于Target”,两者的本质其实是一样的。

使用SHA256***作为算子,输入为***Trans***、PreHash***和***Nonce,分别代表交易数据、前一个区块的hash、特殊Value Nonce 输出是一个哈希值,前十位数字全为零。如前所述,SHA256的特性是不可逆的,这意味着Nonce的值不能从哈希值推导出来。同时,输入数据的微小差异也会导致输出值的巨大差异。因此,解决这个数学难题只有一种最经典的方法——穷举。假设Nonce=0,代入公式,计算区块的hash值,满足目标结束,不满足,迭代。流程如下:

新区块的验证过程相当于这个过程的逆过程,主要包括三个方面:

当新区块被多个节点验证(并非所有节点都会验证)时,新区块正式成立,社区获得共识,矿工获得奖励,同时也标志着区块“挖矿”的结束.

如果只看算法层,这个过程还是比较简单甚至粗鲁的。因为区块构建权完全取决于“机器”的工作量,而不是“人”的工作量,也不是“IP”的工作量。由于密码学的某些特性,获得构建块报酬的唯一方法是通过重复计算。计算和求解非常困难,因此需要消耗大量的硬件性能和功耗。验证起来要容易得多。从这点来看,确实和“挖矿”很像——挖矿的过程很辛苦,验证是否是金子的过程也很简单。

最长链原理

挖矿机制的出现为“谁来建块”提供了答案,但共识问题还有一个更重要的问题:如何维护区块。在分布式系统中,挖矿的动作是并行发生的。也就是说,递增块实际上并不是标准的线性结构,而是树形结构。

同时,社区中可能会出现多个基于同一个父区块的子区块。如上图所示,基于父区块A1,两个矿工都找到了幸运值Nonce,此时A2和B2都是合法的。随着时间的推移,两个分支的长度会有所不同,系统只会将最长的分支视为主分支。对于需要记账的矿工来说,最后一个账本(父区块)永远是最长分支的最高区块。这种模式称为最长链原理。

双花

双花问题是由最长链原则引起的问题。由于系统始终认为最长的链是主分支,因此有人可能会劫持计算能力并伪造账本。类似上图的情况,有人在A1的情况下有一笔交易,随着时间的推移,发展到一个新的区块A2。这时候如果有人找到A1的账簿,取消交易,重新计算一个分行。如果子分支的长度大于当前主分支的长度,则子分支成为主分支,之前的交易被篡改。

比特币对双花攻击的处理有点奇怪。系统只提示交易完成后需要6次确认才能被识别。具体来说,就是在一笔交易发生后,连续产生了6个新的区块,真正确认了该笔交易是合法的。这样,要实现双花攻击,就需要在落后6个街区的基础上追上主分支。显然,这样做的结果是,即使实现了攻击,也会消耗大量的算力。这种设计的特点是系统宁愿牺牲交易确认效率也不愿“回滚”。区块一旦创建,将永远存在,无法修改或删除,即使区块出现问题。

余额

在区块的维护上,基本的最长链原则是不够的。 POW 机制还定义了一些其他的规则来创造一个美妙的平衡。

矿工利益与系统稳定性的博弈

POW 机制中最重要的角色是矿工。矿工需要消耗大量的能量来换取算力,才能构建区块获得奖励(即挖矿成功后获得系统奖励),这是世界上唯一的生币方式的比特币。但如果不断发行新币,未来就会出现通胀问题。因此,系统规定挂单的收益会随着区块高度达到一定水平(210000))而半衰减。可以根据算力调整出块速度,保证平均出块10分钟。因此,比特币的总和是一个比例序列的总和:

S_n=210000a_1.\frac{1-q^n}{1-q}=210000\frac{a_1-a_n.q}{1-q}<210000\frac{a_1}{1-q}\qquad (a_1=50,q=0.5)
复制代码

其中 a1=50,q=0.5。这是一个收敛函数,随着 n 的增加,Sn 最终接近 21,000,000。

虽然衰减模式解决了通货膨胀问题,但随着时间的增加,挖矿收益会越来越低。当挖矿收益消耗低于成本后,挖矿的意义就不复存在了。因此,在比特币的设计中,矿工除了挖矿收益外,还可以通过打包交易时收取手续费来获得收益。这样,即使没有挖矿奖励,也不会引发矿工“罢工运动”。不得不说,确实是一个精致的设计。

ps:有意思的是,在以太坊的前期和中期版本中也使用了POW机制,但是币种并没有采用年度发行的机制。白皮书中的解释是,每年都会有一定数量的币永久丢失,所以需要额外增发一点来维持总量的平衡。

“好人”与“暴民”之间的选择

所谓的“好人”是指矿工。这些用户打包交易、构建区块、验证区块,共同推动社区的发展,维护系统的稳定性。所谓“暴徒”,是指攻击系统、干扰交易、恶意分叉社区破坏者。在区块链系统中,好人和暴民之间的选择并不取决于人性的善恶,而是取决于哪个身份更有利可图。由于比特币的“最长链原则”,社区始终将最长的分支视为标准分支。即使出现了一些小分支,但由于落后的算力,它们也逐渐淹没在历史的长河中。而且即使一个人劫持了超过 50% 的算力,攻击系统的收益甚至比不上一个诚实的矿工。如果要用一句话来概括这个机制,那就是“只有诚实的人不吃亏,才会自愿成为诚实的人”。

总结

其实这篇博文并不是简单的对POW机制进行更深入的分析,只是分析了这种经典共识机制在区块链中借助比特币的应用,所以模型进行了简化。正如开篇所说,区块链中共识机制的价值主要体现在两个方面:谁来建块?如何维护块。虽然 POW 机制提供了这样一个解决问题的方法,但并不完美。算力成本高被诟病比特币中计算hash目的是啥,这也为后来的POS、DPos和拜占庭系列机制提供了机会。而且,这个机制是“原则上去中心化”,“最彻底的一种,它根本不信任人,包括IP,它不需要任何资本或投票。它认为只有机器不会撒谎,只有CPU(或GPU)的迭代计算是真实的。正的“工作量”。原则上,这个机制似乎是想建立一个人人公平,人人可以挖矿的乌托邦。但实际上,这种机制最大的结果是,大面积的算力几乎集中在极少数矿主手中。