区块链是什么?比特币到底是个什么玩意儿?我们说的挖矿究竟是在挖什么?

区块链是什么?比特币到底是个什么玩意儿?我们说的挖矿究竟是在挖什么?
A:“老哥,你能借我一个比特币嘛?”

B:“什么?你要借12468美金?我可没有5621美金,你去找王大爷借15738美金吧”

A:“…”

以上对话是关于比特币市场的一个梗,吐槽比特币价格波动巨大,瞬息万变。那么到底什么是比特币呢?比特币怎么来的呢?它凭什么就值钱呢?门道不少,慢慢讲,理解这个可能需要一小点点计算机知识。

货币与交易
首先我们要清楚,比特币是一种数字货币,那么什么是比特呢?

比特(bit)是计算机中的二进制计数单位。

我们都知道计算机只能读懂0和1,因为我们目前只能通过高低电平不断交替产生两类电信号(量子计算机另说)来代表两种状态,那么其中的每一位0或1,都是一个比特,或者说都占1位。之所以说是比特币,就是因为这款货币并不同于我们现在使用的纸币,而是以一串串0与1表示的数字流。

那么要理解数字货币,首先要理解什么是货币?

货币的概念可以出一本书,这里就简单讲一下。我们都知道最早的时候人们之间的交易都是通过物物交换来实现的,那么这种交易方式具有他的局限性和不便捷性。后来人们开始以贝壳,逐渐演变到金银,再到铜钱来实现更高层次的物物交换的交易。

我们称这为:一般等价物

这解决了交易的局限性,也就是说人们不必在双方都拥有对方所需品的前提下才能交易,然而,这并不解决交易的不便捷性,试想每次出门购物要携带几斤甚至几十斤的铜钱…

于是,纸币诞生了…

那么一种一般等价物能够实现流通,最重要的是什么呢?

答案是:信任问题

无论是金银,铜钱,还是纸币,它的流通必然是解决了人们之间交易的信任问题的。人们相信这个东西值钱,因此愿意通过收取这个一般等价物,并给出自己的劳动成果,同时他也相信这个东西能够从别人的手上交换到自己的所需品。

那么人们凭什么相信这个东西能够充当交易的媒介呢?

答案是:国家背书,并以法律的手段强制执行

没错,至此货币就能够流通起来了。那么其中最重要的是啥?归根结底,可信任的第三方。

它能够保证交易的可靠性与不可造假性,由于制币技术的限制,以及法律手段的打击,人们很难通过伪造货币来进行交易。但是由于巨大利益的吸引,假币的问题始终难以杜绝,于是,移动支付开始诞生了(当然不止是假币这一因素)。

移动支付很大程度上便捷了我们的生活。细想一下,我们通过微信,通过支付宝转账的时候,我们凭什么相信这个钱真的到了对方手上呢?还是可信任的第三方。我们能够正常转账的前提是微信或者支付宝知道你的账户中有多少余额,你的钱存在人民银行的账户当中,第三方能够精确的记录你的每一笔交易,并且你也相信他们不会搞混你的交易,这是转账成功的基础。

总的来说,我们生活在一个具有中心化的网络体系当中,这些第三方能够维护和帮助你进行交易。那么问题来了?加入没有这些可信任的第三方,我们怎么进行交易?换句话说,我们怎么解决交易信任问题?

有中心化就有分布式,2008年,一颗中国本地的大葱,呸,不是,一个叫中本聪的天才发表了一篇名为《Bitcoin: A Peer-to-Peer Electronic Cash System》的论文,比特币:一种等对等的电子现金系统,解决了这个问题,凭空创造出了相当于一万亿人民币的比特币,并提供了支持系统运转的技术体系:区块链。

论文地址:https://bitcoin.org/bitcoin.pdf
区块链
在一个分布式的网络体系中,每个人之间的交易面临的最大难题就是,我怎么信任对方?

在没有第三方的情况下,每个人进行一笔交易,就需要通过广播来通知大家,比如A向C转账100比特币,那么A就需要通过广播来告诉大家这笔交易,并且每个节点应该记录下来这笔交易。

当然,实际的实现中并不直接通过单个结点向所有结点发布记录,在区块链系统中,会有一些类似主区块的结点,我们申请的每个比特币钱包创建时,会内置这些区块的域名,在发布记录时,会通过本地DNS域名服务器找到相关域名的IP地址,并将消息发送给这个区块,收到消息的区块再通过类似病毒传播的方式,将信息扩散到所有结点。
区块链是什么?比特币到底是个什么玩意儿?我们说的挖矿究竟是在挖什么?

为了保证信息的真实性,每个节点发出的交易记录信息需要附带上自己的电子签名,目的是为了让别人证实“你是你”。

什么是电子签名呢?简单介绍一下:每一个用户申请的比特币钱包中都会带有一对钥匙,公钥和私钥,公钥可由私钥生成,公钥再通过一系列不可逆的哈希算法(通常是sha256)后,得到钱包的地址。

那么什么是公钥私钥,他们怎么能够用来进行身份证明呢?

首先公钥指的是网络上所有结点共同熟知拥有的钥匙(也就是一串16进制数),私钥是只有你这个结点私有的钥匙,那么当我要往外发布消息的时候,就将我的数据报使用私钥加密,网络上的其他结点收到后尝试使用你的公钥解密,若成功,则证明是你本人发出,因为只有你本人拥有这个私钥,否则识别失败。这就是电子签名。

那么如果你只想发给某一个结点,而不想让其他人看到里面的内容呢?

很简单,假设你要发给B,那么只需要使用B的公钥进行加密,再将数据报发送给B,此时,只有有用B私钥的B结点才能够打开这个数据包。

扯远了…

回到主题,当所有结点都验证“你是你”之后,它们就需要负责将这笔交易记录下来,每一笔交易都是如此。那怎么证明你的余额是充足的呢?那就需要开始回溯历史交易记录,也就是说,当结点确认了你的身份后,就开始回溯你的交易记录了,结点的历史当计算出的余额足够时,新的交易便记录下来。没错,结点并不像传统账户一样记录你的实时余额,仅记录网络上的每一笔交易记录,通过回溯历史交易数据,就能够计算出你的余额到底够不够。

到这里你会发现这个所谓”结点“的主要作用:记录交易数据。

换句话说,就是账本,每一个账本都是一个区块,那么将所有的账本连起来,就是区块链。

目前大概有60万左右的区块,每个区块中都记录了数千笔交易,这些区块组成了现今的区块链,并记录了从比特币创立至今所有的交易记录。

所有的区块持有相同交易记录,并且透明公开,并实时更新,更新方法就是我们上面所说的,病毒式传播。

回到交易的本质上,我们怎么能够信任这个交易的可靠性?这个账本由谁来保管?怎么保证我的交易记录不被造假?

如果谁都能够维护账本进行操作,更改交易记录,那就乱了套了。

那么第一个问题:怎么解决谁来记账的问题呢?

答案是:共识机制

共识机制

在比特币创造者中本聪的论文中提出了一种基于做题的公式机制,叫做 Proof-of-Work,工作量证明。

区块链是什么?比特币到底是个什么玩意儿?我们说的挖矿究竟是在挖什么?
工作量证明的本质就是穷举,只要设备算力足够强,穷举出答案的概率就越大。

一个区块中包含了区块头、交易数量N以及N条交易详情,要了解它怎么进行计算的,首先我们要了解一下区块头的结构:
区块链是什么?比特币到底是个什么玩意儿?我们说的挖矿究竟是在挖什么?

我们可以看到这个区块头中包含了上一个结点的哈希值,版本号,时间戳以及为满足算法难度目标设立的随机数nonce等等。

每个区块的哈希值由该区块头进行二次sha256计算得出。

要进行记账,除了将交易记录进行打包外,还需要修改nonce,让输入数在进行哈希转换后得到一个前n个数都是0的数值。

这里需要解释一下,以sha256算法来说,输入任何一串字符,算法都能够将其转换成256位的二进制随机数值,例如:0101010101…1010101。只要输入有任何一点改动,输出的值将完全不同。

那么回到区块身上,想要加入链中,就必须要算出能够满足前n位都是0的256位随机数,这个n会根据全网加入算力的增大而增大,当前对应网络中算力匹配的n大概是76,每一位数都是0或1两种可能,那么其实算出的概率也就是 1/2^76,几亿亿…(恐怖如斯)

尽管困难,但是你算出以后区款链体系上的结点便能够瞬间验证你算的对不对,如果没错,那么就可以加入链中。也就是说整条链就多出了一份相同且实时更新的账本。

但也是因为计算困难的原因,普通PC几乎不可能算出这一数值,现今参与计算的设备已经逐渐从个人PC到超级计算机到专业矿机再到矿池…(普通玩家绕道,光电费就是天价,这也是现在的矿场矿池一般建在水电站附近的原因)

这里又有一个问题了,既然计算这么困难,资源耗费这么大,大家又不是带慈善家,为什么我要来维护这个账本呢?

答案是:当我们完成一个新节点打包,加入链中时,就会获得系统奖励的比特币!

最开始时每计算出一个”账本“,会获得系统奖励的50个比特币,每过4年逐渐递减,25个,12.5个…

2009 - 2012 年,每次奖励 50 btc
2013 - 2016 年,每次奖励 25 btc
2017 - 2020 年,每次奖励 12.5 btc

这就是为什么比特币的总数是有限的,目前市面上已经奖励的比特币数在1000多万个,并且在未来将永久地限制在2100万个左右。

相比与当前纸币由央行统一发行,这就比特币唯一的发行方式。

我们一直在说的挖矿,其实就是为了算出这个账本,获得系统奖励,今年2020年,也就是每算出一个节点将获得12.5个比特币,按照当前的价格 7,826.2$/bic,也就是97827.5美金,大概在50~60万人民币。(一大半得交电费了)

防止篡改

谁来记账的问题已经解决了,那么第二个问题,怎么解决数据被乱改,造假的问题呢?

在前面给出的区块头中可以看到有一条标志,prev_block,也就是当前区块的上一个区块,有计算机常识的朋友已经发现了,这不就是个链表嘛?

没错,他和链表的结构是一样的,prev_block也就是指向前一个block的指针,不断循环向前,直到指向第一个区块,也就是我们说的链表头,创始区块。
区块链是什么?比特币到底是个什么玩意儿?我们说的挖矿究竟是在挖什么?

那么当其中一个账本持有人 B 想进行数据造假时,他的账本的hash值就会随之改动,也就会导致下一个区块 C 的指针失效,那么 C 也就需要重新改变随机数来匹配上一个区块B,而当 C 改变以后,区块 D 的指针又失效了,因此,当 B 想要改动时,就需要连着改动B后的所有区块,这显然不可能实现。

那么到这里,也就是说,由于电子签名的存在,记账人不可能假冒别人进行转账,又因为历史交易记录不可篡改,因此也不可能凭空变出一笔钱来…听起来是不是很完美了呢?

其实还有一个问题,如果两个人同时打包出了新的区块,那么谁应该加入呢?

答案是:最长链原则
区块链是什么?比特币到底是个什么玩意儿?我们说的挖矿究竟是在挖什么?

也就是说,谁算出的链长,那么谁就加入区块链中。

到这里或许你应该想明白了一个问题:创立者为什么要苦心扒拉的设计一个计算量这么大的方式来让加入者进行计算??难道就为了浪费你的电费资源?

没错,计算量越大,整体工作就越不可能由单独的个人或者机构所掌握,否则,倘若加入整个网络中的算力并不大,那么个人攻击者很容易通过设备堆积,占据全网超过50%的算力,只要个人超过了50%的整体算力,那就意味着他能够算出的链一定是最长的,那么他就能够将他所算出的区块加入整个区块链体系中,进而发布他的交易记录,控制记账权。而较短链中的交易就会被撤回,重新进入交易池等待打包。

因此前面所设定n的意义就在这里了,参与者越多,n越大,需要的计算量就越大,从而使个人更难通过算力来控制区块链。

至此,我们就解决了谁来记账,以及怎么防止区块,即账本被篡改,交易中最重要的信任问题迎刃而解,一套去中心化的数字货币流通的基础就已经搭建完成!

区块链是什么?比特币到底是个什么玩意儿?我们说的挖矿究竟是在挖什么?
最后,为什么我们要费尽气力探索去中心化的流通体系呢?我们前面已经说了,中心的存在,无论是商业银行还是央行政府第三方,都是为了解决交易的信任问题,然而中心的存在本身,又保留了一丝垄断性以及不透明性,甚至反而降低了交易的效率。

尽管目前这套体系并不成熟,存在诸多问题,例如交易的核验需要大量的时间和计算等等…但是去中心化的思路必将是未来发展的趋势!

(感谢您读到这边…以上有错误或者不当的地方请指正)