区块链如何运作:区块、矿工与确认
用简单而准确的语言了解交易如何被打包成区块、如何通过工作量证明获得保护并得到确认。
学习目标
- 什么是交易、区块和区块链
- 矿工做什么,以及工作量证明的含义
- 为什么确认很重要,以及平均需要多长时间
- 为什么已确认的交易极难被更改
讲解
交易是一条消息,内容是“将这些币中的这一数额比特币转到这个地址”。它由发送方的私钥签名(第 4 课)。节点会检查签名是否有效,以及这些币是否已被花费过。
有效但尚未确认的交易会在一个称为内存池(mempool,memory pool)的队列中等待。每个节点都有自己的内存池。
区块是一组交易加上一个区块头。区块头包含对上一个区块的引用(一个“哈希”)。哈希是数据的简短数字指纹:数据哪怕只改变一点点,指纹也会完全改变。由于每个区块都指向前一个区块,这些区块便形成了一条链:区块链,即所有比特币交易的公开记录。
矿工是构建新区块的参与者。要添加一个区块,矿工必须找到一个哈希值低于目标数值的区块头。唯一的方法是进行海量的猜测尝试。这被称为工作量证明:结果证明了已经投入了大量的计算工作(和电力)。获胜的矿工会获得区块奖励:新创造的比特币加上区块中各笔交易的手续费。
网络的目标是平均约每 10 分钟产生一个区块。每 2,016 个区块(约两周),难度会调整一次:如果出块太快,找到区块就变得更难;如果太慢,就变得更容易。单个区块仍可能在一分钟后或一小时后才出现。
确认意味着你的交易已被纳入一个区块。其后每增加一个新区块,就多一次确认。要更改一笔旧交易,攻击者必须比网络其余部分更快地重做该区块及其后所有区块的工作量证明。确认次数越多,这就越难。许多服务会等待若干次确认(对于较大金额通常约为六次)后,才将一笔付款视为最终完成。请查看你的服务商采用的标准。
计算示例
假设示例:你可能需要等多久?一个小矿工多久能赢得一次?
假设条件:网络平均每 10 分钟恰好产生一个区块。实际时间会有波动。
- 每天区块数:24 小时 × 60 分钟 ÷ 10 分钟 = 144 个区块。
- 每个难度周期的时长:2,016 个区块 × 10 分钟 = 20,160 分钟 ÷ 60 ÷ 24 = 14 天。
- 交易首次被纳入区块后,等待 6 次确认的平均时间:约 6 × 10 分钟 = 60 分钟。如果你的手续费较低,在第一次确认之前你可能还要在内存池中等待。
- 一个假设的矿工控制着全网 0.5% 的算力。预期每天区块数:144 × 0.005 = 0.72 个区块。有些天一个也找不到,有些天能找到两个。这就是小矿工通常加入矿池并分享奖励的原因。
未考虑:挖矿的电力和硬件成本,以及随需求变化的手续费水平。
常见错误
练习活动
假设平均每 10 分钟产生一个区块。(a) 某服务要求 3 次确认。在首次被纳入区块后,平均大约需要等待多久?(b) 一周产生多少个区块?(c) 某矿工拥有全网 2% 的算力。它预期每周能获得多少个区块?
查看答案
(a) 第一个区块带来 1 次确认;还需要两个区块:纳入区块后约 2 × 10 = 20 分钟(如果交易进入下一个区块,则从广播时刻算起约 30 分钟)。
(b) 每天 144 个区块 × 7 = 1,008 个区块。
(c) 1,008 × 0.02 = 20.16,因此每周约 20 个区块,存在随机波动。
局限性:出块时间是随机的;平均值描述的是大量区块,而不是下一个区块。
要点总结
- 交易被打包成区块,每个区块指向前一个区块,从而形成区块链。
- 矿工通过工作量证明添加区块,并获得新的比特币和手续费。
- 网络的目标是约每 10 分钟一个区块,并每 2,016 个区块调整一次难度。
- 确认次数越多,付款越难被撤销;已确认的付款任何人都无法撤销。
下一步
在下一课中,你将了解新比特币是如何发行的,以及减半如何减少发行量。
自测
回答问题后核对答案。你可以随意重试多次。
供您自行复习的自动自测。您的答案在浏览器中核对,我们不会查看或评估。这不是考试,也不是资格证书。
您的进度
“已完成”仅表示您将本课标记为已学完,并不是对您理解程度的测试。 学习进度和笔记仅保存在此设备的此浏览器中,而非账户中。