概念
工作量证明(Proof-of-Work,PoW)是一种对应服务与资源滥用、或是阻断服务攻击的经济对策。一般是要求用户进行一些耗时适当的复杂运算,并且答案能被服务方快速验算,以此耗用的时间、设备与能源做为担保成本,以确保服务与资源是被真正的需求所使用。
简单理解工作量证明就是指系统为达到某一目标而设置的度量方法,用来确认你做过一定量的工作。
在区块链中的应用
大家可以想象这样一道数学难题:求解随机数x,当将其带入到一个固定公式后,得到的值满足我的限定条件,即:
csharp
// 限定条件
const limit = 100;
// 固定算法
function mathFn (randomNumber) {
// ...
}
// 求解的随机数
let randomNumber = ?;
// 处理机制
if (mathFn(randomNumber) < limit) {
return true;
} else {
return false
}
以上数学公式求解的过程是相对复杂的,而验证的方式是相对轻松的。
比特币正式利用类似于以上这样的数学难题来衡量区块链节点的工作量。具体如下:
区块链各节点通过计算一个数值,使得拼揍上交易数据后内容的Hash值满足规定的上限。在节点成功找到满足的Hash值之后,会马上对全网进行广播打包区块,网络的节点收到广播打包区块,会立刻对其进行验证。如果验证通过,则表明已经有节点成功解迷,其他节点就不再竞争当前区块打包,而是选择接受这个区块,记录到自己的账本中,然后进行下一个区块的竞争猜谜。网络中只有最快解谜的区块,才会添加的账本中,其他的节点进行复制,这样就保证了整个账本的唯一性。而成功打包的节点就会获得对应的虚拟币奖励。
假如节点有任何的作弊行为,都会导致网络的节点验证不通过,直接丢弃其打包的区块,这个区块就无法记录到总账本中,作弊的节点耗费的成本就白费了,因此在巨大的挖矿成本下,也使得矿工自觉自愿的遵守比特币系统的共识协议,也就确保了整个系统的安全。
过程
-
区块链节点生成交易信息
-
当前交易会广播给区块链中的其他节点
-
其他节点收到广播消息后开始求解符合条件的当前区块 Hash 值
求解的数学难题类似于如下题目:
scssHash{ (前一个区块的Hash值),(当前区块的交易资讯),(难度值),(随机数) }= 当前区块的Hash值;
矿工必须找出这个随机数,代入上述公式,让当前区块的Hash值开头为18个0,例如:
0000000000000000001583447dd74c13c09280a9218827244089adadaba8c8c9
解答的过程没有轨迹可循,矿工只能不断代入随机数,透过暴力的解法找出答案
其中难度值是随着当前网络中的算力进行调整,确保每10分钟左右产出一个区块
-
最先求解出符合条件的 Hash 值的节点向其他节点发送证明广播
-
收到证明广播后节点开始验证当前值是否正确,如果正确,则认可当前结果,复制当前结果链接上一个区块,如果错误,则丢弃当前区块,继续求解正确的区块 Hash 值
-
计算出当前 Hash 值的区块获得当前区块的记账权,同时获取生成的虚拟币和交易费用
优缺点
优点
- 完全去中心化(任何人都可以加入)
- 按劳分配,公平公正
- 破坏系统花费的成本巨大,掌握51%的算力对系统进行攻击所付出的代价远远大于作为一个系统的维护者和诚实参与者所得到的
缺点
-
对节点的性能网络环境要求高;
-
浪费资源,尤其是电能
-
每秒钟最多只能做七笔交易,效率低下;
-
矿场的出现违背了去中心的初衷,甚至有的矿场出现了超过全网51%的算力的情况,对整个比特币网络来说是一个致命打击
-
比特币产量每4年减半,利益驱动性降低导致矿工数量减少从而导致比特币网络瘫痪。
其他共识机制
权益证明机制(PoS)
POS也称股权证明机制,依据节点所持有的权益大小(即节点在区块链网络中投入或存储的数字资产总额)决定新区块的记账归属。
因此,在权益证明机制中不需要堆积算力,仅需在区块链网络中投入权益即可参加记账权的竞争。
在这里大家要先了解一个概念,就是币龄。币龄等于币的数量乘以持币天数。
因而你持有的币的数量越多、持有天数越长,你获得的记账权和激励概率就会越大。
但是当你获得激励后,你的持币天数就会清零,随之币龄也会被清空。