我听说准备好硬件的人就可以进行比特币挖矿了……但究竟什么是比特币挖掘(采矿)呢?它是否像真正的采矿一样运作?我的意思是,就像你在进行物理采矿。
最佳解决思路
挖矿是确保交易并将其交付到比特币公共链中的过程。它需要赢得类似一种计算彩票的东西,其中你执行的每个哈希就像是购买一张票。比特币协议目前允许产生区块的矿工获得50比特币以及矿工选择包括的交易的任何交易费用。
比特币系统使用挖掘过程来生成硬币,安全交易和发布交易。
上面的说法完全准确,这里试着用更简单的语言来描述:
比特币运作的方式是:不是有一个中央机构来保证和控制货币供应(就像大多数政府为其本国货币所做的那样),而是这项工作遍布整个网络。比特币的大部分繁重工作都由矿工(”miners”)完成。
矿工们收集网络上的交易(比如“Alice支付Karim 10个比特币”和“Liam支付索非亚8.3个比特币”),并将其捆绑成名为blocks的大捆。这些块被串联在一起,形成一个连续的,权威的记录block chain,它不允许任何冲突的交易。这是必要的,因为如果没有它,人们就可以在two different recipients上签署相同的比特币,比如在支票上写入比您帐户中更多的钱。块链让你确切地知道哪些交易数和可以信任(所以没有错误的检查!)。
比特币确保只有一个区块链的方式是让区块真的很难生产。因此,矿工不必随意制作块,而必须计算符合特定标准的块的cryptographic hash。 Bitcoiners将此过程称为哈希散列(“hashing”)。找到一个“足够好的数字”的加密散列的唯一方法就是尝试计算大量散列,直到你幸运并找到一个可行的方法。就像上面提到的彩票(”lottery”)一样,因为成功创建块的矿工是rewarded some bitcoins according to a preset schedule。根据块出现的频率不断调整哈希标准的难度,因此会有更多的竞争,也等于需要更多的工作来找到块。现代GPU每秒可以尝试数以亿计的哈希值,因此要在这场竞赛中找到具有竞争力的哈希值,需要专门的硬件,否则他们往往会比在彩票(“lottery”)上花更多的电力。
除了散列标准之外,块只需包含有效的非冲突事务。因此,矿工的另一个主要任务是仔细验证所有进入他们区块的交易,否则他们不会为他们的工作获得任何奖励!
由于所有这些工作,当比特币客户登录网络时,它可以信任最难生成的区块链(因为这显然是大多数矿工正在进行的)。如果伪造的区块链与真正的区块链竞争(比如有人假装他们没有真正向索非亚提供那些8.4比特币并且他们仍然拥有它们),那么欺诈者将不得不做出与整个其余部分一样多的工作网络,使他们的区块链看起来值得信赖。所以基本上,通过哈希来寻找块的紧张工作确保网络免受欺诈。当然,还有一些漂亮的代码可以指出如何在冲突交易之间进行选择;以及如果两个人同时找到有效的块,该怎么办。
最后一件事:为什么叫做挖矿(采矿)?在最初的比喻中,执行这项重要工作的人员与金矿工从地下挖金的比较,以便每个人都可以使用它。但事实上,比特币矿工(”miners”)只是在非常专业化的硬件上运行计算机程序,从而实现了网络安全保护过程的自动化。总结一下,这个软件
-
收集来自网络的交易
-
验证它们,并且不允许冲突
-
将它们放入名为区块(blocks)的大捆,及区块链
-
一遍又一遍地计算cryptographic hashes,直到找到一个“足够好的数”
-
然后将该块提交给网络,将其添加到区块链中并获得回报。
简而言之,这就是比特币挖矿!
次佳解决思路
挖矿是通过计算寻找nonce
的工作,以便sha256(sha256(data+nonce)) < difficulty
其中
-
nonce是矿工自由选择的一个整数(这个nonce的选择和检查条件(<difficulty))是否被满足包括工作
-
数据是对块(事务)和上一个块的散列内容的散列
-
sha256()是SHA-256密码散列函数(wikpedia SHA-2 article)
-
难度是由比特币网络的节点共同调整以适应网络计算能力变化的值,以便网络每10分钟找到一个块
由此产生的随机数是工作的证明:因为如果没有主要尝试不同的随机数并计算两个散列函数,发现随机数是不可能的,找到满足条件的随机数就证明了这项搜索和计算工作实际上已经完成。
这是比特币解决双重支出问题的核心思想:由于在数据中包含了前一个块的散列(这将块链接起来形成一个链),以及网络的诚实节点始终在其上工作最长的链块,double spending攻击包括计算(并稍后发布)比"honest chain"(包含应该撤销的事务)长的秘密分叉块链。由于需要这样做的工作,如果攻击者具有比其他网络更强的计算能力,则只能获胜。由于使用这种计算能力来诚实地挖矿可能比拉动double-spend更有利可图,因此执行double-spend攻击的动机很低。
另外,Mining只是做计算工作来保护交易块链。采矿的副作用是创建新硬币并通过签署交易赚取额外的资金。