比特币挖矿

准备发文章前,刚好在好友东邪惜独的文章里看到黄仁勋和马斯克对比特币挖矿的观点,一并放这儿。

两位大佬将比特币向来被人诟病的能源消耗叙述成是比特币的核心价值,这段位实在是“高”

能源消耗是比特币去中心化和安全性的成本,而非其价值的来源。


上一篇比特币是有锚的提到了比特币挖矿,今天这篇详细说一下挖矿。

推荐大家观看这个视频:

从零开始初识比特币,实战演示比特币挖矿,新手小白也能看懂的比特币网络运行流程 https://www.youtube.com/watch?v=5hgdekVZb3A

比特币是一种基于密码学的电子货币,它旨在建立一个去中心化的电子记账系统。

什么是去中心化记账?

在传统的金融系统中,记账工作由银行这样的中心化机构完成,我们信任银行是因为其背后有国家信用。

而比特币的构想是,不需要中心化机构,每个人都可以参与记账,且每个人的账本都是公开的。

当用户之间发生交易时,例如 A 支付 10 个比特币给 B,这笔交易记录会广播到网络上的所有人。

这些交易记录会被打包成一个“块”(区块),这个块会被链接到以前的交易记录上,形成一个“区块链”。

比特币这个区块链本质就是一个去中心化的分布式记账系统。

为什么要记账?

在去中心化系统中,需要激励机制让人们愿意花费资源去记录与自己无关的账目。

因此,比特币系统设计了“记账奖励”:

  • 手续费收益: 交易发起者在支付比特币时,必须多支付一点点,作为手续费奖励给最终打包这笔交易的人。

  • 打包奖励(区块奖励): 成功打包区块的那一个人,会获得额外的打包奖励。

中本聪设计这个系统时,最初每打包一个区块奖励 50 个比特币。

为了控制总量,这个奖励每四年减半,最终确保比特币的总量约为 2100 万个。

正是因为有手续费和打包奖励,所有人都抢着去打包新的区块。

工作量证明

由于只有一个人能成功打包区块并获得奖励,系统必须决定将这个权利交给谁。

中本聪采用的办法是“工作量证明” ,Proof of Work,简称 POW 机制。

工作量证明要求每个参与者去做一个“很难的数学题”

谁先做出来,谁就有权利打包,并获得奖励。这个过程就被称为“挖矿”

这个数学题的难点不在于脑子聪明,而在于它无法通过直接计算得出答案,只能依靠电脑不断尝试,即暴力破解。

因此,挖矿的成功率取决于矿机的计算速度。

哈希函数和随机数

这个“很难的数学题”是基于一种叫做 SHA256 的哈希函数。

SHA256 哈希函数的特点是能够将任何长度的输入字符串转化为一个固定的、无规律的 256 位二进制数。

正向计算容易,知道输入,计算输出很快。

反向计算困难,知道输出,反推输入是什么,几乎是不可能的。只能一个一个去试,直到试出符合条件的输入。

挖矿的步骤

  1. 矿工需要将一系列信息组合成一个字符串,包括:前一个区块的头部信息、自己打包好的交易账单信息、时间戳,以及一个至关重要的随机数(Nonce)。

  2. 矿工对这个字符串进行两次 SHA256 运算,得到最终的哈希值。

  3. 系统要求算出的这个哈希值必须满足一个特定的难度条件。例如,这个 256 位的二进制数前 N 位必须全部是 0。

  4. 矿工无法改变账单或前块信息,只能不断地改变输入字符串中的随机数。他们从 0 开始尝试,如果不符合条件,就试 1、试 2、试 3……不停地试,直到算出的哈希值满足前导零的要求。

  5. 第一个试出正确随机数、并满足前导零条件的矿工,就成功打包了这个新区块,并获得了打包奖励。

难度调整与算力竞争

比特币系统的设计目标是保证大约每十分钟出一个新块。

为了达到这个目标,系统会动态调整难度。

哈希值前面 0 的个数 N 越多,难度就越高。

如果全球的矿机数量和计算能力(算力)增加,系统就会自动增加 N 的数值,要求更多的前导零,从而让找到正确答案所需的平均时间回到 10 分钟。

矿工无法让自己运气变好,他们能做的就是购买更多的矿机,提高算力,从而在单位时间内尝试更多次随机数,以增加自己第一个找到答案、挖到矿的概率。

可视化的比特币账本工具

https://mempool.space/zh/mining 这个网站提供了对比特币账本的可视化展示。

当前比特币已经挖了不到 92 万多个区块。

在我截图的这个时刻,

4 分钟前挖出了第 927595 个区块;

5 分钟前挖出了第 927594 个区块;

10 分钟前挖出了第 927593 个区块;

27 分钟前挖出了第 927592 个区块;

……

每挖出一个区块的时间不是严格的 10 分钟,但是平均时间大概会控制在 10 分钟左右。

比特币网络设计为每隔 2016 个区块自动调整一次挖矿难度,大概是两周时间。

距离下次难度调整还需要挖出 1781 个区块,预计下次调整会把难度提高。

难度调整是一个关键的自我调节机制,确保比特币的出块速度保持稳定。

无论全球有多少矿工加入或退出,网络都要努力维持平均 10 分钟产生一个新区块的速度。

如果过去 2016 个区块的平均出块时间快于 10 分钟,即总算力增加了,那么网络将提高难度。

如果过去 2016 个区块的平均出块时间慢于 10 分钟,即总算力减少了,那么网络将降低难度。

距离下次的奖励减半还需要挖出 12.24 万个区块,大概是在 2028 年 4 月 11 日。

最近的难度调整记录,图上的单位 T 是巨大的算力单位,用于衡量比特币网络当前挖矿的难度等级。

万亿次哈希运算

148.2 T 是难度单位,它反映了找到一个有效哈希值所需的计算次数的难度等级,再乘以常数 ,就是预计平均挖出一个矿需要进行的哈希运算次数。

当前的难度是 148.2 T,当前全网的算力是 1.12 ZH/S。

Z 代表 Zetta,这是一个国际单位制词头,表示 

H 代表 Hashs,哈希运算次数。

s 代表 Second,秒。

1.12 ZH/s 表示全网算力是每秒可以进行  次哈希运算。

我们计算一下平均挖出一个矿需要的耗时:

出块时间秒难度全网算力

难度: 


全网算力: 


常数 : 约等于 

代入公式:

出块时间秒

出块时间秒

出块时间秒秒分钟

最近 144 个区块的奖励,大头就是打包每个区块的 3.125 个 BTC 奖励,144 * 3.125 = 450。

多的 2.61 个 BTC 就是手续费奖励,2.61 / 144 = 0.0181,平均打包一个区块的手续费奖励只有 0.0181 个 BTC,跟 3.125 个 BTC 的打包奖励相比占比非常小。

这里有一个单位聪,这里的聪就是中本聪的聪,是比特币的最小可分割单位。

1 个比特币 = 1 亿聪

最近一周总共挖出了 1054 个区块,由 21 个矿池挖出,其中 Foundry USA 和 AntPool 这两个矿池接近挖出了 50% 的矿。

最近得区块分别被哪个矿池挖出了,每个区块活动的总奖励。