1. 比特币挖矿介绍
使用比特币,创建货币的过程称为挖矿。比特币矿工使用专门的软件和硬件来验证比特币交易并解决复杂的数学问题,并以一定数量的比特币作为补偿。这就是比特币货币的发行方式,任何人都可以开采比特币。我们可以使用挖矿来创造或赚取我们自己的比特币。目前,大约每 10 分钟创建一个新区块,一个成功的矿工将获得 25 个比特币的奖励。在每 210,000 个区块添加到链中后,这个共同商定的价值将减半。
比特币挖掘涉及验证交易记录并将其添加到比特币的过去交易或区块链的公共分类账中。区块链用于确认交易已发生在网络的其余部分。
比特币节点使用区块链来合法或验证真正的比特币交易,并防止比特币的双重支出,即停止重新花费已经在其他地方花费的硬币。
比特币挖矿被故意设计为资源密集型和困难的,因此矿工每天开采的区块数量保持适度和稳定。单个块还需要包含工作证明才能被视为有效。每次收到区块时,其他比特币节点都会验证此工作量证明。比特币使用 hashcash 工作量证明功能进行工作。
挖矿的主要目标是促进比特币节点达成安全、防篡改的共识。挖矿也是用于将比特币引入比特币生态系统的机制:矿工赚取(如果有的话)交易费用以及新创建的比特币的“奖励或赏金”。
这既可以用于分发新硬币,也可以激励人们保护系统。
2.工作量证明
区块链中有一个很重要的概念,那就是工作量证明,矿工挖矿如何挖出一个新的区块,靠的就是工作量证明。工作量证明(POW)从字面意思就知道,就是证明一个人干了这份活,得到大家认可之后,产生一个新区块,然后给干这份工作的人一定的比特币作为报酬。
2.1哈希函数
哈希函数(Hash Function),也称为散列函数,给定一个输入x,它会算出相应的输出H(x)。哈希函数的主要特征是:
- 输入x可以是任意长度的字符串
- 输出结果即H(x)的长度是固定的,比特币采用的是SHA256
- 输入输出是不可逆的,通过输入x能到到H(x),但是知道输出H(x)无法计算得出输入是x
- 对于长度为n的字符串x,计算出H(x)的时间复杂度应为O(n),即字符串越长,则计算时间越久。
对于比特币加密系统使用的hash函数,需要具备以下几点要求:
- 免碰撞,即避免输入两个不同的数,得到一个相同的输出。
这一点是无法避免的,就拿比特币使用的SHA256算法,有2256种输出,如果我们进行2256+1次输入,那么必然会产生一次碰撞;甚至从概率的角度看,进行2130次输入就会有99%的可能发生一次碰撞。但是2256是非常大的,发现碰撞的几率也是极其小的,几乎不太可能存在碰撞的可能性。
2. 隐匿性,也就是说,对于一个给定的输出结果H(x),想要逆推出输入x,在计算上是不可能的。
2.2工作量证明的基本原理
有两类证明工作协议。
- Challenge-response协议假设请求者(客户端)和提供者(服务器)之间相互连接。请求者发起一个请求,提供者选择一个挑战,请求者为了这个挑战进行工作,这个响应被提供者发回并检查。由于挑战是由供应商当场选择的,其难度可以适当调整。请求者完成这份工作后,将自己的工作量的成果提交到服务端进行验证,通过则开始下面的工作。
- Solution-verification协议不会假定这样的链接:因此,在请求者寻求解决方案之前,必须自行解决问题,并且提供者必须检查问题选择和找到的解决方案。大多数这样的方案是无限的概率迭代过程。
是不是比较难懂,我们举一个例子,因为比特币采用的工作证明是第二种,所以我们举一个Solution-verification协议的例子。【重点理解这个例子】
给定的一个基本的字符串”Hello, world!”,我们给出的工作量要求是
可以在这个字符串后面添加一个整数值(在比特币中为nonce的标记),对变更后的字符串进行SHA256哈希运算,如果得到的哈希结果(以16进制的形式表示)是以”0000″开头的,则验证通过。为了达到这个工作量证明的目标。我们需要不停的递增值,对得到的新字符串进行SHA256哈希运算。
按照这个规则,我们预计需要经过4251次计算才能找到恰好前4位为0的哈希散列。
"Hello, world!0" => 1312af178c253f84028d480a6adc1e25e81caa44c749ec81976192e2ec934c64 "Hello, world!1" => e9afc424b79e4f6ab42d99c81156d3a17228d6e1eef4139be78e948a9332a7d8 "Hello, world!2" => ae37343a357a8297591625e7134cbea22f5928be8ca2a32aa475cf05fd4266b7 ... "Hello, world!4248" => 6e110d98b388e77e9c6f042ac6b497cec46660deef75a55ebc7cfdf65cc0b965 "Hello, world!4249" => c004190b822f1669cac8dc37e761cb73652e7832fb814565702245cf26ebb9e6 "Hello, world!4250" => 0000c3af42fc31103f1fdc0151fa747ff87349a4714df7cc52ea464e12dcd4e9
注意观察前几位
在这个例子中,数学期望的计算次数,就是我们要求的“工作量”,重复多次进行的工作量证明会是一个符合统计学规律的概率事件。
2.3比特币的工作量证明
比特币网络中任何一个节点,如果想生成一个新的区块并写入区块链
关键的三个要素是工作量证明函数、区块及难度值。工作量证明函数是计算方法,区块决定了输入数据,难度值决定了所需要的计算量。
1.工作量证明函数
用的SHA256
2. 区块
比特币的区块由区块头及该区块所包含的交易列表组成。区块头的大小为80字节,由4字节的版本号、32字节的上一个区块的散列值、32字节的Merkle Root Hash、4字节的时间缀(当前时间)、4字节的当前难度值、4字节的随机数组成。将整个80字节的区块作为输入
区块的大致结构如图所示:
第二行就是能证明工作量的hash值.
第六行是nonce就是计算的次数,越高则证明难度越大
3. 难度值
难度值(difficulty)是矿工们在挖矿时候的重要参考指标,它决定了矿工大约需要经过多少次哈希运算才能产生一个合法的区块。
比特币的区块大约每10分钟生成一个,新区块的产生保持都基本这个速率,难度值必须根据全网算力的变化进行调整。简单地说,难度值被设定在无论挖矿能力如何,新区块产生速率都保持在10分钟一个。
每2016个区块,所有节点都会按统一的公式自动调整难度,这个公式是由最新2016个区块的花费时长与期望时长(期望时长为20160分钟即两周,是按每10分钟一个区块的产生速率计算出的总时长)比较得出的,根据实际时长与期望时长的比值,进行相应调整(或变难或变易)。也就是说,如果区块产生的速率比10分钟快则增加难度,比10分钟慢则降低难度。
这个公式可以总结为如下形式:
新难度值 = 旧难度值 * ( 过去2016个区块花费时长 / 20160 分钟 )
工作量证明需要有一个目标值。比特币工作量证明的目标值(Target)的计算公式如下:
目标值 = 最大目标值 / 难度值
其中最大目标值为一个恒定值:
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
目标值的大小与难度值成反比。比特币工作量证明的达成就是矿工计算出来的区块哈希值必须小于目标值。
我们也可以简单理解成,比特币工作量证明的过程,就是通过不停的变换区块头(即尝试不同的nouce值)作为输入进行SHA256哈希运算,找出一个特定格式哈希值的过程(即要求有一定数量的前导0)。而要求的前导0的个数越多,代表难度越大。
2.4 工作量证明的定义
工作量证明是一系列数据片段,这些数据片段含有为满足某些要求而产生的资源密集型和耗时的数据。
产生工作量证明通常是一个低概率的随机过程,在产生有效的工作量证明之前需要进行大量的试验和错误。
此外,矿工还将获得用户支付的交易费用。费用是矿工将交易包含在他们的区块中的一种激励。未来,这些费用将占采矿收入的很大一部分。
有两种主要类型的挖矿:Solo 和 Pool。
单独挖矿
单独采矿是单独或您自己完成的。使用普通台式机或笔记本电脑的配置,由于采矿需要巨大的计算能力,因此需要数年才能获得实际的比特币。
矿池挖矿
我们可以使用的第二种方法是矿池挖矿。它涉及在任何一个不同的池站点注册一个帐户。这些网站使用他们的软件和硬件,汇集了很多人的计算机的挖掘工作。池中的每个人都会获得少量比特币作为他的份额作为奖励。对于个人而言,池化比单独挖矿更可取。
比特机(BitMinter)
BitMinter 是一个比特币矿池,旨在让任何人都能轻松制作比特币。它是最古老的游泳池之一。自 2011 年开通以来,已有超过 45 万人注册了账户。在早期,CPU 和 GPU 用于比特币挖矿。现在我们需要有专门的专用集成电路(简称 ASIC)机器来进行比特币挖掘。这些机器的速度由它们的哈希率给出,目前的数量级为 tera hashes/second 或 T H/s。
ASIC 在 2013 年接管了挖矿。用普通 PC 挖一个比特币需要相当长的时间。您将需要一台 1 TH/s 或更快的 ASIC 机器来在家中开始小型采矿作业。
如何使用BitMinter挖矿?
以下是使用 BitMinter 进行挖矿的过程 –
第 1 步 – 首先,我们使用我们的 google 或 yahoo 邮件帐户在 BitMinter 网站上注册,然后通过单击从 BitMinter 收到的邮件中的链接来确认我们的邮件 ID。
第 2 步 – 除了创建 BitMinter 帐户时创建的用户名之外,我们还使用工人名称和工人密码设置了一个工人帐户。我们将 Bitminter 客户端链接到工人帐户。
Step 3 – 然后我们通过填写帐户详细信息登录,如下所示。
第 4 步 – 在此之后通过打开 BitMinter 客户端应用程序,我们得到以下控制台,如下所示 –
第 5 步 – 我们按下引擎启动按钮开始挖掘。我们必须确保我们的机器的算力速度至少为 2500 万哈希/秒或 25M H/s。
第 6 步 – 我们还需要更改一些有关自动化的设置。我们可以让我们的机器整天整夜开着。
第 7 步 – 我们可以转到“设置”>“选项”来更改这些设置。自动设备是您设置的设备列表,以便它们在软件启动时自动启动。
第 8 步 – 我们将让我们的机器在夜间运行,从而增加制造更多比特币的可能性。
挖矿通过查找随机字符串来保护交易,这些字符串使块散列到具有许多前导零的值。零越多,解密就越困难。挖比特币并不意味着找到新的比特币,这些是由网络奖励完成对一个区块的所有未完成交易的验证并解决一些复杂的数学难题。
赚取比特币的方法
赚取比特币的最佳方式是找到并执行以比特币支付的工作。我们也可以购买比特币。最后,如果我们想通过艰苦的方式赚取它们,我们应该去挖矿。要挖掘比特币,我们可以在网站上购买一些便宜的硬件。
更深阅读
“挖矿”这个词有点误导。 一般意义的挖矿类似贵金属的提取,更多将人们的注意力集中到创造每个区块中获得的奖励。 虽然挖矿能够获得这种奖励作为激励,但挖矿的主要目的不是这个奖励或者产生新币。 如果您只是把挖矿视为创建新币的过程,则会将比特币系统中的这个手段(激励)作为挖矿过程的目标。 挖矿最重要的作用是巩固了去中心化的清算交易机制,通过这种机制,交易得到验证和清算//清除。 挖矿是使得比特币与众不同的发明,它实现去中心化的安全机制,是P2P数字货币的基础。
挖矿确保了比特币系统安全,并且在没有中央权力机构的情况下实现了全网络范围的共识。 新币发行和交易费的奖励是将矿工的行动与网络安全保持一致的激励计划,同时实现了货币发行。
提示:挖矿的目的不是创造新的比特币。 这是激励机制。 挖矿是一种机制,这种机制实现了去中心化的安全。
矿工们验证每笔新的交易并把它们记录在总帐簿上。每10分钟就会有一个新的区块被“挖掘”出来,每个区块里包含着从 上一个区块产生到目前这段时间内发生的所有交易,这些交易被依次添加到区块链中。我们把包含在区块内且被添加到 区块链上的交易称为“确认”(confirmed)交易,交易经过“确认”之后,新的拥有者才能够花费他在交易中得到的比特币。
矿工们在挖矿过程中会得到两种类型的奖励:创建新区块的新币奖励,以及区块中所含交易的交易费。为了得到这些奖 励,矿工们争相完成一种基于加密哈希算法的数学难题,这些难题的答案包括在新区块中,作为矿工的计算工作量的证 明,被称为”“工作量证明”。该算法的竞争机制以及获胜者有权在区块链上进行交易记录的机制,这二者是比特币安全的基石。
新比特币的生成过程被称为挖矿,是因为它的奖励机制被设计为速度递减模式,类似于贵重金属的挖矿过程。比特币的货币是通过挖矿发行的,类似于中央银行通过印刷银行纸币来发行货币。矿工通过创造一个新区块得到的比特币数量大约 每四年(或准确说是每210,000个块)减少一半。开始时为2009年1月每个区块奖励50个比特币,然后到2012年11月减 半为每个区块奖励25个比特币。之后在2016年7月 再次减半为每个新区块奖励12.5个比特币。基于这个公 式,比特币挖矿奖励以指数方式递减,直到2140年。届时所有的比特币(20,999,999,980)全部发行完毕。换句话说 在2140年之后,不会再有新的比特币产生。
矿工们同时也会获取交易费。每笔交易都可能包含一笔交易费,交易费是每笔交易记录的输入和输出的差额。在挖矿过 程中成功“挖出”新区块的矿工可以得到该区块中包含的所有交易“小费”。目前,这笔费用占矿工收入的0.5%或更少,大 部分收益仍来自挖矿所得的比特币奖励。然而随着挖矿奖励的递减,以及每个区块中包含的交易数量增加,交易费在矿 工收益中所占的比重将会逐渐增加。在2140年之后,所有的矿工收益都将由交易费构成。