2018-2-5 23:30
好了,对小纸条和交(jiāo)易记录的研究我们点到为止(zhǐ),其实(shí)信息量已经是巨大的了(le),让我们合上盖(gài)子,重回较(jiào)大实体、继续聊聊“区块”和“区块链”的话题(tí)。还记得,咱们在一(yī)开始讲到关(guān)于区块的特征吗?区块创造后(hòu)被(bèi)埋在地下,需要经过节点们马不停(tíng)蹄的挖采、而(ér)且是凭运(yùn)气的挖(wā)采(cǎi)才有可能获(huò)得——不仅(jǐn)仅如此,事实上(shàng)他还有其他很(hěn)多(duō)神奇(qí)的地方,比如说:
基于上述1、2点,如果阅读足够(gòu)仔细的同学可能会有些(xiē)头(tóu)大。在(zài)文章开头为了更好的描述,我在设计简化区块链系统的时候(hòu)故意模棱(léng)两可了几个概念,这也许已经误导到了部分同学。这(zhè)里不得不停下来和你一起修(xiū)正下之前在你大(dà)脑中已经构建的区(qū)块链世界观。我们前面讲(jiǎng)道,“在节(jiē)点的视野里,大概每十(shí)分(fèn)钟(zhōng)会凭空产生一(yī)个建立在(zài)自(zì)己平行宇宙世界的神奇(qí)区块”。如何正确去理解这句话呢?——拥(yōng)有上(shàng)帝之眼的你,可以(yǐ)这么拆解问题、看(kàn)待问题(tí):
挖矿(kuàng),本(běn)质(zhì)是通(tōng)过与(yǔ)或运算,去碰撞一个(gè)出(chū)一个满足规则的随(suí)机(jī)数(shù)。这个部分要细讲(jiǎng)的话(huà),估计又可以写(xiě)出两三千字来(lái)。我(wǒ)觉得到(dào)目前为止(zhǐ),并不影响主轴知(zhī)识点的讲解,这(zhè)一块会作为(wéi)后(hòu)续知识结构的完善(shàn)被撰写(计划1月24日前完(wán)成(chéng))。感兴趣的同学可以Google百度(dù)查阅下什么叫“挖矿”、“工作量证明 POW”等。
分叉
现(xiàn)在,我们终于对“区块”这个(gè)概念有了更全面的认识,文章(zhāng)开头讲的故(gù)事就可以继续展开来絮叨絮叨:
假如几乎同一时间(jiān),「中国上(shàng)海浦(pǔ)东新区张衡路」上的节点和「美国纽约曼哈顿第五(wǔ)大道」上(shàng)的节点异口同声喊出来:“我挖到区块了(le)!里面的小纸(zhǐ)条都是有(yǒu)效的!奖励归我!”。其他节点(diǎn)也(yě)几(jǐ)乎同时参与了对这两个区(qū)块(kuài)的(de)校验,结(jié)果发现这俩都没(méi)毛病,各(gè)节点也开始犯困,因为在他(tā)们的(de)视野里他(tā)们并不(bú)清楚(chǔ)最后哪一个区块应该会被主链接纳。算了!都连在(zài)自己区(qū)块(kuài)链尾巴(bā)上吧,这(zhè)时尴尬(gà)了,区(qū)块链(liàn)硬生生的被分叉(chā)了!
产(chǎn)生分叉
你肯定在想(xiǎng),那还(hái)得了,这种情况继续(xù)下去,每个节点的(de)区块以及他们整理维护的小纸条都将变(biàn)得(dé)不一样,这已经(jīng)严重违背(bèi)了区块链世界里第一大最基本原则——所有节点共(gòng)同维护同一份数据。所以,为了解决这(zhè)个(gè)问题,区块(kuài)链世界引入(rù)了(le)一条(tiáo)新(xīn)的规则——拥有最多区(qū)块的支(zhī)链将是(shì)真(zhēn)正被(bèi)认可有价(jià)值(zhí)的(de),较短的支(zhī)链将会被直接Kill掉。
我们大伙都知道挖矿的过程存在(zài)巨大的(de)工作量(如果没有任何(hé)难度,把(bǎ)区块扔在人群(qún)中,必然同一(yī)时间发现(xiàn)区块的节点数量将大大增(zēng)加(jiā),也就会产生无数的支(zhī)链(liàn),通(tōng)过这个例子,你大概也就(jiù)能够明白,区块链(liàn)世界为什么需要设置工作难度了吧),并且在计算机的(de)硅基世界里,不可能出现(xiàn)所谓 “同时(shí)” 的概(gài)念,哪怕纳秒的差别,那也(yě)总是会有先后顺序。所以理(lǐ)论上,“分叉(chā)”的这种(zhǒng)僵局很快会在下一个区(qū)块被(bèi)挖掘出来(以及(jí)校验区(qū)块)的时候被打破,实(shí)在不(bú)行下下个,或者下下下个……总之机制(zhì)可以(yǐ)让(ràng)整个分(fèn)叉的区块链(liàn)世界迅速稳定下来。
“分叉(chā)”这种僵局在确认下一个区块(以及(jí)校(xiào)验(yàn)小纸条)的时候被打破(pò),从而整(zhěng)个区块链世界迅(xùn)速稳定下(xià)来
就上图(tú)而言,所有基于(yú)张衡(héng)路节点挖矿(kuàng)获得(dé)的区(qū)块(kuài)以(yǐ)及后续区(qū)块的那条分支被视为有(yǒu)价值,最终会(huì)全(quán)部(bù)保留(liú)了下来;其他节(jiē)点会统一(yī)效(xiào)仿那个拥有更(gèng)长分支链的节点所(suǒ)做的决策。另外,值得一提的(de)是,同一(yī)时间,较短分支(zhī)上的区块会立即丢弃,而里面的小纸(zhǐ)条也会随之(zhī)释放(fàng)出(chū)来,被重新标记(jì)上(shàng)“未(wèi)确认”。
“双花”与“51%攻击”
你可能(néng)已经(jīng)开始困惑或者(zhě)有点兴奋,末尾几个区块的排序在修复过程中,因为(wéi)时间差肯定会产生一(yī)些模棱两可的地方,这往往会给数据安全(quán)埋下一颗雷。一个最简单的(de)假设(shè)——我记录(lù)的一张小纸条很不巧地被归在了(le)一条较短的支链上,这条支链在竞争过程中理所当然输掉了比赛,区块被丢弃、小纸(zhǐ)条(tiáo)被无情的贴上“未确认(rèn)”的标签。在(zài)等待下次区块重新确认的过程中,这个时间差内,我,好像、似乎可以做点什么坏事(shì) ԅ(¯﹃¯ԅ) ,就比(bǐ)如(rú)说“双花”(双花(huā),花两次,双(shuāng)重支(zhī)付的(de)意思)
你脑海中也许很(hěn)快浮过的这样的构(gòu)想(xiǎng),可不可能通过下面这(zhè)种(zhǒng)方法触发双(shuāng)花问题的产生(shēng),从而(ér)让我不劳(láo)而获:
事实真的如(rú)此吗?在这里我可以很负责任的说,too young too simple,区块链世界规则的制定远比我们想象的要健全很多,还记得我们之前讲的“区(qū)块的ID至少会跟区块(kuài)内(nèi)所(suǒ)有小纸条的集合、即将与之相连的上一个区(qū)块ID以及挖矿节点的运气(qì)值(zhí)等(děng)因(yīn)素相关”。 在(zài)这里,正(zhèng)是因(yīn)为(wéi)打算连接到主链的时(shí)候,事先准备(bèi)的链子(zǐ)会意识到马上要(yào)连接上的那个区块ID发生了改变(biàn),随之而来的是后面所有区块(kuài)ID都瞬间。节点不得不重(chóng)新对后续(xù)区块的解锁以及对区块内小纸条(tiáo)的校验。
在区块(kuài)链(liàn)的世界,重新计(jì)算的行为(wéi)等(děng)同于把自己(节点(diǎn))置身于同一个起(qǐ)跑线,跟世界上其他所有的(de)节(jiē)点一同竞争挖矿。你会说,我拥有(yǒu)更(gèng)强大的计算能力,但是对不起,跟你竞(jìng)争的(de)对象(xiàng)并不是第五大道、南(nán)京(jīng)西路、香(xiāng)榭丽舍大道(dào)上的某一(yī)个节点,而是全球所有算力(lì)的(de)集合(hé),在这个集合(hé)中,你(nǐ)拥有的算(suàn)力永(yǒng)远都只是一(yī)个很小的子集。所以,根据区块(kuài)链算力民(mín)主、少数服从多数的基本原(yuán)则,这个构想将永远不会成立。
除非....
你控制着全球(qiú)51%的算力,这也就(jiù)是区块链世界里另外一个(gè)著名的概念,叫做“51%攻击”,但这(zhè)也仅仅是一个理论值,在真实世界(jiè)里这样的攻击(jī)我个人觉得是很难发(fā)动起(qǐ)来的,这里面(miàn)就牵涉到很多(duō)经济、哲学(xué)甚至(zhì)政治的(de)因素。举(jǔ)个最简(jiǎn)单的例子(zǐ):X-Man为(wéi)了回滚刚刚发生的一笔交易记录,成功发起了51%攻击,这意味着很快整个区(qū)块链系统将会崩(bēng)盘,因(yīn)为这次攻击已经严重伤害到人们对(duì)这(zhè)套系统(tǒng)的(de)信任,接着比特币开始暴跌至几(jǐ)乎一文不值;但是这个拥有51%算力的X-Man原本完完全全可以通过挖矿的方式获取更多(duō)收益,购买(mǎi)无数(shù)的iphoness手机(jī)。那他不是脑(nǎo)袋不是坏了(le)还能是啥?对51%攻击(jī)话题感兴趣的同学可以阅读这篇文章《什么是(shì)比特币51%攻击?》。
至(zhì)此,我(wǒ)觉得区块(kuài)链最基础、最核心的(de)知识已经全部讲完了(除了挖矿内部实现原理,作为一(yī)个遗憾留(liú)在这里,有时(shí)间会完善掉),相信你(nǐ)已经对它有了一个宏观的认(rèn)识。另外(wài),由于这篇文章采用了适当抽象(xiàng)、类(lèi)举的(de)叙事方式,中间或多(duō)或少有些地方会跟区(qū)块链底层(céng)严谨的技术实现有出入,欢迎(yíng)大家来纠错(cuò)。另外,也(yě)是受限于自己(jǐ)知(zhī)识结构的缺失,这篇文章会随着我对区块(kuài)链更深(shēn)入(rù)认识后,随(suí)时进行(háng)修订,最后(hòu)更(gèng)新时间可参考该(gāi)回答下方(fāng)的(de)时间(jiān)戳(chuō)。