THUBA专栏 |《区块链系列课程》2.3 POW共识机制

原创 THUBA  THU学生区块链

点击“阅读全文”,观看完整视频

https://www.bilibili.com/video/BV1d34y1X7x8?from=search&seid=10285199058548973832&spm_id_from=333.337.0.0

本系列课程是清华大学学生区块链协会THUBA推出,由PlatON赞助的区块链课程,涵盖了从区块链基础学习到深度原理研究等方面。

今天的课程是第二章共识协议介绍的第三节,主题是POW共识机制。这是一个非常注重去中心化的机制。

前言

之前的课程中提到过,区块链的本质是一个去中心化的分布式账本,但是没有节点之间相互之间的信任的前提之下,所有节点要如何共同维护这个帐本呢? 答案是我们需要通过制定协议以达成共识

共识 是各个节点间达成一致、大家都同意的内容;

而为了达成这个共识,我们就需要制定一些规则,也就是协议

一个完善的协议制定,应该会让每个节点在出于自身利益最大化的考虑下,都会自发、诚实的遵守预先设定的规则,最终将判断为真的记录记入区块链之中,从而在一个没有信任的市场中形成共识。

而POW机制就是这样的一种方法,这就是我们今天要学习的主题。

比特币回顾

POW共识机制最早是中本聪在随着比特币一起建立的,所以我们首先简单的回顾一下比特币的模型。不了解比特币的小伙伴也可以先去看看我们先前的课程,有更仔细的介绍。

· 比特币

比特币是一个去中心化的账本,而每个节点保存的账本都是一致的,这个账本的格式如下图,而每个区块上有一些交易、区块头、时间戳和一个随机数Nonce,以及前一个区块的哈希值,如此把所有区块串成一条链。

THUBA专栏 |《区块链系列课程》2.3 POW共识机制

既然如此,至于哪个矿工可以在链上继续接上新区块? 就是完成工作量证明的矿工了~

· “工作”量证明

“挖矿”的矿工需要去尝试枚举随机数Nonce使得整个区块经过哈希函数的计算后前面是一长串的0开头。所以工作量证明的工作,在这里指的就是枚举Nonce并不断计算区块的哈希值。由于哈希函数的单向性,我们无法由预期的结果反推Nonce,因此矿工唯一能做的事就是一个一个尝试。

· 工作的难度

由于矿工算力会随着时间进步,因此中本聪再设计时便使得挖矿的难度可以随着算力调整,那么什么是难度呢? 其实就是期望需要枚举的随机数数量,如下图所示

THUBA专栏 |《区块链系列课程》2.3 POW共识机制

因此这个位数k越大,矿工需要计算的次数就越多,意味着需要投入的时间和算力也越多,因此也称为难度越大。

而在比特币的协议里,这个难度会不停地上升,让矿工每发现一个新区块的时间间隔几乎固定。这也是为了确保整个共识网络的安全性的一个设置,后面我们会更仔细的讨论这个问题。

工作量证明

下面我们就可以正式进入了工作量证明,刚刚我们谈了工作量证明的工作指的是什么工作,那么下一个问题就是工作量证明要证明的又是什么呢?

我们用一个例子来回答这个问题:

想象我们现在在一间很多个人的会议室里面,每个人可以随心所欲的自由发言,那么这个会议室可能非常的吵杂,我们很难听清楚所有人在讲些什么话。

又如果两个人在彼此聊天、有一个人自己在一边唱歌、或是有人故意大呼小叫,那么这个会可能就开不下去了。

这时候会议的主持人定了一个规矩,他给每个人发一个骰子,规定大家要不停扔,扔出一个6的人才能讲一句话,那么这个会议室可能会稍微安静一点,因为可能有不少人都在扔骰子;

如果这个主持人进一步要求大家要连续扔出5个6才能说一句话,那可能每次就只会有一个人在说话了。这样,所有人就都能听清楚大家说的每一句话。

同时,由于发一次言不容易,因此大家可能都会把握机会,谨慎的发言,只说有用的话。

因此,在这个例子里,工作量证明的工作是不停扔骰子,而目的是证明自己说的话有价值。原因是:如果自己说的话没有价值,那自己大可不必辛辛苦苦扔半天的骰子。这个机制下,我们知道每句发言的价值基本上都大于连须扔出5个6的辛苦,因为扔骰子发言是每个人从自身利益的考虑下做出的决定。

· 最长链原则

Ø 分叉

比特币有一个Gossip的网络,当一个节点计算出了新的区块,就会把这个区块广播给其他节点,但是如果在一个节点接收到这个区块之前也算出了另一个区块接在上一个区块的后面,他也会把这个区块广播给其他的节点

THUBA专栏 |《区块链系列课程》2.3 POW共识机制

那么在所有的节点都接收到这两个区块之后,他们的链看起来就会像下图,我们称这个现象为分叉,这可能是由于网络延迟造成的,也可能是有人故意接在特定区块后面的。

THUBA专栏 |《区块链系列课程》2.3 POW共识机制

Ø 最长链原则:

但是我们知道在比特币里我们的账本只承认一条链,那便是只承认最长的一条链上的区块所记录的交易,这就叫做最长链原则。

THUBA专栏 |《区块链系列课程》2.3 POW共识机制

最长链原则确保了所有节点能够形成一致的共识,但是,为什么我们要选择最长链呢?

我们可以这么看待这个问题:如果一个区块接在前一个区块后面,他实际上也是在替他前面的区块担保,说明他信认前面区块所记录的交易,因此我们可以把这个过程看做一个投票的过程,在哪个区块后面接区块便是用自己的工作量证明替他投票。

所以现在再回头看最长链原则就是自然而然的了,因为最长的链是众多选择中获得最多人投票的一个,也是所有人贡献了最多算力替这些交易做工作量证明投票,我们自然承认这些交易。

· 工作量证明核心思想

那么我们再来从一个全局的角度看待整个机制的设计:

首先,由于区块链的前提之一是去中心化,所以我们必须做到下面两点:

1. 提供经济激励让节点有动机计算新区块,否则,若是没有这些经济激励,就不会有节点白白花费算力来计算新区块,那这个共识网络自然也无法维持。

2. 由于节点之间没有信任,因此我们需要避免遭受恶意节点的攻击,这里的攻击指的是不诚实的记账。最长链原则帮助我们做到了这个,只要全网上诚实的节点的算力比不诚实的节点的算力还多,那么我们最终承认的区块就应该都是诚实的节点所记的。

THUBA专栏 |《区块链系列课程》2.3 POW共识机制

所以这一个Proof of Work 的机制就能够帮助我们达成共识,这个共识不只是由最长链原则所选出来的一条链上的交易记录,还包括所有节点都认可在这个机制下,这些最终被承认的交易都是可信的。

这就是通过工作量证明所打造出的点对点网络上的信任! 这个信任的来源是这个机制下作恶的高昂成本,我们相信一般人没有能力做恶。

· 出块速度、交易确认时间、安全性…

现在的区块链已经不只有比特币了,而即使是采用POW共识的链也多不胜数,但是他们的性能各不相同,我们接下来谈谈怎么看待一条POW链的性能。

1.工作难度->出块速度
首先,不同链之间的不同来源于出块的速度,出块速度意思是区块之间被计算出来的时间间隔,不同的链可以通过设置工作量证明的难度来调节这个时间。

2.出块速度->记账能力->交易成本

出块的速度会影响这个链的记账能力,出块速度越快,在单位时间里,能被打包记录的交易就越多,而这个记账能力很可能会影响到交易的成本,这点由经济学的供需法则很容易理解。

3.出块速度->分叉

另一方面,出块速度会影响分叉,出块速度越快意味着计算出新区块越容易,因此节点更可能在完成同步之前计算出接在同一个区块后面的区块,从而导致分叉。

4.分叉->安全性降低

那么分叉多会导致什么呢?分叉多会导致整个链的安全性受到威胁,从前我们说恶意的节点需要全网算力的一半才能对区块链的安全构成威胁,原因是那时候我们只考虑两个块的分叉-一个诚实节点的区块和一个不诚实点的区块,所以恶意的节点需要抵抗所有诚实节点的算力。但是如果分叉变得容易,那么恶意的节点就不再严格的需要那么多算力才能对区块链构成威胁了。所以分叉会导致链的安全性受到威胁。

5.出块速度->确认时间->交易速度

由于最长链原则需要等待一个区块的后面接上足够多的区块之后才能确定他是不是在最长的链上。在比特币里,出块时间大约是10分钟,一个区块需要等待后面接了6个区块才能确认,这样要确认一笔交易就需要等待一个小时的时间。所以交易速度也会受到影响。

THUBA专栏 |《区块链系列课程》2.3 POW共识机制

· 其他POW公链 – Conflux

Ø Conflux:而除了最长链原则之外,POW机制也可以跟不同的原则结合,例如Conflux网络,首先Conflux的区块链不再是一条链,而是一个树图,树图是一个有向无环图,其中还加上了一些引用边。因为最终形成的共识不是一条链而是一个树图,所以最长链原则自然不再适用,那么取而代之的就是最重链原则:

Ø 最重链原则: 分为两步
1. 第一步同样需要选择一条链,称为主链,选择方法就是在每一步选择孩子最多的一个区块,这也是它称为最重链原则的原因
2. 第二步再通过引用边的方式将不在主链上区块通过引用的方式和主链上的区块连上
3. 最后,执行交易时,我们依照主链上的区块划分为不同的epoch执行。

THUBA专栏 |《区块链系列课程》2.3 POW共识机制

Ø 效果

▶Conflux的这个机制相比最长链原则提高了效率,所以Conflux拥有较高的TPS,即每秒钟所能执行的交易数量。

▶由于现在好人的算力不在会因为分叉而被分散,因此在这里恶意的节点需要绝对的一半算力才能对这个链做双花攻击,安全性较高。

但是我们后面也会提到,此时,恶意的节点即使不能做双花攻击,仍然可能有其他的攻击方式。

攻击与影响

那么介绍完POW机制,最后一部份我们来看看POW机制下可能受到的攻击以及POW机制带来的影响。

· 51% 攻击

Ø 条件 : 恶意的节点掌握全网超过一半的算力(他的名字也由此而来)

Ø 常见形式 : 双花攻击

Ø 常见的攻击对象 : 交易所

Ø 例子:
攻击者在上面这个区块发送1BTC给交易所,被交易所承认后,利用自己的算力改写历史,由于他的算力超过诚实节点的算力,所以他很大的概率可以让下面自己重新写的历史成为最长链,而他只要在自己写的历史中改将自己的1BTC发送给自己的另一个账户便完成了这次攻击。

THUBA专栏 |《区块链系列课程》2.3 POW共识机制

Ø 攻击代价 : 高昂的成本。(前提是链上总参与的节点够多、算力够大)

Ø 解决方式 : 因为上面的特性,这种攻击常发生在用户较少、总算力较小的链上,在这些链上发动51%攻击的成本较低,具备获利的条件,也因此这样的链共识较弱,这个共识便是前面提到的所有节点都相信“被承认的交易是诚实节点记录的”的更深层次的共识,这个共识需要更多的参与者与更高的去中心化程度来加强。

· 自私挖矿

Ø 自私挖矿 : 一个节点发现了一个区块而不在发现的时后公布他

Ø 目的 : 可以在自己发现的区块之后计算下一个区块、下下个区块,带来更多计算时间的优势,让自己的区块更有可能成为最的一条链,从而获得更多的收益。研究曾经估计过在算力达到全网算力的30%再多一点时,自私挖矿就有可能比诚实挖矿给矿工带来更多的利益。

THUBA专栏 |《区块链系列课程》2.3 POW共识机制

这个自私挖矿的行为也被称为藏区块,这个行为的可怕之处是我们无从得知是否有人正在藏区块、藏了多少。而不论是诚实或是恶意的节点都可能藏区块,因此这个问题也变得更加复杂。

· 存活性攻击

Ø 存活性攻击 : 这里以Conflux为例,存活性攻击指的是让网络瘫痪,具体方法是这样的,回忆Conflux的工作量证明配合的是最重链原则,因此如果有两个区块的子树一直差不多大,那么网络便会迟迟无法确定主链应该使用哪个区块,而又可以分为以下两种

– 平衡攻击 : 通过藏区块并控制广播区块的时机使得链上两个子树权重一直相当,从而瘫痪网络。

– 分割攻击 : 恶意的节点通过藏区块的方式计算红色这些节点,引导诚实节点的算力自动分散,再进一步进行平衡攻击,以降低他所需要对抗的算力。

THUBA专栏 |《区块链系列课程》2.3 POW共识机制

Ø 影响 : 这种攻击虽然不能让攻击者获利,却会让整个网络无法运行,是非常极端的攻击。可怕之处就像前面所说的,我们不知道是否有准备攻击的人,也不知道是否有人已经藏了多少区块了。

Ø 应对方式 :利用算法监测这种攻击的发生,因为在这种攻击下区块的分布会显得很不寻常,因此只要在监测到这种攻击的时后切换机制,降低出块速度,恶意攻击者便无法以预期的速度添上区块平衡两个子树了。

· 挖空块

Ø 挖空块 : 我们知道矿工的奖励有创建新区块的奖励和打包交易的手续费两部份,挖空块的矿工在所挖区块内不会记录任何交易,放弃手续费的收益,只转注于创建区块的奖励。

Ø 动机 : 挖空块经常被矿池执行,目的是为了节约时间,因为一旦打包了与先前冲突的交易会导致整个区块无效,如果要花时间检验才能打包交易,就意味着矿池里的大量矿机需要在这期间白白等待,造成浪费,因此有的矿池就会选择直接不打包交易,或是和专门的交易所IP合作,专门打包这个交易所的交易。

Ø 影响 : 这个行为本身便是违背机制设计的初衷的,因为区块链的设计就是为了记录交易的,另一方面,例如比特币,创建新区块的奖励会随时间减少的,而挖空块的行为则被人谴责在没有额外贡献的前提之下加快减产速度。

Ø 解决方法 :
– 通过各种方法减少验证所需要的时间
– 通过调整经济激励也能一定程度解决这个现象。

· POW的影响

最后我们来看看POW机制产生的相关影响。

Ø 设备专业化:普通个人计算机挖矿的速度大大慢过专业被设计来挖矿的设备,当越来越多的人都采用专业的挖矿设备后,挖矿便会渐渐变为一种设备的军备竞赛。

Ø 影响 : 这个现象的好处是全网的算力提高了,会使得作恶的成本便高,从而使得总体的安全性也提高了;但是另一方面,这个现象一方面会增加能源消耗,并且会提高一般人的进入门槛,不利于去中心化。

矿池和矿场

另一个现象是矿池和矿场的出现,矿池和矿场是不同的,

Ø 矿池 : 算力的集中,例如世界各地的人可以将自己的算力贡献给一个矿池,集中计算,共享收益。

Ø 矿场 : 挖矿设备的集中,通常会在电力便宜、气温合适的地区。

算力为什么会集中:

1. 挖矿是枚举nonce,假设在没有矿池时,一台设备需要独自枚举1~100000,那么如果有一个十台设备组成的矿池,那么每台设备可以同时工作,每台尝试枚举10000种可能就好了,这样抱团就有能比别人更快挖出新区块,因此就会让大家有动机抱团。

2. 此外,在这个新区块还在向网络其他节点广播的过程中,这个矿池的算力便可以更早的进入下一个区块的计算,也是另一大优势。

算力集中的影响同样是会提高一般人进入的门槛,增加中心化的程度。下面的图可以看到现在个个矿池算力的分布,呈现较高的中心化现象。

THUBA专栏 |《区块链系列课程》2.3 POW共识机制

课程总结

本节课是THUBA推出的区块链系列课程第二章的第三节课,我们介绍了POW共识机制。我们首先简单回顾了比特币的共识机制,接下来仔细的探讨了POW共识机制解决的核心问题,最后我们讨论了一些POW共识可能遭受的攻击或是有害行为以及POW共识所带来的一些影响。接下来的课程将会更深入地介绍更多内容,欢迎大家继续关注。

参考文献:

[1] https://en.wikipedia.org/wiki/Proof_of_work

[2] https://en.wikipedia.org/wiki/Double-spending#51%_attack

[3]https://confluxnetwork.org/en/files/Conflux_Economic_Paper_20201230.pdf

[4] https://decentralizedthoughts.github.io/2020-02-26-selfish-mining/

[5] http://www.goldke.com/qkl/39863.html

[6] BTC.com


END

文稿&视频 |ivan

编辑 | 土BA

审核 | Zeo Celia

THUBA专栏 |《区块链系列课程》2.3 POW共识机制

本文转载自https://mp.weixin.qq.com/s/2wJJA58MAzKGsVc-OmKmwQ

(0)
PlatONWorld-M6的头像PlatONWorld-M6管理员
上一篇 20 12 月, 2021 10:52
下一篇 20 12 月, 2021 21:36

相关推荐

发表回复

登录后才能评论