
大家好,我是丢居宝,一个区块链行业失足大学生

今天我们来尝试用笔算哈希挖矿比特币!
温馨提示:
当前一枚比特币报价6467美金,最高报价20000美金左右
当前一次挖矿成功可获得12.5个比特币
所以请珍惜
这可能是你离财富自由最近的一次!

笔算过程简单,但有一点繁琐。
最佳推荐观看方式:文章和支付宝余额来回切换观看,可有效抵制观看下不耐烦等不良反应

掷骰子?财富自由靠运气
区块链从某种意义上来说就是一种共识机器,而比特币是第一个解决了大型网络(1000节点以上)的“分布式共识”问题。这归功于比特币的共识机制POW(proof of work),简单粗暴,谁付出的多就让谁来代表发言,比特币挖矿其实就是让节点通过类似丢一个无数面的骰子来争取比特币网络的记账权,谁猜中数字就证明你付出了一定量的劳动,比特币网络将会赋予你记账这个区块的权力,成功记账系统就会奖励记账者50个比特币,从第一个矿工打包记账成功开始,奖励每四年减半,到今天就是12.5个比特币,虽然数量减少,但是与比特币的价格相比来说,这依旧是一笔不小的财富。

比特骰子的游戏规则
争夺比特币网络记账权的掷骰子游戏本质上是一种哈希256(SHA256)计算,对于任意长度(按bit计算)的消息,SHA 256都会产生一个32个字节长度数据 ,可以将SHA 256理解为一个函数,任意长度数据的输入,经过SHA 256计算后会得到一个固定长度的唯一输出。而且,这个函数不可反推,意思就是你无法通过输出的哈希反推回输入的原始数据。

以区块信息、难度值、随机值为输入,重复两次SHA256计算,使得Hash的结果必须小于某个数(或者说拥有若干个0开头),这就是游戏的内容。而符合条件的随机值算出来的哈希就是这轮游戏的答案
为什么说这是一个投骰子的游戏,因为这个式子无法简化,只能通过不断尝试改变随机数的穷举法来暴力计算出符合以若干0为开头的答案。
游戏规则:
1.一局游戏时间只有10分钟(网络将会调整难度值来确保全网矿工在10分钟左右可以算出答案)
2.10分钟内只有一个人可以记账成功(如果有两个以上矿工同时算出答案,取最长链)
游戏开始的准备
因为我们要尝试笔算挖矿比特币,所以有些信息要手动准备一下

区块信息的准备
我在比特币区块链浏览器截图了比特币第10000个区块的区块信息,以下是网址信息:(https://www.blockchain.com/btc/block/0000000099c744455f58e6c6e98b671e1bf7f37346bfd4cf5d0274ad8ee660cb)

比特币区块高度100000区块信息
其中需要的数据有:
版本号(Version):1
前一区块的哈希值(Previous Block):
00000000fbc97cc6c599ce9c24dd4a2243e2bfd518eda56e1d5e47d29e29c3a7
二进制哈希树根(Merkle Root):
9c397f783042029888ec02f0a461cfa2cc8e3c7897f476e338720a2a86731c60
时间戳(TIMESTAMP):2009-04-0603:23:33
目标难度值(Bits):486604799
随机数(Nonce):2145410362
将时间戳化作UCT格式后,所有数据转化为16进制,注意这里需要将16进制数据由big-endian转化为更容易计算机理解的little-endian形式后根据数据长度除以512取余数位,不足512进行补位,补长度后将信息补充为512位的大小,这样就完成我们所需的比特币区块信息准备。
哈希计算准备

哈希计算流程图
这是哈希计算的流程图,按照图片上的信息准备数据和理解所需要用到的位运算规律
8个哈希初值
哈希运算中的ABCDEFGH即对应8个哈希初值,这些初值是对自然数中前8个质数的平方根的小数部分取前32bit而来:

4种哈希位运算
蓝色框框内的是位运算:

Ch代表的意思是:如果X位为1则输出Y位的值,如果X位为0则输出Z位的值
Ma代表的意思是:输出X,Y,Z三个位中的多数位
Σ0代表的意思是:将所有位向右旋转2位、13位、22位后相加(可以理解为位移后将后面的位补到前面)
Σ1和Σ0相同:将所有位向右旋转6位、11位、25位后相加
红色框进行的是加法,然后生成A至E的新值
Wt就是基于原输入数据:在这里指上面准完成的比特币区块信息,也就是Wt t = 1,2..16由该区块信息产生。 Wt t = 17,18,..,64由前面的Wt按递推公式计算出来:

输入数据Kt则是每一轮定义中的常数,也就是64个哈希常量
64个哈希常量:

这些常量是对自然数中前64个质数的立方根的小数部分取前32bit而来
哈希计算过程
万事具备,开始笔算

哈希计算的过程就是将ABCDEFGH这8组32bit的初始值,在每个512bit的分组里面迭代计算64轮,而比特币要求哈希两次,就是迭代128轮,即完成一次比特币哈希计算。视频中仅示范一轮哈希计算,每一轮输出为下一轮哈希输入,直到128轮结束,所有的512-bit分组处理完毕后,对于SHA-256算法最后一个分组产生的输出便是256-bit的哈希值
笔算视频如下:
天选之矿需要天选之人来挖
我们来简单算一下,如果我要笔算出区块号10000的满足目标难度的哈希值,因为区块信息中随机值为486604799,采用暴力算法从0开始计算,我需要丢486604799次骰子,才能恰好碰到这个幸运数字,挖出一个比特币
我完成一轮哈希计算大概花了15分钟(为了录制算了好几遍,熟练度上升)国外有个小哥用了16分45秒完成了一轮哈希计算
https://www.bilibili.com/video/av14401648/
按照这个速度,尝试了一个随机值即仅仅是丢了一次骰子,就用了1.49天,算出一个符合条件的哈希值需要7.299亿天,大约200万年,200万前发现了世界上最早的人类是最早的南方古猿化石,10分钟结束的游戏,算完了整个人类进化史。
这还是比特币网络第10000个区块的难度,此后挖矿的难度只会随着全网算力的增加越来越难,再用一个形象的比喻:手算出哈希值的难度比在全世界的沙子里面找到特定的一粒沙子还要难,可能性还要低
天选之矿果然不是普通人能企及啊!
逆天而行可能吗?
看来你还没有死心,还记得比特币寻龙分金大法吗?其实那才是手算挖矿整个步骤的成败关键,我在说方法,你却当笑话!
如果参透了比特币寻龙分金大法,或许你就死心了

币圈很乱,不是有意骗你,而是不忍心你被别人骗
学会了转发留言点个赞吧!
添加新手交流群:币种分析、每日早晚盘分析
添加助理微信,一对一亲自指导:YoYo8abc