區塊鏈本質論:計算及共識本質

區塊鏈本質論

區塊鏈被大家關注事件好事情,但非常不希望看到各種區塊鏈項目盲目上馬,造成各種社會資源的浪費。區塊鏈技術本身尚在發展階段,還有很多核心技術問題有待突破,對區塊鏈技術本質還充斥著各種不同的理解。我們將就區塊鏈的計算本質,技術難點,業務調整,社會影響等方面和大家分享。

(1) 計算範式

區塊鏈的本質是 使馮諾依曼計算體系不再依賴特定的計算物理設施,從而使得其計算過程和相關的存儲和通訊,不再為單方控制,而由各個參與者多方分時控制。這是一種全新的計算範式,區塊鏈計算範式,所謂的不可篡改數據庫,僅僅是這個內涵的一部分外延。共識算法,分佈式網絡是當前實現這一計算範式的重要技術手段。這些是區塊鏈的技術本質。

這是什麼意思呢?之前所有信息系統,比如支付,搜索,推薦什麼的,都是單一的一家企業掌握這個計算過程的全部,數據也好,計算代碼也好,計算的輸入/輸出都被一個單一企業完全控制。如果這個計算是為了大規模的公眾服務的,那麼這個企業可以通過任意操縱這個計算過程,任意修改數據和狀態,限定和歧視來自外部的輸入,從而謀求高額利潤甚至造成嚴重的社會問題 (這類問題在搜索領域已經凸顯)。同時企業也需要承擔巨大的責任保護好這個信息系統的數據和計算過程,否則就會導致嚴重的大規模數據洩露問題(例如時常聽到的拖庫事件,導致幾百萬用戶的個人數據被盜取,甚至如開房記錄等)。

區塊鏈本質論:計算及共識本質

區塊鏈計算範式,由多方來分時控制計算過程,而不是單一方

在區塊鏈計算範式中,將是多家企業和機構,共同控制這個計算過程,這一步計算在一家公司的計算機上完成,下一步計算在另一家機構的計算機上完成。各家接力計算過程,任何一家機構,如果篡改計算邏輯,或者惡意修改數據,立刻會被下一個計算接力的公司發現,並且回滾到上一步正確的計算步驟。這個一旦預設好計算邏輯和規則,沒有任何一家公司可以篡改,也沒有任何一家公司可以操縱這個計算過程。

這樣做的一個核心優勢是,在區塊鏈計算範式中,當然像Google那樣所謂的不做惡,將不再是個口號,而是一個可以被證明被驗證的。也就是說區塊鏈計算範式的根本優勢在於:

在業務全部信息可形式化的範疇內,讓這個計算系統可以自證清白。

這件事情是之前互聯網技術棧無法實現的,也是未來區塊鏈計算範式給實際業務帶來的根本上的全新技術支撐。正因為這個技術支撐,比特幣得以實現,沒有任何人可以操縱比特幣系統既定的發行規則和轉賬規則,雖然這個網絡允許任何人以匿名方式參與其接力計算過程,即出塊。我們通常說的不可篡改數據庫也源於這個技術支撐,我們一開始約定了數據不可篡改,只可追加,在區塊鏈的計算範式下,這個約定就能被嚴格執行,不會被人為操縱。這裡真正的挑戰並不是設立不可篡改這個規則,而是如何讓這個規則被嚴格執行,這一點是區塊鏈的核心能力。

(2) 共識機制

提到區塊鏈,Consensus 是其中最為大家關注的一個新概念,被翻譯成共識機制,或共識算法,或共識協議。這個東西到底是幹嘛的呢?共識機制本質是一個解決方案,當一個分佈式系統裡面出現不一致的情況時,我們如何最終裁定一個唯一的大家公認的結果,消解這個不一致性。注意了,這裡共識僅僅指分佈式系統裡面的一個算法方案,和我們通常意義上的輿論呀,社會認同呀,組織關係呀什麼的,毫無關係,就像是雷鋒和雷鋒塔一樣。別被忽悠了 ...

為什麼區塊鏈會需要共識機制呢,究其根本,源自於區塊鏈的計算本質。

因為在區塊鏈系統中,計算是通過全網各方接力完成的,在去中心化的區塊鏈網絡中,並沒有一個總指揮來分派這個接力過程,那麼即使沒有惡意攻擊,也難免會發生己方爭搶接力的情況,從而導致整個系統中出現多個不一致的接力結果。而共識機制所起得作用,就是在這個時候最終認定,哪個結果該留下來,後面按這個接著走;哪個結果會被拋棄。

對於這個問題,很早在分佈式系統領域,為了解決容錯問題,早有答案,並被歸納為一個叫做拜占庭將軍問題 (The Byzantine Generals Problem),其對應的有效解決方案成為拜占庭容錯(Byzantine Fault Tolerance),就是經常聽到的BFT。早在2007年,這個問題就有了高效的算法 (PBFT),但是為什麼2008年末,中本聰發表的比特幣系統設計方案中卻採用了完全不同的設計,而沒有采用BFT類的算法呢?

我們先看看容錯是什麼?假設有100個傳感器,在觀測比如機器是否正常運轉。那麼如果有一部分的傳感器壞了,給出了不正確的觀測值,我們該如何最終推斷正確的觀測結果呢?這個就是容錯。當然,邏輯上的解法正如你現在直接想到的,少數服從多數,事實上也確實如此簡單。當然實際的算法中要互相傳遞和迭代最終認定的結果(基於數字簽名),要限制結果認定的時間期限(所謂的epoch),要處理多數不夠多的情況等。

從上面的例子可以看到,在BFT中,少數服從多數的這個數,來自於多少個共識的參與者。這個參與者的總是必須是預先設定好的。這意味著誰是參與者,得有個預先協商和設定的過程,在區塊鏈系統中,有個叫法,叫做聯盟鏈或者許可鏈(permissioning blockchain system)。這就是為什麼叫做拜占庭將軍問題,因為你得先是一個將軍,那麼問題來了,誰來批准你成為一個將軍呢?

這就是比特幣系統一開始不採用BFT算法的本質原因。在比特幣系統中,並沒有一個參與者的批准過程,任何人都可以直接參與這個共識過程,即所謂的公鏈或者叫無需許可鏈(permissionless blockchain system)。這是,我們如何利用少數服從多數呢?我們連總共有多少個參與者都不知道。這個部分就是比特幣系統設計最耀眼的部分。很多人不明白這件事情,就覺得比特幣系統好像就是一堆現有技術的堆砌,沒什麼技術含量。

在比特幣系統中,少數服從多數的這個數,不再是多少個共識的參與者,而是一次次的哈希部分碰撞的計算結果。然後結合最長鏈規則來形成共識,即所謂的工作量證明(Proof-of-Work)。從這裡大家可以看到,工作量證明方案解了一個比拜占庭將軍問題更難更挑戰的問題,就是在參與者集合未知的情況下,實現共識的一致性。 當然算法具體實現還有不少細節,工作量證明的難度調整呀,一致性後置的最長鏈原則,以及後面被改進的最重子樹的原則等。

接著有了所謂的資產證明(Proof-of-Stake)共識系統,利用資產的數量來定義這個少數服從多數的這個數。利用資產的數量先行定義BFT共識算法中所需要的這個預設的參與者集合。這樣,也可以實現無需許可鏈。也是一個不錯的辦法,只是,一開始初始的資產從何而來呢?

最後提一句性能,也就是吞吐量的事兒。很長一段時間大家以為吞吐量由共識算法決定,然後事實上並不是這樣。上面提到的集中共識算法,都可以設定任意的塊大小和出塊間隔,來現實需要的吞吐量和塊確認延遲。只要,整個底層網絡有足夠的帶寬。


分享到:


相關文章: