區(qū)塊鏈設計核心難題:拜占庭將軍問題

liheng
7 評論 12378 瀏覽 33 收藏 9 分鐘
🔗 B端产品经理需要更多地进行深入的用户访谈、调研、分析,而C端产品经理需要更多地快速的用户测试、反馈、迭代

在前面兩期中,主要對區(qū)塊鏈的基本概念和基本設計原則進行說明,現(xiàn)在有了這些背景知識后,再去學習更深層的知識將會更加容易。本期我們一起研究一下拜占庭將軍問題,這是區(qū)塊鏈解決的一個核心難題,通過理解這個問題的來龍去脈,相信大家會對區(qū)塊鏈的底層知識會有一個更深入的思考。

一、先講個故事

從前有個帝國叫做拜占庭,這個國家派出5位將軍去共同圍攻一座城市,他們5支軍隊分開駐扎在這個敵城周圍,這5個將軍之間只能通過信使聯(lián)系,只有5個將軍一起進攻敵城才會勝利。

于是在他們5個人出發(fā)之前一起商量了進攻的策略,少數(shù)服從多數(shù),當超過3個及以上的人都同意進攻,則5個人一起進攻,否則就一起撤退。

但是,如果他們5個人之前出現(xiàn)了一個叛徒,就可能導致最終的行動不一致。如下圖:

將軍1234都按照服從多數(shù)人的規(guī)則來執(zhí)行,圖中的將軍01和02跑了,將軍03和04去攻打了,違背了開始他們一起進退的約定。最終導致進攻失敗,打了敗仗。

其中,壞蛋將軍05就可以理解為一個作惡的節(jié)點,他向不同的節(jié)點傳遞不同的消息,讓系統(tǒng)內(nèi)部的信息出現(xiàn)了不一致。

從這個故事可以看出:幾個相互協(xié)同的人,如果其中有個人作惡的話,可能不同的成員得出的最終結(jié)論不一致,從而破壞了系統(tǒng)的一致性。這就是拜占庭將軍問題,這個問題一直是協(xié)同合作中難以解決的問題。

二、現(xiàn)代版拜占庭將軍

大家都知道了區(qū)塊鏈是一套去中心化的分布式系統(tǒng),既然是分布式系統(tǒng)就意味著要全網(wǎng)多臺服務器節(jié)點進行協(xié)同合作。

那拜占庭將軍問題就出來了:每個網(wǎng)絡節(jié)點相當于一個拜占庭將軍,這些節(jié)點最終要共同維護一套數(shù)據(jù),這個過程中可能出現(xiàn)兩個問題。

1.無法保證節(jié)點誠實

一個節(jié)點可能同時向不同的服務器發(fā)送不一致的消息,導致節(jié)點之間存儲的信息不一致。這個可以把它理解為單點一致性問題。

2.無法保證系統(tǒng)內(nèi)部信息統(tǒng)一

分布式系統(tǒng)中存在一部分節(jié)點收到的信息和另一部分節(jié)點的收到的信息是不同的,那最終所有的節(jié)點應該以哪一條信息為標準呢?

假設分布式網(wǎng)絡遵從少數(shù)服從多數(shù)的情況,那如果全網(wǎng)超過一半的節(jié)點同時作惡,去篡改了已經(jīng)存在的某條信息,那系統(tǒng)也只能接受這條不正確信息,導致系統(tǒng)的前后不一致。

這兩種問題可以統(tǒng)稱為系統(tǒng)一致性問題。

三、神奇的比特幣網(wǎng)絡

中本聰大神為了解決分布式系統(tǒng)中的拜占庭將軍問題,開創(chuàng)性的提出了工作量證明機制(POW),一舉解決了單點一致性和系統(tǒng)一致性問題。

先簡單理解一下工作量證明機制是什么(我會在后面一期中進行更詳細講解):工作量,顧名思義就是要干活,在比特幣網(wǎng)絡中要做的就是全網(wǎng)節(jié)點要共同算一道數(shù)學題,誰先算對,誰就能獲得發(fā)出一條消息的權(quán)利,并且系統(tǒng)還會給算對的節(jié)點額外的獎勵;然后全網(wǎng)節(jié)點在這條信息之后開始計算新的數(shù)學題。

1.如何解決的單點一致性問題

通過工作量證明機制,每個節(jié)點不再能隨便發(fā)送信息了,只有正確算出那道數(shù)學題才能發(fā)送一條消息。

這就降低了節(jié)點發(fā)送消息的速率,保證一段時間內(nèi),大部分節(jié)點收到的是一條一樣的消息。

2.如何解決系統(tǒng)一致性問題

為了解決系統(tǒng)的一致性問題,比特幣網(wǎng)絡提出了最長鏈概念和6次確認概念。

(1)最長鏈是什么?

可以理解為:節(jié)點發(fā)送一個消息就是一個區(qū)塊,一個節(jié)點接收上個節(jié)點發(fā)出的消息之后,在這個消息的基礎之上開始進行新的數(shù)學題計算來獲取發(fā)送消息的權(quán)利,并產(chǎn)生新的消息區(qū)塊,這些區(qū)塊組成一條首尾相連的鏈條。

在系統(tǒng)內(nèi)信息傳輸?shù)倪^程中,難免會出現(xiàn)節(jié)點A和節(jié)點B幾乎同時算出數(shù)學題的情況,這個時候它們向外發(fā)送消息,可能離節(jié)點A近的節(jié)點先聽到A的消息,離節(jié)點B近的節(jié)點先聽到B的消息。

節(jié)點都以最先收到的消息為準,分別開始在其后進行數(shù)學題計算。

出現(xiàn)這種情況,在系統(tǒng)內(nèi)就會出現(xiàn)兩條消息鏈條,出現(xiàn)了系統(tǒng)不一致性,如何解決呢?這里就采取了最長鏈為標準。

全網(wǎng)節(jié)點約定:只在消息最多的那條數(shù)據(jù)鏈條之后進行數(shù)學計算和消息連接,節(jié)點時刻監(jiān)聽全網(wǎng)狀態(tài),確定自己是不是在最長鏈條上;如果不是,則立即切換到最長鏈去進行數(shù)學題計算。這就保證了系統(tǒng)內(nèi)只有一套合法的消息鏈條。

C在收到A的消息之后優(yōu)先算出了數(shù)學題,那這個時候A和C所在的就是最長鏈,B所在的鏈條將會被舍棄,然后F,G,H節(jié)點會開始在C之后進行數(shù)學題計算。

(2)6次確認是什么

為了防止在比特幣網(wǎng)絡中出現(xiàn)信息篡改情況的發(fā)生,需要每條消息經(jīng)過6次確認沒有更改之后才認為有效。

通過6確認可以大大提高系統(tǒng)的不可篡改性,因為如果想更改一條已經(jīng)確認的消息,需要正確算出6個數(shù)學難題,然后還需要保證自己的更改之后的消息鏈條為最長鏈。

這會消耗大量的成本,導致篡改數(shù)據(jù)的成本高到無法承受,最大程度的保證了系統(tǒng)不會出現(xiàn)確認過的消息前后不一致的問題。

四、總結(jié)

比特幣雖然通過采用工作量證明的機制解決了拜占庭問題,但是也造成了一些新的問題:因為在比特幣網(wǎng)絡中節(jié)點需要通過計算數(shù)學題的方式來獲取發(fā)消息的權(quán)利,這就需要CPU之間競爭誰的計算力強,會造成巨大的能源浪費——這也是比特幣網(wǎng)絡經(jīng)常被人詬病的一個原因。

為了解決比特幣網(wǎng)絡存在的能源浪費,促使人們?nèi)ヌ剿鞲噢k法去解決拜占庭將軍問題,這就出現(xiàn)了后來的權(quán)益證明(POS)、股權(quán)委托證明(DPOS)等等。這些機制我將會在后面的期刊中進行詳細的介紹。

版權(quán)聲明:

數(shù)字簽名:Press.one

 

作者:liheng,區(qū)塊鏈探索者、互聯(lián)網(wǎng)產(chǎn)品經(jīng)理,超級個體修煉中,只創(chuàng)作對用戶有價值的內(nèi)容。

本文由 @liheng 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載

題圖來自作者

更多精彩內(nèi)容,請關注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 提出一個疑惑!如果這樣的話那么A能不能夠在最長鏈上豈不是取決于他廣播的節(jié)點C接到消息的間隔以及C的計算能力了?這樣不公平啊

    來自吉林 回復
  2. 終于有一篇通俗易懂的講清楚區(qū)塊鏈原理的文章了 ??

    來自廣東 回復
  3. 牛皮

    來自重慶 回復
  4. 學習了,可以轉(zhuǎn)發(fā)朋友圈嗎

    回復
    1. 可以的,注明出處就行

      來自浙江 回復
    2. 好的,謝謝

      來自北京 回復
  5. 深圳

    回復
专题
30633人已学习19篇文章
2018年过去了,你都收获了什么?新的一年,你需要如何前行?
专题
14893人已学习13篇文章
营销自动化是一个可用于自动执行营销任务的工具。本专题的文章分享了如何搭建自动化营销平台。
专题
125401人已学习18篇文章
你说你会竞品分析,我信!但是肯定写的不好,不服看看别人的。
专题
13166人已学习12篇文章
本专题的文章分享了金融产品经理需要知道的金融基础知识和产品观。
专题
47627人已学习18篇文章
如何提升用户留存率?——相信这是困扰无数产品和运营的问题。