00:00
接下来我们可能要给大家讲一个稍微复杂一点的东西啊,这个东西叫做刚才提到的幽灵协议,前面有有一个同学提了非常的一个问题,就是说以太坊为什么要整这么复杂?比特币那个不是很简单明了,不是很简洁吗?对吧?大家想这个东西,呃,就是直接你给矿工奖励,他不就有动力去挖矿吗?这不就完了吗?嗯,为什么以太坊搞得这么复杂?这是为什么效率高一些?效率高一点,他在算那个给树块的奖励,这个还效率高一点的,呃,有人吃肉有人喝汤,不要让大家没得玩是吧,其实刚才大家的这种表述里边,其实都已经感受到一种状况,就是说,诶,那我是确实是你这样有人吃肉有人喝汤的话,那大家肯定会更有动力去挖矿,对不对,呃,对,这确实是一种激励,我只要是挖出来块,即使我没有赶上被确认成主链,我现在就是只要被人引用了之后,我作为树块还能拿到一笔奖励,而且还不小,那这个就激励大家你你不要就是觉得啊,我没机会我就不挖了啊对,你都去挖吧,你挖出来之后,你是书块也可以拿奖励的,当然是一种激励,那也想对他为什么要这么去激励,就他他就是希望那个就大家更多的去挖矿是吗?对,就是大家可能多多少少已经感觉到。
01:33
它这里边的一些理念就是到底有什么样的问题了,下下面我们就就跟着这个思路来分析一下它为什么这么设计以太坊,这就要从以太坊的出汗时间说起了,我们都知道比特币出发时间十分钟被人诟病太多了,对吧,就是稳定是确实很稳定,大家都都说这个比特币一直能稳定运行到现在,一点问题都不出,其实中本从在之前的这些设定,这些参数的设置其实都是很有讲究的,他这样的十分钟的一个设定看似很没有道理,看似要让大家平白无故的浪费那么多时间,然后去等交易,但其实这在保证他的这种稳定性上,在保证大家达成共识上面非常非常重要,就是靠着这样的一个时间才能够保证,但是这个带来的一个问题就是说大家发现区交易确认不了啊,我最快最快,即使我们不考虑,他说就是到了六个六个满足六个区块的这个条件。
02:33
之后才能确认它这笔交易生效,即使我们就说它产生区块就生效的话,那也得等十分钟了,这在我们平常的现金应用里面,前面我们都说过了,对吧,绝对不可能我们刷支付宝或者刷个银行卡,无论如何不可能等这么久的,所以以太坊最初的一个想法肯定就是说这个出款时间一定要减少,而且这不是凭空减少的啊,就是以太坊的团队,整个威神他们的这个团队,他们专门是做过调查,做过研究的,而且是他们参考了一篇专门研究比特币初二时间的,就是他的交易广播时间的一个文章,一个论文。
03:14
那篇论文里边,他发现。比特币的出块时间是十分钟,但是它多长时间它的这个块就可以广播到所有人那里呢?大概是12秒左右。12.6秒钟的时候,他发布的一个广播就可以广播到成整个全网节点的覆盖到95%,几乎就是所有人都都收到了12.6秒,大家可以想象就是它这个曲线肯定是就是绝大多数应该是集中在最初的几秒就都已经收到了,对吧?所以以太坊就有想法了,你既然其实几秒钟就都广播出去了,那我这个时间其实是可以大幅缩短的,对吧?
04:02
那当然就是说,如果说我一个块挖出来之后,我广播别人还都没收到,然后我就马上就出下一个块了,这个肯定不太合理,呃,这个肯定大家是能想到的,对吧,但是你采访就想到,那如果说我只要满足你的这个网络延迟,只要明显比你的网络延迟要大,那是不是?我就可以把这个出汗时间缩短呢,你既然12.6秒就已经覆盖到95%,那我就把你设计到12秒,绝大多数你在两三秒钟的时候,其实你都已经拿到这个区块信息了,对吧,那我们就可以开始就开始下一个区块喽,这这就没问题啊,你为什么非得等到十分钟呢,这样的话把难度降低,时间缩短,我们的交易速度,其实不是交易速度会快,就是TPS可能没有明显增长,但是它的这个交易响应的时间就会缩短很多,对吧,我们这会儿如果我们去刷一个卡,刷一个支付宝,如果用以太坊的话,可能就不用等十分钟,可能就十几秒钟就可以到账了,就可以有这样的一个好处,这是显而易见的,所以以太坊在设计的最初出画时间就设计成了12秒,在实际的运作当中,这个参数就是难度的这个调整,做了各种各样的这种不停的调整,现在基本上是在14~15秒钟之间,当然有时候可能在14。
05:23
以下刚才我们看到好像一个块是13.6秒出来的,对吧,大概就是十几秒钟这个时间,所以大家可以先有一个这样的一个概念,然后这就说到他的问题了,那你说如果说你这个这么快就能确认一个区块,然后大家挖矿可以挖的这么爽的话,然后大家这个交易也可以及时就上链的话,为什么比特币不这么干啊为对就是考虑安全性,那这个它是到底是怎么样影响到安全性的呢?对,首先一部分是分叉的概率更高了,对吧,这是大家直观就能想到的,你出块出的越多,你之前十分钟的时候,那大家基本上就是说我挖挖挖就是厉害的人六分钟挖出来,那一般人可能挖个八九分钟才能挖得到,你挖出来之后一广播,那我们好吧,停了,人已经挖出来了,对吧,我肯定这两分钟我就不挖了,我就挖下一个了。但如果是在。
06:22
以太坊这里边儿,你如果是十几秒就挖一个的话,那其实大家就对大家因为你难度降低了嘛,既然这个它的出块时间是代表难度的,难度降低,出块时间缩短,那大家肯定就是谁都能挖出来了,大不了就是你厉害,你两秒钟挖出来,我弱一点,我三四秒挖出来嘛,对吧,这个东西可能差别就没有那么大,所以它就是这种所谓的临时分叉的这种概率就会更更高。然后随之带来的一个问题,就是说在比特币的那种架构里边,作废的区块就会多,对吧?就是我们比特币的确认的机制是只认那个最长的最长的链,所以以在如果以太坊直接应用这样的一个规则的话,所有同时挖出来的那些块就会作废,这代表什么?那就代表了很大程度的一个浪费,就大家挖矿的话,可能这个这个收益和这种这种投入就就会造成很大的浪费,但是大家可能就会说,你这个浪费其实也就是说挖出来区块不要了吧,你比特币那边你挖矿没挖出来,那就不叫浪费吗?它不也浪费算力,浪费电吗?那以太坊的这个作废区块作废的多,它浪费的是什么呢?
07:42
它更多的浪费的,其实大家觉得是什么,每一个区块的产生,其实它贡献了足够的算力之后算出一个哈希,然后确认这些交易的有效性,其实这一个区块就是给整个系统做了贡献的。
08:03
越来越多的人能够去验证所有系统里面交易的就是这个,这个稳定性,能够确认交易的有效性,那就能够带来我们整个系统的稳定性,而如果这个时候我们把这些东西全部都作废掉的话,那明显有效的验证这些真正其实已经算出来,这些东西人家都已经算出来了,你全扔掉就是这是一个很大的一个浪费,还是挺可惜的。那另外一个方面就是说,由此带来的一个问题是链的安全性也会降低,大家可能又会说,你刚才也只是浪费而已嘛,可能也就是安全性没有更提高而已嘛,那它的这个安全性降低又降在哪里了呢?这个可以跟大家就是构想这么一个场景啊,两个矿工,一个矿工A,一个矿工B,俩人同时在那挖矿,A的算力强一些,它比较厉害,两秒钟就挖出来了,挖出这个区块来之后,大家想它会闲着吗?他马上把区块广播出去,这是肯定的,对吧,他要抢占先机嘛,接下来他干什么?对,肯定就是继续挖下一个块了嘛,对,就是接下来就继续挖了。而另外一个区矿工B他可能算力会弱一些,他挖矿可能得六七秒才能挖出来,那这个时候他就还在那不停的算,还在算自己的块,对吧?而假如说他跟A之间的网络也不是那么的通畅。
09:40
这就先不说了,你算力低的话,你肯定是就是挖不出来,然后你的这个块肯定是最后进不了主链的,这大家都认可对吧,这个浪费我们先不说了,但是这个过程当中,他还要他不是直接就知道A挖出来了对不对,对网络传播是需要时间的,前面说了网络传播12.6秒覆盖95%,那大多数可能两三秒能传到,那有可能B就是隔了六秒钟才拿到了,那在他拿到A的区块之前,其实他是在不停的挖,不停的挖,然后到六秒钟的时候,自己先挖出来了,然后之后再收到A的区块,然后发现自己刚才挖的不对,而且他挖出来之后,正常来讲,他以为A还没挖出来的话,正常来讲他还是顺着自己的继续挖的,对吧,然后过了两秒之后,发现之前全白费了。
10:31
之前的这传输的六秒钟,自己完全干的是无用功,然后他得从第八秒开始,接着A的那个区块开始了,所以大家就会看到A是从两秒钟自己出块的时候就开始下一个了,而B。是从八秒钟的时候才开始挖下一个一个块出块一般也就十几秒,B直接就比A晚吗?晚挖了六秒钟,那这个对大家是不是就会觉得,那是不是B车就永远追不上A了呀,你这个怎么跟人比,这个简单的一个对比,其实就是说嗯,那那大家想这个为什么比特币不存在这个问题啊,对对,这就是为什么比特币要设计成十分钟了,对不对,你你挖吧,没关系,你你先挖,你六分钟挖出来了,但你这个难度比较大,你传到我这儿就就五六秒钟传过来了,但是我要正常挖的话,你下一块还得好几好几分钟才能挖出来,对不对,那我这个五六秒钟,这个大概也就忽略不计了吧,反正你一块都得几几分钟吧,对吧,这个对比有一个对比就是大家可以想象这是一个跑步比赛,两个人去赛跑。如果。
11:48
咱们跑的是马拉松,我让你先先跑五秒钟吧,你你跑吧,跑五秒钟,然后我觉得这个对结果可能影响不是太大,对不对?马拉松大家知道最后跑完可能都需要几个小时的时间,让你跑五秒钟我都能看得到,你能跑到哪儿去,这个这个距离你等会停一下,我马上就追到了。但假如说。
12:11
现在我们跑的是百米赛跑,百米飞轮大战,你跟人说你先跑五秒钟吧,哎呀,那我觉得有可能博尔特都跑不过你对吧,这个这个确实是这样的,所以大家就可以看到这个区块时间和整个系统这个难度带来的系统的稳定性和安全性的影响,以太网由于它要求了高的出块率,它缩短了区块时间,由此带来的问题就是有算力优势的节点,它会越来越有优势,他有先发优势,他可以抢跑,而因为你本来就是一个百米赛道,本来赛道就短,你还抢跑,你让人家还玩不玩了,那那咱们像咱们这种小散户,那就更不能跟人家矿石什么的这种这种机构比了,对吧,那就当然现在本来也不能比啊,就是就是即使是那样的话,就可能那个矿池他们本身的算力你差10%,可能就再也追不上了,可能就会出现这种情况,这带来的后果是什么?这就。
13:12
以后对一家独大,对就会中心化,所以这带来的真正安全风险在这里,这也就是说为什么中本聪它那么费劲,把这个比特币的出海时间设计的那么难受,让大家后来诟病那么久,但他确实是有道理的,那以太坊威神他有这个想法,他想改变这个,那引入了这个这样的一个安全风险,这东西怎么办呢?那这就是我们要讲的幽灵协议的由来,为神他们整个这个团队就说了,那我们这样来吧,我们就不能简单的按你既然这个不能像比特币,那么就是觉得你这个抢跑几秒钟也不算抢跑了,我们现在抢跑就得算。那我现在怎么保证这个51%的算力攻击呢?他可以想到这种中心化之后,这就不仅仅是51%算力攻击了,对吧,有可能他更少的算力就可以攻击了,因为我只要比别人多,我就有抢跑优势嘛,这个优势就太大了,所以。
14:14
就有人提出来这样一个协议。幽灵协议的概念是什么呢?我们可以看一下幽灵协议它的全称叫做greedy heaviesst observed sub tree,首字母简称ghost ghost,幽灵协疑翻译过来是叫做greedy,是贪婪的,对吧?贪婪的最重的被观察到的子数,这是什么东西啊?这个好生僻的一个定义,哎,我我们这就回想起来了,之前我们不是计算了书叔叔嘛,书块嘛。那大家想书块跟他的父亲分叉的那个形状,这个可能不能叫链了,这个像什么?对,这个其实不就是我们学的树结构嘛,树结构不就是从一个节点会分叉出剩下多个节点嘛,只不过我们的这一个树结构,它是有一条主干,然后会不同的地方都插出来各种各样的节点。
15:17
那在这种状态下,既然我们不能像比特币那样,就是你挖出来,就就就就是你沿着这条主链挖出来,就算,那我们这样吧,我们多考虑一点东西,我们考虑整个数结构来算权重。什么意思?就是说我不像比特币那样,比特币挖矿,我们挖出来之后,确认主链的时候,是说只要你是最长的一条主链,六个确认之后你就是主链。对吧?这就是我们的比特币上的一个协议规则,非常简洁,也非常的直接,所以它特别的稳定。以太坊的做法是,那既然这样,我就不能直接选最长的主链了,我要选最重的那条链。
16:03
最重是什么意思呢?就是包括它差出来的那些子数。所以它的定义是最终观察到的子数,就把所有的这些东西,所有的加起来,我们算一个权重,而不是只看长度。哦,是有什么事情吗?好,OK,如果要没有事情的话,可能是时间比较晚了是吧,我们把这部分讲完,大家中午休息一下吧,咱看一下现在几点钟了,哦,过三分了是吧?好好,那这一部分我觉得可能相对这个思路需要连贯一些,所以我们把这块讲完啊,画画图,呃,呃,是,但是我这个画画的工艺可能不是那么的好,然后这个作图可能确实会比较麻烦一点,所以我就先这么跟大家说一下,大家如果要有不明白的地方,下来我们再讨论,再去再去做一些探讨,对吧,深入。呃,我们来想象一下,就是以太坊,它是给了这样一个定义,所以就是说幽灵协议是什么,它不光是定义了说要给书块奖励,它更重要的其实是定义了我们怎么样选主链。
17:14
主链怎么选?我选的不光是最长的。我们前面给了奖励的那些书块,它也作为练的一部分,我们算这个所谓的重量的时候,算权重的时候,书块也得加进来。这样的话,我们就不光是一条单独的链,然后还包括它岔开的那些书块,所有的加起来最重的那条,我认为这是主链。所以大家可以看到它是把整个的这个算法就改变了,对吧?呃,而且这里还有一个细节,就是说目前的幽灵协议的规定是协议下探探到第七层,就是我们前面说的书块的那一个奖励,最多就是给到七层,对吧?呃,最最早的简版设计是五层还少一点,他现在可能为了稳定性的考虑,又把它扩展了,就是还得考虑再多一点引用到七层,也就是说废了的区块呢,被这个。
18:11
别人去引用,他只能以什么样的以以书书区块的身份被别人引用,他只能被什么引用呢?被他父母的第二代到第七块,第七代的父辈。就是简单说就是跟它的高度差应该在一到六之间,所以是这样的一个概念。大家就可以看到这样的一个规定,其实也是保证就是大家不能无限引用嘛,对吧,如果无限引用这个就肯定不是一个合理的系统设计。最后我们就就来说一下啊呃,下面这一部分其实大家已经知道了,就是给输输块的奖励,会给出来的奖励是当前的区块奖励的7/8,然后自己的引用奖励将获得1/32。另外一点就是交易费用,这个永远都是挖矿这个区块拿的,不会给到数块。
我来说两句