12 月初开始,比特币等各种虚拟货币价格猛涨,大批散户涌入币圈,结果 12 月还没结束,币市全线大跌。其中比特币从17号的1.96万美金跌到22号1.19万美金,现在回升至1.35万左右,这时候大家才冷静了一点。
【资料图】
当然这篇文章的主题不是炒币,而是尝试回答两个问题:
比特币,到底是什么鬼?是“币”吗?
挖矿,挖的到底是啥?怎么挖?
一些基础概念
比特币背后的技术叫 blockchain,即区块链。区块链顾名思义,就是一条链,当然“链”只是一种形象说法,它表达的是区块之间的联接关系。
那区块又是什么东西呢?在电脑随便安装一个比特币钱包(例如 Bitcoin Core),它会把所有区块数据(目前高达 145GB)下载到你的电脑。同步区块的过程,其实就是同步历史交易记录的过程(如下图),所以区块,大概可以理解为交易记录的集合。
比特币一个重要的特性是:去中心化。它没有中央服务器,所有数据存储在分散式的节点,就像一张网络。安装了比特币客户端的用户都会自动成为一个节点,如果你不想成为节点,可以使用在线比特币钱包。每一个节点的数据都是同步的,于是第一次安装比特币钱包,都要下载大量数据。
所以总的来说,区块链,就是一个公共的交易记录链,也就是一个公共账簿。
这个账簿由矿工维护。
挖矿,是什么意思?
挖矿,可理解为记帐,即把交易打包、提交、确认在区块链当中。如果交易没有经过矿工确认,交易就算没有完成,如果矿工永远不确认,转出去的比特币就会凭空蒸发。所以记账(即挖矿)是一个很重要的过程。
安装了比特币客户端的用户就可以自愿参与记账,当然记账可以用其他工具,不一定用比特币客户端。记账(即挖矿)是有酬劳动。酬劳来自 2 方面:
1)假设你是矿工,你为了帮网友记账,交了很多电费,付出了大量运算能力,网友为了“报答”你,每次交易都会向你交“手续费”。最近交易次数太多啦,但是矿工每天只能记录有限数量的账,所以谁手续费多,就先记谁的账,手续费少的可能会有很长延迟,不交手续费还有可能永远不记账。于是手续费水涨船高,平均已经超过 20 美金一单(手续费以比特币核算,所以和比特币价格也有关系)。
2)手续费其实很低,矿工收入的大头,是记账过程中凭空产生的比特币。人民币是中央政府用印刷机印出来的,比特币则是矿工记账挣出来的,这是比特币的生成机制。比特币另一条机制是平均每 10 分钟生成一个新区块,这意味着矿工再怎么累死累活,每 10 分钟只能完成一次记账,目前一次记账奖励 12.5 个比特币,预计 2020 年 6 月降低至 6.25 个比特币,总有一天奖励会降低至 0,到时矿工只能赚手续费。
挖矿就是记帐,顺便赚点比特币。那记账是一个什么样的过程呢?记账就是解决数学问题的过程。
先看一下区块长什么样:下图左边就是区块的整体结构,你可以看到,所谓的区块就是一串超级长的、完全看不懂的字符!
图片来自Ken Shirriff
版本即 block version,02000000 表示 version 2;
接着是上一个区块的哈希值,比特币采用 SHA-256 哈希算法,其他虚拟货币可能采用其他加密算法,SHA-256 能够把任何字符加密转换为一段固定长度的字符串,例如数字1可以加密为:
6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b
上图的 17975b97... 就是上一个区块通过 SHA-256 转换之后的值,然后再反转显示,所以每一个区块都包含上一个区块的信息,这样就组成一条“链”啦;
接下来的 merkle 中文叫默克尔,这是一种特殊的 SHA 加密算法,这里的字符串是根据打包的所有交易记录计算出来的 SHA-256 值;
timestamp 是指区块生成的时间,不一定准确;
bits 可以理解为挖矿的难度,我前面说过,比特币其中一条机制是:平均每 10 分钟才能诞生一个区块;如果矿工的运算速度不断提高,挖矿的难度也会随之提高,总之要稳定在 10 分钟左右;
nonce 是一个随机数值;
交易数量就是这个区块打包了多少交易记录,一个区块最多只能打包确认两千多条交易,上图所示的区块诞生于 2014 年,只记录了 63 个交易;
灰色部分就是一条一条的交易,第一条交易是凭空产生的、奖励给矿工的比特币,其他交易就是普通交易啦;
好了,所谓的挖矿,其实就是不断改变区块中的值(当然有些值是不能改的,例如上一个区块的哈希值),可以改变时间,改变 nonce,改变交易量等等,尝试各种组合,把它们打包成一个区块,然后运算出这个区块的哈希值。
如果这个值(假设 X)小于比特币系统设定的某个值(假设 Y),那恭喜你!你完成了一次记账!也就是这个区块成为了合法区块,它将成为比特币区块链中的一员,你就获得了 12.5 个比特币(目前)、外加 63 笔交易费的奖励!如果 X 大于 Y,那很抱歉,这个区块不合格,这笔帐你还不能记,你要重新组合,重新计算,直到 X 小于 Y。这就是所谓的挖矿。
其实 Y 也是一个 256 比特的字符串,Y 通常以很多个 0 开头,所以 X 开头也要出现很多个 0。如果 X 开头没有 0,那肯定不合格。
SHA-256 本身不是一个复杂的加密算法,但是要让 X 小于 Y,这个运算量超级、超级、超级、超级、超级大!区块中任何一个值发生变化,哈希值可能大不相同,你要碰巧找到一个前面有很多个 0 的哈希值,这个概率非常非常低,需要进行超多次的运算才能“中彩票”。
目前整个网络的比特币算力已经达到 12,000,000 TH/s 左右,即每秒钟可以计算 12,000,000,000,000,000,000 个区块的哈希值。速度已经很快了,即使如此,仍然要连续运算 10 分钟才能找到一个合格的区块、才能完成一次记账。挖矿真不容易。
当然啦,再困难,这也是机器的工作。不过我跟你讲,2014 年有一位叫做 Ken Shirriff 的高人尝试用一张纸、一支笔挖矿,可惜算力只有 0.67 哈希/天,也就是计算一个区块的哈希值,要花一天半的时间。想找到一个合格的区块,要多少千万年?
你可能会问,比特币的设计者是不是没事找事啊,搞这么麻烦干嘛。挖矿,也即是反复计算哈希值,本身是没有任何意义的,还会消耗大量电力,它这样做的目的只是为了保证记账的难度。区块链是一个公共账簿,如果有人想篡改账簿(例如把比特币划到自己的比特币地址下),他就要付出巨大的运算能力。
另外值得一提的是,让 X 小于 Y,也就是挖到比特币,是一件完全随机的事件。这意味着你可能只用了 1 秒钟就找到一个合格的区块,赚了十几个比特币,但是这样的概率无限逼近 0,无限逼近 0 其实就是 0。为了降低随机性,很多人抱团挖矿,就有了所谓的矿池,具体不多说啦。
比特币,到底是什么鬼?
我先问你一个问题,下面这个苹果是什么鬼?答案:是一张图片。
那比特币是一张图片吗?不是。是一段文字吗?不是。是一段视频吗?不是。是一段音频吗?不是。那是什么?比特币没有实物形态,即使在计算机系统中,比特币也是虚无缥缈的东西。
比特币不是币。比特币交易的最小单位是 0.00000001 个比特币,你见过哪种真正的币,拆了一亿倍还能交易的吗?比特币只是一个数字,是公共账簿(即区块链)里某个属性所对应的一个数字。所谓账簿,它记录了某种归属关系,公共账簿把这个数字和某个比特币地址关联了起来。
比特币地址是公开的,所有人都可以查看所有地址。转移比特币,其实就是在账簿中改变这个数字所对应的地址,但转移时需要使用私钥签名。如果你同时持有这个地址所对应的私钥,那你相当于拥有了这个地址所对应的那个数字,也即拥有了这些比特币。
如果你一定要从视觉上“看一下”比特币,那比特币大概长这样(也许能这样理解吧...):
地址:
1KKKK6N21XKo48zWKuQKXdvSsCf95ibHFa
私钥:
KxNYgpnyxukGKVv3emVmdyY8DiiikuogjAPYRK3Xbx9eReu45qEs
数量:对应 xx 个 BTC
总结:
1)挖矿就是通过生成哈希值寻找合法区块的过程,找到了就能记账,记了账就获得比特币奖励;
2)比特币不是币,只是区块链(账簿)中的一个数字。