# 挖矿的本质

去中心化的区块链,是元宇宙中不可忽视的一个点,所以先把这个问题搞清楚。 (在这里以比特币为例)

# 挖矿是在挖什么?

作者:闪电,比特币和区块链专栏作者。 链接:https://zhuanlan.zhihu.com/p/28541477 来源:知乎

# 第1章 比特币世界里的会计

在理解什么是挖矿之前,我们先来理解我们日常经济活动中的银行的一个业务。我们使用银行账户进行汇款、取现和网银支付这些活动,银行就会在我们的账户上进行记账,银行是我们的会计。正因为银行能够帮全国人民记账,人民币这套货币系统才得于正常运行。帮用户记账是银行的最基础的功能。

比特币也是一套货币系统,用户使用比特币来支付,哪谁来帮用户记账呢?谁来充当比特币世界里的“银行”角色呢?答案是矿工。

我们知道银行帮我们记账是包含了一整套软件,还要雇一堆会计来对账,还要买大量的计算机来运行这些软件和让会计来操作对账。哪比特币世界里的矿工具体是一个什么样的物理实体呢?它们不会是怪物吧。

# 第2章 矿工长什么样子

通过本系列的第一篇文章,我们知道了比特币是一个点对点的分布式计算系统。在那一篇文章里我们提到了一个最简化的比特币模型,是由10台电脑组成一个点对点的分布式计算系统,也就是比特币系统。这里的10台电脑都是矿工,当然也都是用户。

也就是说在最简化的比特币系统中(当年中本聪刚发明比特币时,仅有少数几个人使用比特币,那时就是最简化的比特币系统),矿工就是一台简单的PC机。矿工的硬件是PC机,软件是一个比特币钱包。它不需要人工对账,一切都是由这个网络自行记账,从来不会出问题,根本不需要也不可能需要人工对账。

现在比特币系统演化到了非常复杂,矿工早已不能是由简单的电脑来担当了,而由专业的硬件开发商做的矿机来担当。

因为矿机需要消耗电来计算,有人为了挖矿就将一个水电站包下来挖矿,使用一排一排的厂房来摆矿机,非常的疯狂。如果你以前没有见过矿机,让你现在亲临一个矿场,你一定会大吃一惊。

而挖矿的软件也变的更复杂,最简化的比特币系统模型只需要钱包,但现在需要矿池和钱包共同运算。

# 第3章 矿工在干吗?

在第1章里我们讲到了矿工其实就是和银行干着类似的事情——记账。这一章我们详细点表述这些疯狂的硬件和软件做成的矿工到底在干吗。

我们还是先讲一个我们生活中相似的案例来做类比。一家公司的会计和出纳每天都会收集员工的报销票据,然后整理填写成一本一本的账本,堆进公司的会计存储室。

类似的,在比特币世界里是这样的。

我们普遍用户使用比特币发起交易,一笔交易本质上就是一个大约200到500k左右数据。用户将交易广播到比特币网络,矿工节点就会收到交易。矿工会将他收到的交易都打包进一个叫区块的数据块,这个数据块目前平均大小是1M,一般能包含几百到几千笔交易。每新打包一个区块都会拼接到以前的区块,这样整个区块数据块就构成一条链,这就是区块链。

矿工就是干这事,收集用户发起的交易,然后打包成区块,然后拼接成区块链。

这个区块链就是比特币系统里的总账本,任何人使用比特币交易都会被记录到这个账本里,这个记录的工作就交给矿工来完成。整个收集、打包、拼接的过程全是由软件自动完成的,不需要人工干预。目前这个区块链几乎已经超过130G的数据量了,收集了从第一笔比特币交易到现在总共超过2.46亿笔交易。

当然矿工还会对交易的合法性进行验证,谁发起欺诈性的交易是骗不了矿工的。但矿工的核心工作就是做会计。

# 第4章 矿工为什么会干会计?

上面讲到了运行矿机需要消耗电,甚至有人会包下整个水电站来运行矿机,这可是很费钱啊。而且矿机本身是非常贵的,我们买一台PC机好的也就五六千块,一台图上的矿机也是几千块啊。哪为什么会有人花这么多钱去挖矿呢,对他有什么好处呢?

好处大大的有。

比特币这套系统为了鼓励人们去挖矿,设定了一个规则:只要你遵守规则成功抢到一次记账的权力,那系统就会给你奖励一些比特币。(这个“一些”最开始在2009年是50个比特币,然后平均四年半减半,到了2012年变成了25个比特币,现在变成了12.5个比特币。)这个叫区块奖励。

参与挖矿的人就是为了抢夺这份区块奖励,才大量购买矿机,甚至到了直接购买水电站去挖矿。

另外区块奖励也是比特币发行的策略,天底下所有的比特币就是从区块奖励开始诞生的。又因为每隔四年半奖励会减半,到了2140年,理论上比特币总量将无限接近2100万个。当然因为早期会有大量的人因为不在乎会丢失比特币,所以最终问题肯定达不到2100万个。

现在的问题是,系统如何决定将区块奖励发给哪一个矿工呢?

# 第5章 区块奖励凭什么发奖?

我们评奖学金是凭学习成绩,矿工是凭什么拿到区块奖励的呢?

说来很奇怪,和运气非常相关。

比特币系统的记账权力是要争夺的,争夺的规则其实非常简单,就是大家抛硬币,谁先抛出合乎规则的硬币序列谁就赢。这就是矿机运算的核心内容,矿机算的东西本质上是抛硬币。

比特币矿机计算的东西专业术语叫计算区块头信息哈希值小于某个数值的数。其本质上就是一个随机数。谁先算出这个数,就可以获得接下来给比特币网络记账的权力。也就可以拿到区块奖励,和相应的交易转账手续费。

可以这样来形象理解,挖矿的计算过程,比特币这套系统每10分钟会给一道题,这道题就是让大家去抛硬币,胜出规则是,连续抛出正面向上多少次就算赢。

所以谁的计算设备抛硬币抛的快谁就更能抢到比特币的区块奖励,这个抛硬币的快慢叫算力。所以也不能说是靠运气哈,还得靠实力,虽然这个实力是由抛硬币这种碰运气机会组成的。

目前全世界在玩这个抛硬币游戏的计算机的抛硬币能力是每秒能抛 1.6*10^18次方。这是非常非常非常大的。

# 简单总结

区块链发明者只是发明了一个智能合约,全世界所有的矿机按照这个合约规范,接入到区块链,主动去提供支撑区块链运作的庞大算力基础。

在区块上产生的每一笔交易,都会由矿工完成计算、记录、广播这一系列过程。一个旷工在完成一笔交易的操作之后,会拿到手续费,也就是区块的奖励。所以挖矿,实际上是为了去获取到这笔手续费。简单来说,就是为区块链上的所有交易者打工。

但不是一笔交易,都由每个矿工去完成,需要矿工去争夺这个记账权利,最终确认一个或几个旷工去完成。

# 账本数据存在哪?

作者:黑锅王子 链接:https://www.zhihu.com/question/444956455/answer/2267321122 来源:知乎

从概念上说,区块链的数据是存储在链上的;从物理上说,区块链的数据是存储在每个节点本地的机器的(当然了,现在有的节点是部署在云服务器上的,那数据也就在相应的云端了)。

这是最早比特币时代诞生的范式。

以比特币为代表的第一代区块链项目,不同的节点除了算力大小不同外,在其它方面都是基本上一致的。

每个节点都会在自己本地机器存储历史的和最新的区块数据,只不过这个机器,最早是计算机,后面成了专门的矿机。

这种存储方式下,因为每个节点都对数据进行了记录,因为,当少数节点试图篡改数据的时候,它也只能篡改自己本地存储的数据,而其它节点通过和自己的记录对比发现数据有篡改时,就会拒绝接受错误的数据。

所以比特币网络一直有一个51%攻击的说法,意思就是说只有有超过一半的节点都串通了一直对数据进行篡改,才能够成功。

其实也就是生活中少数服从多数一样的道理。

这样的好处是足够的去中心化,不过随着技术和应用的发展,这种存储方式的弊端也逐渐浮现,就是资源利用率低下,因为区块数量是只增不减的,所以存储区块链数据所需的硬盘空间也越来越大,以比特币为例,截止2020年10月的时候,一个完成的比特币区块链数据包大小已经超过了300GB,并且每个节点都需要存这么300多G的数据,想想是不是还是很费事的。

所以,为了解决,或者说缓解这个问题,先后有很多大牛开始了一系列的探索和实践,大概有以下两种思路:

  • 一种是对节点进行分类,有的节点来存储完整的区块链数据,即全节点;有的节点只存储交易的哈希(你可以理解为数据的目录),即轻节点,当轻节点需要数据本身的时候,可以根据目录索引去全节点调取相关的数据。至于谁是全节点、谁是轻节点,不同的链可能规则不一样,可以是自发的,比如比特币网络,矿工或者交易所出于安全和效率的考虑,一半都会自己搭建全节点,而一般用户日常偶尔使用,就可以只部署轻节点;也可以是通过投票选举的,比如现在很多DPoS型的公链,验证节点是通过投票选举出来的,必须保存完整的区块数据,以对区块链进行校验并执行出块任务;

  • 另外一种是对链上链下进行分层,其实和节点分类有些类似,即链上只存储数据哈希,大量的实际的数据存储放到链下,链上可以通过零知识证明等方式对链下存储的数据进行验证,保证数据的可信和可靠。当然了,这种方式下,如果链下的存储网络一旦崩溃,链本身将遭受灭顶之灾,再加上零知识证明等密码学技术还在发展和完善的阶段,所以,至少到目前为止,还鲜有见到完全这么做的,一般从设计上还是会考虑把较新的交易数据放在链上,其它的历史久远的数据可能放在链下来存储。

其实这两种方法的思路非常的相似,最大的区别可能就是链下存储的节点可以完全不参与该链的相关行动,甚至可以是别的链或者非链来提供存储空间,而轻节点严格来说还是该链的组成部分之一。

其实话说回来,安全性、可扩展性、去中心化一直号称区块链的“不可能三角”,迄今为止,任何的所谓完美的解决方案,其实只是在三者之间做一个妥协和平衡,保证一定程度的去中心化,同时兼顾效率与安全性,就是目前的主流思路了。

# 简单总结

全量数据存在每一个节点上面,这也就暴露出来了一个严重的问题,由于每个节点都需要去存储全部的数据,资源浪费会越来越大。

Last Updated: 12/26/2021, 11:25:25 PM