基础课程第十三课 挖矿与共识

上节课给大家介绍了什么是区块和区块链,其中提到了,区块链的打包是由矿工通过挖矿来完成的,这节课就给大家讲一讲挖矿与共识。

中心化的货币体系中,货币是由中央银行来统一印刷发行的,发多少也是由中央银行来决定的(准确说是由国家决定,央行发行的)。经济过热,想抑制经济发展,就少发货币;经济受挫,需要刺激经济发展,就大量印钞。为了应对2008年金融危机,刺激市场经济,国家推行了“4万亿”的放水政策,从此中国房价一飞冲天,不可抑制。时至今日,对于当年的“4万亿”大规模印钞行为,仍是批评声不断。虽然调节经济的手段有两种,通胀和通缩,但是基本上所有国家都是采用“通胀”的经济模式,也就是钱(货币)越来越多,这也就意味着钱(货币)越来越不值钱啦。

中心化的货币体系是可以这么来发行货币,可是非中心化的货币体系就不能这么做啦,因为没有中心啊,所以谁也无法担当这个发行货币的角色。既然是去中心化的,那我们只能是大多数节点来达成共识,并通过竞争的方式,在为区块链的正常运行提供服务的同时,获得系统给予的奖励。

比特币的网络一开始是没有比特币的,而比特币是如何出现的呢?就是“矿工”通过“挖矿”得来的,这里的“挖矿”之所以用引号引起来,是因为它是一个形象的比喻,和传统的挖金矿没有任何关系。挖矿所做的就是将近期出现的交易,打包封装到区块中,并加入到已有的区块链中,这也是去中心化的比特币记账系统发行货币的过程。而凭什么矿工要替你记账呢,区块链设计了相应的激励机制,这就是挖矿。前面我也讲过,挖矿的收入主要包括两部分,一部分是系统自带的奖励Coinbase(创币)交易,另一部分是交易的交易费。

基础课程第十三课 挖矿与共识

比特币一共就发行2100万枚,一开始矿工的主要收入是系统奖励,这是因为一开始用比特币的人少,交易也少;这2100万枚比特币发行完了之后,矿工的收入就靠交易费啦,因为那时候用比特币支付的人多了起来,所以交易费足够支撑啦。系统奖励初始设置是50btc,每经过21万个区块,奖励就除2。比特币生成给一个区块大约10分钟,21万个区块,也就是210万分钟,约等于3.99年,这也就是大家常说的每4年系统奖励减少一半。从09年第一枚比特币挖出来,已经经历了两次衰减了,现在每个区块的挖矿奖励是12.5btc。这样一直衰减下去,直到最后的时候,一个区块的挖矿奖励是1聪(亿分之一的btc)。这样一直衰减,大家如果有兴趣可以自己计算:

(5000000000+2500000000+1250000000+...)*2100000=2099999997690000 Satoshis(聪),也就是我们常说的2100万BTC,这就是比特币的发行总量,大约到2140年,所有的币就都发完了。也就是说2140年之后,就不会再有新的比特币出现啦,所以比特币不存在“通胀”,因为货币总量是固定不变的,永不增发。

挖矿不但是增加比特币货币供应的一个过程,挖矿同时还保护着比特币系统的安全,防止欺诈交易,避免“双重支付”。矿工们通过为比特币网络提供算力来换取获得比特币奖励的机会。

那么在比特币这种去中心化的网络中,如何达成所有权的共识呢?还是先和我们现在实际应用中比较,在中心化的系统中,这个很简单,因为有银行这种可信的第三方,我们选择相信银行就好了,银行说我有多少钱,我就有多少钱,这件事其实想想也蛮可怕的哦。你说我的钱,是属于我的,还是属于银行的呢?就像我注册个微博账号,这个账号是属于我还是属于微博这个平台的呢?不展开说啦,大家自己想吧。

那么在比特币这种去中心化的网络中,我们又如何达成所有权的共识呢?中本聪的主要发明就是这种去中心化的自发共识机制,共识是成千上万的独立节点遵守了简单规则通过异步交互自发形成的产物。比特币的去中心化共识由网络节点的4种独立过程相互作用而产生的:(顺便说明一下,很多人一讲共识机制就是pow,pos,dpos这些,这些其实只是挖矿的共识,而区块链中一共包括了如下4部分共识机制)

基础课程第十三课 挖矿与共识

先说交易的独立校验:在交易传递到邻近的节点前,每个收到交易的节点首先会验证该交易,有效的才继续传播,无效的就在第一个节点就被废弃啦。节点会按照接收的相应顺序,为有效的新交易建立一个交易池。

接下来说挖矿,挖矿节点除了验证和传递之外,挖矿节点还能够在新的区块中整合这些交易记录,矿工节点会为交易池中的每笔交易分配一个优先级,并选择较高优先级的交易记录来构建候选区块。

决定优先级的三个要素是:块龄,交易值和交易长度。

优先级=SUM(块龄*交易值)/交易长度

区块链的前50k就是保留给高优先级交易的,然后是含有交易费的交易,最后是那些不含交易费的交易。

区块链的第一个交易就是上节课所讲到的,Coinbase(创币交易),大家也知道,这个交易是没有输入的。所以创币交易的输入部分,特别是输入部分的解锁脚本那里,就可以随意填写啦。那句著名的“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”(“泰晤士报2009年1月3日 财政大臣将再次对银行施以援手”),就是被中本聪写进了创世区块中的那句话,既表示了对日期的证明,同时也表达了对政府和对银行的不信任。

可是这笔账应该由谁来记呢?也许大家都想抢着记账,以获得奖励,那么就有一个记账的共识了,这里比特币采取的是工作量证明算法(POW, Proof Of Work),除了比特币采用的工作量证明算法,常用的算法还有POS,DPOS等,我会在后面分享不同的证明算法。工作量证明算法,简单来说,就是有一个特别难的数字,需要大家去计算,可是计算结果又超级容易验证,这里就是我之前所讲到的哈希函数,利用哈希碰撞来计算。10分钟内不停的算,不停的算,直到有人算出了这个数字,他就获得了记账权,这也就代表了它的算力最强,所以有机会获得这个区块的奖励,其他矿工则继续投入到下一个节点的计算过程中去。

回顾挖矿历史,比特币挖矿总共经历了以下五个时代:

基础课程第十三课 挖矿与共识

挖矿芯片更新换代的同时,带来的挖矿速度的变化是:CPU(20MHash/s)→GPU(400MHash/s)→FPGA(25GHash/s)→ASIC(3.5THash/s)→矿池挖矿(3.5THash/s*X)

也就是2009年1月3号中本聪挖出的第一枚比特币,现在毫秒级别就可以算出来啦,可是区块的产生时间还是10分钟,这是因为每经过2016块区块,系统就会自动调整区块的算力难度,将整体计算时间还是控制在10分钟左右。

再接下来是验证,挖矿节点生成节点并算出难度值之后,就会向全网广播,接收到它的节点,可以验证是否正确,HASH函数是一种难于计算易于验证的算法,所以很快其他节点就可以验证挖矿节点所生成节点的真实性。

比特币共识的最后一步就是将区块集合到最大工作量证明的链中,这里也是会出现大家经常听到的一个名词,分叉。当然这里的分叉是软分叉,和大家所听说的硬分叉有所区别,现在比较火爆的是硬分叉。分叉的东西本身就很复杂,我今天就不展开讲了,我也会在后面的课程中给大家分享。

通过上面四步,比特币的共识机制也就建立了,也就形成了大家相互不信任的情况下的共识。最后再分享两个概念:

1

矿池:我前面讲过了,大家也看到了挖矿的算力一直在升级,个人挖矿已经不复存在,那么大家要做的就是集合起来,一起挖矿,然后平分利润,这就是所谓的矿池。矿池通过专门的协议,将多个矿工联合在一起,矿工们同步各自工作,分享挖矿任务,并根据各自的算力大小来分享奖励。

2

共识攻击:比特币的共识机制的安全性依赖于这样一个前提:绝大多数矿工都基于自己的利益,通过诚信挖矿来维持整个区块链的稳定。然而当出现一个大算力的矿工的时候,他可以通过攻击比特币的共识机制来获利。注意的是,共识攻击只能影响整个区块链的未来,或者影响不久之前的几个区块。随着区块链的不停发展,对于整个比特币网络的攻击现在已经基本不会现实啦,而且也不会给攻击者带来任何利益。

常见的共识攻击就是所谓的51%算力攻击,即利用超过51%的算力来故意制造分叉,以实现双重支付或者阻止某钱包的交易等等。双重支付是指一个比特币支付在了两个不同的地方。目前来看较为稳妥的做法就是等6个区块之后才确认一笔交易,此时算力攻击已经不可实现啦。而对于大型交易,144个区块后再确认(24小时后)则基本无法更改啦。

这节课,主要跟大家分享了挖矿和共识,给大家讲解了如何达成共识以及挖矿的基本原理,下节课,我将针对现在市面上最常见的共识算法与大家分享。


分享到:


相關文章: