主页 > imtoken安卓最新版 > 比特币视角下的PoW机制

比特币视角下的PoW机制

imtoken安卓最新版 2023-01-17 05:43:12

比特币视角下的POW机制

ps:以下内容需要先了解区块链的基础知识

共识机制只有两个核心:

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

战俘简介

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

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

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

块的组成

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

字段字节描述

区块头

80

p>

头文件

尺寸

4

表示块存储大小

计数器

1-9

交易数量

交易清单

/

没什么好说的

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

字段字节描述

版本

4

区块版本号

父哈希

32

前一个区块的哈希

默克尔根

32

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

时间戳

4

UNIX 时间戳

难度级别

4

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

随机数

4

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

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

方块合成.png

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

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

哈希函数

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

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

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

31d74184aa8f98106c3767651126828cc3d8728919c673f8af76e11a042acd69

d7bb29d07c0cf23193c660af231ad6c6c40dde52e4efaf6d4f441b16b16f024a

游戏

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

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

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

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

数学益智游戏.png

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

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

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

最长链原理

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

最长链原理.png

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

双花

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

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

余额

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

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

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

[正在上传异地图片...(image-744653-1522319748663)])

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

图片

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

ps:有意思的是,在以太坊的前中期版本中也使用了POW机制,但币种是逐年发行的。白皮书中的解释是,每年都会有一定数量的币永久丢失,所以需要发行少量以保持总余额。

矿工与系统稳定性.png

“好人”和“暴民”的选择

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

总结

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