首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

越努力,越幸运——比特币挖矿奥义

比特币的挖矿事业

管比特币不同于传统货币,但是也需要具备货币的基本功能。我们需要去发行比特币,进而才能使用比特币进行交易。换句话说,我们需要创建比特币(让一些比特币凭空产生)和转移比特币(用户A将一定金额的比特币支付给用户B)。

什么是挖矿

矿是比特币世界里非常流行的一个词,第一次听说这个词的时候,我满脑子是黄金矿工的画面。虽然挖矿这个词语非常生动,但是我认为容易给人们带来误解,实在是难以将现实中的挖矿和比特币中的挖矿完美联系起来。事实上,在比特币的世界里,”矿工“指的是具有计算能力的机器节点,“挖矿“指的是”矿工“们努力让自己创造的某个区块能够被连接到区块链的末尾上。

之前我们提到,比特币的账本就是区块链,比特币的创造和交易都需要区块来记录。所以挖矿就是在争夺账本上最新一页的记录权。

区块的内容

之前的文章里我用了一个蹩脚的比喻,将区块链上的区块比作糖葫芦上的山楂。而真实的区块大致包含这些信息:

暂时看起来有点复杂,那么先忘掉它,重点关注在挖矿中需要在意的内容:

交易记录(Tx):每个区块需要记录大约10分钟内进行的交易,这些交易需要包含的主要信息是交易的双方和交易的金额。在区块中,我们给予记录该区块的矿工一次发币权,让他能够将第一条交易记录写为”上帝给了我12.5个比特币“,从这个区块开始,比特币的总量就会增加12.5个。这样的方式把比特币的发行和交易统一了起来,发币成了一种特殊的交易。

上一个区块的哈希值(Pre Hash):会在下文中解释。

随机数(Nonce):会在下文中解释。

为什么要挖矿

于比特币而言,挖矿维持了比特币系统的运作。前面提到,比特币的创造和交易都需要区块来记录,如果矿工不愿意挖矿了,那么比特币将无法用于交易,比特币系统自然也会崩溃。

对于矿工节点而言,无利不起早,矿工愿意自发为比特币系统提供自己的运算资源,必然是有利可图的。实际上,某个区块只能被一个矿工所记录,这个矿工可以获得该区块的发币权和交易手续费。

在初期的时候,每个区块可以发行50个比特币,根据中本聪的设定,这个数字每四年减半,所以目前每个区块可以发行12.5个比特币。但是一个区块中存储的交易的手续费加起来也不过0.x个,所以当下矿工收入的主要来源是前者。随着减半的继续,未来比特币将不再发行,最终比特币约会有2100万个。

哈希函数的加密性

希函数是一类函数,狭义上讲,这类函数主要具有以下性质:

求解是不可逆的。函数本身是从x到y的映射,也就是说给定一个x,我们可以根据函数规则求出y值。有些函数也可以写出反函数,给定y值也可以求出x值,比如最简单的一元一次函数 y = ax + b。但是哈希函数就无法做到逆向求解。

高灵敏性。哪怕函数的输入改变很小,函数的输出也会有很大的不同。

以上两个性质用于单向加密。许多网站的用户密码会使用哈希函数进行加密,然后再存储在数据库中。假如用户名A的密码是123456,使用md5哈希函数加密,加密结果是e10adc3949ba59abbe56e057f20f883e,这是一个十六进制的数字。那么即使数据库失窃,由于哈希函数具有以上两个特性,拿到数据库的人也难以根据加密结果还原出原始密码123456。

在区块链中,每个区块也会使用特定属性计算出哈希值,其中包括上一个区块的哈希值和随机数。之所以要用上一个区块的哈希值作为当前区块计算哈希值的一个输入,是为了保证区块链的不可篡改性。如果某个区块的内容被篡改,那么这个区块后所有的哈希值都将有很大的变化,因此很容易被检测出来。

挖矿——证明你的工作量

工们努力地收集新发生的交易,构建最新的区块,希望自己构建的区块能够成为入选区块链的区块。那么谁才能被选中呢?区块链用了一种叫做工作量证明(Proof of Work)的方式,让矿工节点们达成谁才是天选之人的共识。工作量证明从字面理解就是,哪个矿工付出的工作量大,谁就是这个天选之人。那么如何证明你的工作量大?通过完成这样的一个任务证明:请创造一个哈希值小于某值的区块。

前面我们提到区块中有随机数这个属性,并且这个属性参与区块哈希值的计算,其作用就是让矿工通过不断改变这个随机数的值,进而得到不同的哈希值。但是由于哈希函数的高敏感性,你会得到完全不同的哈希值,例如123457的md5哈希值是f1887d3f9e6ee7a32fe5e76f4ab80d63,完全不同于123456,输出结果十分随机。这件事说明什么?说明你想得到一个小于某值的哈希值,只能不停暴力尝试,没有什么捷径。如果你能得到这个哈希值,就基本可以说明,你比别人付出的更多(你的矿机的CPU运算速度更快)。可以说,挖矿就是在掷骰子。

很显然,任务中所需的哈希值越小,这个任务就越困难。这么这个值是如何生成的呢?由于比特币中设定了区块产生的间隔时间大约是十分钟,要想保证这个10分钟基本不变,就需要根据目前比特币整个网络的运算能力动态调整挖矿难度。比特币基本的策略是:每2016个区块产生后改变一次挖矿难度,根据这2016个区块的产生时间,如果过长便降低难度,如果过短便提高难度。

如果你的矿机最早完成了这个任务,那么就赶紧把这个区块发送给其他矿机,告诉他们:我不针对谁,在座各位都是垃圾。他们收到了这个消息后,就会对你表示愤怒,但是又无能为力,只能放弃了这个区块的记录权,因为下一个区块还在等着他,他会开始下一个区块的争夺。事实上,存在这样一种情况,有两个或多个矿工都完成了任务,就会有两个不同的区块被生成,这种情况将会在后续文章中讨论。

如何成为天选之人

前比特币网络的算力已经非常之大,所以挖矿难度已经被调整到一个很大的数字。所以对我们个人矿机而言,几乎没有挖到矿的可能,不要总是指望自己是个天选之人。根据比特币的奖励机制,矿工只能从挖矿中获取收益,所以个人矿工的收益基本为0,没有收益的事情自然没有人去做。

尽管你无法成为天选之人,但是其实你可以成为天选的人群。目前有很多知名的矿池,每个矿池由非常多的矿机组成,A可以贡献自己算力为5的矿机,B可以贡献自己算力为10的矿机,通过一定的机制让这些矿机协同工作,如果自己的矿池挖到矿,那么矿池中的矿机就根据算力按比例分配获得的比特币。人多力量大啊。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180317G02ULS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券