比特币白皮书学习(二)工作量证明
前篇:
最近参加了不学区块链就出局
牛市赚钱,熊市学习
告别韭菜,争当大神
在昨天的学习中
学习了三点
1、去中介化
金融交易成本太高
去中介化能降低成本
2、随机签名
加密的方式
3、时间戳服务器
加入时间戳
确认每笔交易的唯一性
并将每个交易区块链起来
今天学习的第一点是
4、工作量证明(Proof-of-Work)
为了维护网络的存在
就需要有更多的算力去支持这些网络
为了尊重原创
以下内容来源于:比特币工作量说明
从区块链记账原理中我们知道了
每次记账的时候回把上一个块的Hash值和当前的账页信息一起作为原始信息进行Hash。
如果仅仅是这样,显然每个人都可以很轻松的完成记账。
为了保证10分钟左右只有一个人可以记账
就必须要提高记账的难度
使得Hash的结果必须以若干个0开头
同时为了满足这个条件
在进行Hash时引入一个随机数变量
用伪代码表示一下:
# 没有难度时为:Hash(上一个Hash值,交易记录集) = 456635BCDHash
(上一个Hash值,交易记录集,随机数)=0000aFD635BCD
我们知道改变Hash的原始信息的任何一部分
Hash值也会随之不断的变化,因此在运算Hash时
不断的改变随机数的值
总可以找的一个随机数使的Hash的结果以若干个0开头(下文把这个过程称为猜谜)
率先找到随机数的节点就获得此次记账的唯一记账权。
计算量分析
(这部分可选阅读)我们简单分析下记账难度有多大,
Hash值是由数字和大小写字母构成的字符串
每一位有62种可能性(可能为26个大写字母
26个小写字母,10个数字中任一个)
假设任何一个字符出现的概率是均等的
那么第一位为0的概率是1/62(其他位出现什么字符先不管)
理论上需要尝试62次Hash运算才会出现一次第一位为0的情况
如果前两2位为0,就得尝试62的平方次Hash运算
以n个0开头就需要尝试62的n次方次运算
我们结合当前实际区块#493050信息来看看:
注:数据来源于https://blockchain.info
我们可以看到Hash值以18个0开头
理论上需要尝试62的18次方次
这个数是非常非常巨大的
我已经算不清楚了
应该是亿亿级别以上了
如此大的计算量需要投入大量的计算设备、电力等,
目前应该没有单矿工独立参与挖矿了
基本都是由矿工联合起来组成矿池进行挖矿(矿池里的矿工按算力百分比来分收益)。
从经济的角度讲,只有挖矿还有收益(比特币价格不断上涨也让收益变大)
就会有新的矿工加入,从而加剧竞争,提高算力难度
挖矿就需要耗费更多的运算和电力
相互作用引起最终成本会接近收益。
题外话:国内由于电力成本较低,相对收益更高
中国的算力占整个网络的一半以上
验证
在节点成功找到满足的Hash值之后
会马上对全网进行广播打包区块
网络的节点收到广播打包区块
会立刻对其进行验证。
如果验证通过,则表明已经有节点成功解迷
自己就不再竞争当前区块打包
而是选择接受这个区块
记录到自己的账本中
然后进行下一个区块的竞争猜谜。
网络中只有最快解谜的区块
才会添加的账本中
其他的节点进行复制
这样就保证了整个账本的唯一性。
假如节点有任何的作弊行为
都会导致网络的节点验证不通过
直接丢弃其打包的区块
这个区块就无法记录到总账本中
作弊的节点耗费的成本就白费了
因此在巨大的挖矿成本下
也使得矿工自觉自愿的遵守比特币系统的共识协议
也就确保了整个系统的安全。
说明
矿工的收益其实不仅仅包含新发行的12.5比特币奖励
同时还有交易费收益
有兴趣的同学可以看看图中区块都包含了那些信息
红箭头标示出的是本文涉及的信息。
本文中有提到共识协议
比特币共识协议主要是由工作量证明和最长链机制 两部分组成
之后会有博文详细讲解。
今天就学习到这里
明天继续
如果你也想对区块链有更多的认识
欢迎加入我们的社群
这是一个不讨论币价,艾希欧
只学习区块链知识的社群