挖矿

小天
• 阅读 439

区块链 - 挖矿

背景

上个章节我们讲到区块链的链表结构,以及链表结构如何存储交易信息。今天我们来介绍挖矿。“挖矿”这个词非常的形象,但是却没有很好地从结构上表达其作用。更贴切的表述是:用以维护区块链的网络节点。请注意,此处的“节点”可不是区块链链表结构里面的“区块”。

流程

当支付发生的时候,比如“A付给B1个BTC”,钱包应用程序会签署一个交易并且向全区块链网络广播。广播的内容,包括如何加密,我们会放到后面的章节。交易被广播后,会先徘徊在“未确认交易”的池子里,等待矿机提取。这个池子是网络上等待处理的未确认交易的集合。

网络上的矿工从池子中选择交易并将它们形成一个区块。一个区块基本上是交易的集合,但在此时,仍然是未确认的交易。每个矿工都构建自己的区块。多个矿工可以选择将相同的交易包含在他们的区块中。在这个过程中,矿工会对交易进行有效性检查,比如支付者是否有足够的资金等。

接下来,矿工会尝试把区块添加到链上。但是,正如前面所说,可能会有多个矿工尝试添加区块,怎么解决争抢问题呢?答案是每个矿工在添加区块前,必须要做一道很难的数学题。为了解决这个数学问题,参与的矿工均使用了大量的计算能力(因此消耗了大量的电力),而性能更好的矿工有更大的概率胜出。胜出的矿工会将这个区块及其签名广播给所有其他矿工。我们会在下个小节详细介绍这道数学题。

其他矿工通过广播获取新签名的区块并验证其有效性。如果有效,其他矿工同意该区块可以添加到区块链,并将该块添加到区块链,然后继续广播到网络上的所有其他节点。对于比特币区块链来说,每个节点都会保存完整的区块链副本,也就是说,从创世区块到如今的所有交易记录。

当一个区块添加到链上后,在其之后添加的区块都算作对其的确认。比如,区块链总长为100,某一交易在第95区块中,那么该交易有 5 个确认。之所以称为确认,是因为每次添加一个区块时,区块链都会再现完整的交易历史,也就是说该交易被确认了5次。一般来说,确认次数越多,嵌入区块链就越深,就越难以改变从而越稳定。

数学题

前面略过的数学题部分,在这我们详细介绍。每个矿工在尝试将区块添加到区块链时面临的数学问题是为其区块中的数据找到签名。签名其实就是一个哈希值,但是必须以一定数量的连续零开头

对于一个区块而言,交易记录是固定的,产生不同的签名呢?矿机会在区块中添加一个随机数,因为随机数字段的加入,通过更改随机数就可以产生不同的签名,直到签名符合一定数量连续零开头的要求。在这个过程当中,矿机除了不断地尝试,别无他法。 挖矿

一般来说,性能更好的矿工会有更大的概率胜出,所以该过程也可看做为区块链筛选出性能更好的矿工。此外,连续零个数要求,也称之为挖矿难度,是可以根据矿机多少进行动态调节的。如果矿机供大于求,难度就会上升,反之下降。

无效区块

在区块形成过程中,并不是所有的区块都是有效的,或者说是正确的。无效区块主要有以下因素造成:

  • 不完整的交易记录:比如某一矿工从未确认交易池子里拿到某一交易但是并未正确添加在区块中,或者某一矿工在未收到已添加新区块前仍然尝试添加该区块。
  • 恶意攻击:比如某一矿工的区块中被黑客添加了虚假交易信息。

区块链对此解决的方法依然是“最长链原则”,较短的分叉会被逐渐抛弃。其逻辑内涵是“大多数人认为是对的,那就是对的”。

挖矿

一般来说,区块嵌入链越深(越多确认)就越稳定。相反,新添加的区块有很大不确定性,也就是链上较新的区块往往有大量分叉。所以,比特币要求6个区块才能真正确认一个交易。

小结

“挖矿”的本质,其实是不同节点争抢式地添加区块的过程,区块中包含最近的交易记录。其争抢的过程可以理解为“做一道很难的数学题”,性能更好的矿机有更大的概率取胜。挖矿的收益现如今由未挖出的比特币支付(“挖矿”一词的由来)。当未挖出的比特币耗尽时,大概率会由交易抽成支付。因此,挖矿收益可以理解为交易费用。

点赞
收藏
评论区
推荐文章

暂无数据

小天
小天
Lv1
男 · Meta · 软件工程师
兴趣是最好的老师。
文章
7
粉丝
7
获赞
3