区块链技术之挖矿和共识机制

in #cn7 years ago (edited)

通过之前的文章,我们已经学习了交易、区块,如果只是把区块链当成一个数据库来看,有了这些概念我们就可以构造一个中心化的区块链了。我们通过交易数据结构存储交易数据(支票、博客等),通过区块打包交易数据,最后通过对区块链头哈希将各个区块链连接成一个链条,这就是我们通常说的区块链。

什么?中心化的区块链?有没有搞错,区块链是去中心化的话的。别急,今天我们就来一起学习区块链技术是怎样实现去中心化这样一个神秘的机制,比特币为什么需要挖矿?

为什么要挖矿?

在比特币诞生之前,电子货币货币已经发展了十几年的历史。这期间包括 e-Cash、HashCash、B-money等相关的数字货币,这个期间属于数字货币的发展阶段。

1997年的HashCash是一个采用工作量机制(Poof of Work,PoW)的数字货币,之后被数字货币大量广泛使用。1998年提出的B-money是首个提出的去中心化的数字货币系统,遗憾的是没有提出具体的实现。

虽然电子货币经过了十几年的发展,但没有人提出去中心化电子货币系统的实现。由于电子货币是一串字符串复制成本非常低,因此去中心化电子货币实现的难点是怎样避免电子货币被同时两次或两次以上的支付。

在比特币系统中,挖矿是增加比特币货币供应的一个过程,同时还保护着比特币系统的安全,防止欺诈交易,避免“双重支付”,“双重支付”是指多次花费同一笔比特币。

矿工们通过为比特币网络提供算力来换取获得比特币奖励的机会。矿工们验证每笔新的交易并把它们记录在总帐簿上。每10分钟就会有一个新的区块被“挖掘”出来,每个区块里包含着从上一个区块产生到目前这段时间内发生的所有交易,这些交易被依次添加到区块链中。我们把包含在区块内且被添加到区块链上的交易称为“确认”交易,交易经过“确认”之后,新的拥有者才能够花费他在交易中得到的比特币。

矿工们在挖矿过程中会得到两种类型的奖励:创建新区块的新币奖励,以及区块中所含交易的交易费。为了得到这些奖励,矿工们争相完成一种基于加密哈希算法的数学难题,这些难题的答案包括在新区块中,作为矿工的计算工作量的证明,被称为”“工作量证明”。该算法的竞争的机制以及获胜者有权在区块链上进行交易记录的机制,这是比特币安全的基石。

挖矿”这个词有一定的误导性。它容易引起对贵重金属采矿的的联想,从而使我们的注意力都集中在每个新区块产生的奖励上。尽管挖矿带来的奖励是一种激励,但它最主要的目的并不是奖励本身或者新币的产生。

如果只把挖矿看作生产新币的过程,那你是把手段(激励措施)当成了目的。挖矿是一种将结算所去中心化的过程,每个结算所对处理的交易进行验证和结算。

挖矿保护了比特币系统的安全,并且实现了在没有中心机构的情况下,也能使整个比特币网络达成共识。

去中心化共识机制

区块链本身就是个分布式系统,由所有参与工作的节点共同组成,要对某一个交易保持一致,同样需要通过共识机制共同达成。

去中心化采用的机制有点类似英国的“公投”,看起来也不是那么难,对吧,区块链世界的共识机制实际上是采用了这样的方式。

在区块链世界里,共识机制采用的是拜占庭将军问题理论模型。拜占庭将军问题是由Leslie Lamport在1982年提出的,在拜占庭有许多将军,由于这些将军距离比较远,对于每次战事,需要通过传递消息达成一致的决定。但这些将军中有可能存在叛徒,干扰一致性的达成。拜占庭问题就是解决如何让忠诚将军们的军事行动达成一致。

在拜占庭将军问题中,将军相当于区块链世界中的节点,由于提案的成本较低,任何时候都有可能存在多个提案(攻打、撤退、投降)。

POW(Proof of Work)工作量机制是比特币、以太坊现在采用的共识机制,在这种共识机制里,各个节点需要解决复杂的数学问题,耗费大量的算力(比较耗电)来限制提案个数。从概率上来讲,即使有人想搞破坏,也要付出比绝大数诚实节点多的算力才能达到结果。由于比特币是全球节点参与工作,因此搞破坏是需要付出巨大代价的。但严格意义上来讲,比特币没有办法完全杜绝作恶。比如现在各大矿池已经拥有了绝大多数的算力,一旦他们联手,有可能又变成了另外一种中心化机构。

区块链是一本记录所有交易的公开总帐簿,比特币网络中的每个参与者都把它看作一本所有权的权威记录。在不考虑相信任何人的情况下,比特币网络中的所有参与者如何达成对任意一个所有权的共识呢?

中本聪的主要发明就是这种去中心化的自发共识机制。这种自发,是指没有经过明确选举或者没有固定达成的共识的时间。换句话说,共识是数以千计的独立节点遵守了简单的规则通过异步交互自发形成的产物。所有的比特币属性,包括货币、交易、支付以及不依靠中心机构和信任的安全模型等都是这个机制的衍生。

比特币的去中心化共识机制是由所有网络节点的4个独立过程相互作用而产生。

  1. 每个全节点依据一个校验列表对每个交易进行独立验证。
  2. 通过完成工作量证明算法的验算,挖矿节点将交易记录独立打包进新区块。
  3. 每个节点独立的对新区块进行校验并组装进区块链。
  4. 每个节点对区块链进行独立选择,在工作量证明机制下选择累计工作量最大的区块链。

重点讲一下工作量证明算法。挖矿就是重复计算区块头的哈希值,不断修改该参数,直到与哈希值匹配的一个过程。哈希函数的输入数据的长度是任意的,将产生一个长度固定且绝不雷同的值,可将其视为输入的数字指纹。通过修改数字可以构建不同的哈希。

简单打个比方,想象人们不断扔一对色子以得到小于一个特定点数的游戏。第一局,目标是12。只要你不扔出两个6,你就会赢。然后下一局目标为11。玩家只能扔10或更小的点数才能赢,不过也很简单。假如几局之后目标降低为了5。现在有一半机率以上扔出来的色子加起来点数会超过5,因此无效。随着目标越来越小,要想赢的话,扔色子的次数会指数级的上升。最终当目标为2时(最小可能点数),只有一个人平均扔36次或2%扔的次数中,他才能赢。

在一个完全去中心化的网络中,上面的调整是如何做到的呢?难度的调整是在每个完整节点中独立自动发生的。每2,016个区块中的所有节点都会调整难度。难度的调整公式是由最新2,016个区块的花费时长与20,160分钟(两周,即这些区块以10分钟一个速率所期望花费的时长)比较得出的。难度是根据实际时长与期望时长的比值进行相应调整的(或变难或变易)。简单来说,如果网络发现区块产生速率比10分钟要快时会增加难度。如果发现比10分钟慢时则降低难度。

好了,今天我们重点学习了挖矿和共识机制,这是区块链世界最重要的一个概念,也是比特币赖以生存的必要条件。通过交易、区块构建了完整的区块链数据,通过挖矿和共识机制确保比特币在没有中心化机构可以正常运营。在学习完交易、区块、区块链、挖矿、共识机制之后,区块链还需要P2P网络支撑才能真正运转,下一次我们接着学习。

Sort:  

哈喽!感谢你对cn区 的大力支持!很开心我的成长路上有你同行,请关注我的动态。让我们携手共创 cn 区美好的明天!如果不想收到留言,请回复“取消”。

Coin Marketplace

STEEM 0.19
TRX 0.13
JST 0.030
BTC 63186.04
ETH 3392.68
USDT 1.00
SBD 2.50