主页 > imtoken怎么转bc1地址 > 比特币挖矿(一):1 CPU 1 VOTE
比特币挖矿(一):1 CPU 1 VOTE
工作证明
挖矿是工作量证明(POW)的完成。 POW机制的核心是哈希(HASH)函数。 哈希函数最大的特点是:输入不同,输出随机。
对于特定要求的输出,只能通过大量的枚举和不同的输入来获得。 没有捷径,也没有懒惰。 无论输入尝试多少次或数亿次,验证者只需要对结果执行一次处理。
比如学校里有10000个人,名字各不相同。 设计一个哈希函数,输出范围为:[1, 100]。
要找到一个输出等于 42 的名字(1-100 之间的任何值都相同),理论上需要尝试 100 次。 也意味着:1、尝试100次并不意味着一定要找到名字; 2.尝试100次也可能会找到输出为42的多个名字; 3.不管用什么遍历顺序,效率都是一样的。
比特币的区块(Block)是用来证明工作量的,准确的说是区块头(Block Head)的80字节。 一个完整的块由两部分组成:Head + Body。 Head存放固定的80字节信息,Body部分存放交易数据。
块头构成字段名含义大小(字节)
版本
版本号
4个
hashPrevBlock
前一个区块哈希值
32
hashMerkleRoot
从前一个区块的产生到新区块的产生,
交易数据打包形成的哈希
32
时间
Unix 时间戳
4个
位
目标值,即难度
4个
随机数
随机数
4个
块哈希算法:对这80个字节进行双sha256计算。 输出的是32字节,平时看到的是64位的字符串,十六进制显示。
DSHA256(block head) = 区块哈希
采矿过程
下面结合区块头的组成简述比特币工作量证明过程,梳理一下挖矿的计算过程。
CPU时代
nonce大小为4字节(2^32),其空间为42亿,即4G。 这在CPU时代完全够用了。 单核Double SHA256计算速度一般在0.1M到4M之间。 核心越多,优势越多。
bitcoind源码中CPU挖矿的代码片段,bitcoin/src/miner.cpp(nonce遍历2个字节后会重建区块):
过程很简单简述比特币工作量证明过程,就是反复构造区块,尝试计算nonce。 N个CPU核心开启N个线程,所以挖矿时CPU一般都是100%。 cpuminer这个软件很快就出现了,可以让一个bitcond节点支持多台电脑挖矿。 许多比特币爱好者纷纷购买高规格电脑开始挖矿,正如中本聪在论文中所预言的理想数字民主:1 cpu 1 vote!
参考