比特币挖矿,到底是在挖什么?比特币挖矿其实就是制造新区块的过程,制造新区块就是把最近收到的帐单打包在刚制造的区块里。这个打包的过程即制作的过程,只有极其稀少的几率被制造成功。一旦制造成功,你就把新的区块广播出去。 因为是p2p网络,可能有许多人都在同时制造新的区块,但有一个排序机制保证只有最优的那个新区块被网络群体接受,挂在全局的区块链上。重复一次,整个比特币网络只有一个全局帐单表,每个节点都完整的保存有一份。
节点向网络广播交易,这些广播出来的交易需要矿工的验证,矿工们会用自己的工作量证明来确认,确认后的交易会被打包到区块中,区块会串联起来形成区块链。而在这个过程中要计算一个关键的数据项即区块头里面的Nonce随机数,当一个矿工找到符合要求的解,那么它就会向全网广播自己的结果。其他节点可以检验其是否符合规则。只要其他节点通过计算hash值发现其确实满足要求,那么该数据块就是有效的,其他节点就会接受该数据块,并将其附加在自己的链之后,从而来延续比特币的区块链。
比特币有一个全局的区块难度,难度每产生2016个块就会改变一次,挖矿所求解的Nonce随机数必须小于给定的目标hash值。而目标hash值是可以通过程序里预先定义的公式计算出来。之前说过难度每经过2016个区块就会改变一次,这是因为比特币网络要保证大约每10分钟产生一个块的出块速率,再结合每4年减半这样就可以保证在2140年产生总量2100万的比特币。注意,这里是大约是每10分钟出一个块,所以大家在blockchain游览比特币区块时可以发现有的时候不到10分钟就出了一个块,有的时候出一个块用了远远不止10分钟。比特币程序会再每经过2016个块后检查一次,所花的时间是否为2周,如果大于两周则难度值会调低,小于两周难度值会调高。最终保证大约10分钟出一个块。
“挖矿”只是戏称,实际上矿工在争取“打包权”
比特币基于区块链技术。比特币的区块链网络每十分钟就产生一个区块。这个区块的内容就是在之前的区块的内容之上加上过去十分钟整个区块链网络的全部交易。完成这个工作被称为打包。完成这个工作的人被称为矿工,这个工作的过程被称为了“挖矿”。那么打包有什么好处呢?获得打包权并且完成打包之后,这个矿工就会获得12.5个比特币(比特币的数量会慢慢递减的)。按照现在的比特币价格,每十分钟就有人获得12.5w美元的呢,获利丰厚。
“挖矿”的实质就是争夺打包权
矿工不止一个,到底怎么决定给那个矿工呢?中本聪在设计比特币的区块链网络中,使用一种方法叫工作量证明(Proof Of Work,简称POW)来决定“打包权”,工作量证明,简单理解就是一份证明,用来确认你做过一定量的工作。监测工作的整个过程通常是极为低效的,而通过对工作的结果进行认证来证明完成了相应的工作量,则是一种非常高效的方式。
举个栗子:
举一个例子,我们去往企业进行应聘的时候,那么招聘方就会要求我们亮出相应的证据:毕业证、学位证、作品等。这些证据都有有一个特点,那就是招聘方很容易验证的,但是你需要付出大量的努力才能获取这种技能和证书。这就是工作量证明的一个简单的例子,争夺比特币打包权的需要拿出一个哈希码。这个哈希码运算最好的方法就是穷举法。最快获得这个哈希码的矿工就获得打包权。
那么,用什么运算是最好的呢?没错就是显卡。显卡天生就适应大规模的并行运算。如果CPU是几个博士,那么显卡一大群小学生。博士虽然厉害,但是哈希码运算对与他们来说就是小学生的四则运算,显卡足够应付。小学生胜在数量多,所以哈希码运算就比CPU快。所以大家都用显卡挖矿(矿机的本质就是一台电脑。不过插入很多显卡,并行运算能力最大化。
记账权是什么?
比特币的背后是一个公共账本,这个账本每十分钟需要重新记录一遍,而成功记账者会获得一定数量比特币的奖励。在比特币诞生之初,这个奖励是50个比特币,这一数字大约每4年减半,目前比特币的增长速度是每10分钟12.5个比特币。按现在比特币的市价,这个奖励价值12.5个*1.2万美元*6.54人民币/美元=100万人民币。可想而知,谁不想去记这个账呢?毕竟成功记账可以获得一百万的奖励呢。那怎么决定谁来记账呢?答案就是挖矿。谁先挖出来归谁。
为什么要让大家争夺记账权呢?
在具体解释记账权怎么争夺之前,我想先稍微解释一下为什么需要存在一个记账权的争夺。从比特币设计上来说,因为账本需要常常更新,所以要有人记账。但是不发工资又怎么会有人给你记账呢?所以比特币就设置了奖励机制,给成功记账者一定量的比特币奖励。既然有奖励,就会有人争夺奖励咯。
记账权怎么争夺呢?
其实很简单,就是算数:找一个数,使得它经过一次哈希映射之后足够小。因为哈希映射对于输入值很敏感,所以寻找合适的答案的唯一方法是暴力破解——一个一个数试。这里没有更聪明的办法,算得更快的矿工就更有机会获得记账权。多说一句。根据前面的描述,好像每次的问题都是一样的,那为什么需要每十分钟争夺一次记账权呢,直接用之前的答案不就好了么?其实,这里能被接受的答案,除了哈希值要足够小以外,还需要满足别的特定条件。答案的某个部分必须和上一次记账的部分信息一致。因为这部分信息只能在上一次记账结束时才能获得,所以新一轮的争夺是同时开始的:大家在上一次的记账结束后,依照约束,寻找新的答案。
要理解挖矿,先得理解分布式记账
假设有5个人,为了记录相互之间的资金往来,设立了一个账本,这个账本由张三管理并及时更新记录。这种形式就是“中心记账”。这种方式存在问题:张三可能会做假。例如给自己的账户上多加点,给别人的少加点。
如果每个人都有张三那样的账本,每次资金往来需要在每个人的账本上都进行记录,那么谁都无法做假了。这种方式就叫“分布式记账”。
比特币中的挖矿,其实就是参与比特币体系的分布式记账。系统每隔10分钟会产生一定数量的比特币,参与记账的工作量越大,获得系统新产生的比特币的机会就越大。因为参与记账有可能获得比特币,所以俗称“挖矿”。
区块链本身解决的问题是人为创造出来了,难度会随着矿工工作效率的提高而变难,本身的运算过程没有任何实际意义,比特币只是产于运算的一组数据。