前段時間寫零知識證明的文章,有個盒友對文章提到的區塊鏈很感興趣,也提了很多有意思的問題,比如“如何保證虛擬貨幣發行商不跑路”,“一個比特幣到底是什麼”,這些一句兩句確實解釋不清楚,那麼今天試著從構建角度出發,解釋一下比特幣和區塊鏈的原理(沒有數學推導,放心食用)。
首先,我們要明白區塊鏈設計的初衷是什麼,是去中心化,所謂中心化,通常有一箇中央服務器或權威機構來集中處理和管理主要事務。比如,傳統的銀行系統就是中心化的,銀行作為中心機構來處理資金的存儲、轉賬等業務;許多社交媒體平臺也是中心化的,平臺運營方掌握著用戶數據和內容的管理大權。
中心化有個很大的問題,容易產生權力集中和壟斷,可能對用戶權益造成潛在威脅,同時,可能存在隱私洩露等安全隱患,因為中心機構掌握大量關鍵信息。所有我們要倡導去中心化,去中心化的特性使得所有參與者共同維護和驗證交易記錄,共同承擔了彼此之間的信任要求,無需依賴第三方中介。
類似於區塊鏈的協議實際上早在上世紀80年代就被髮明出來了,並且在90年代用於驗證文檔中的時間戳。而第一個真正的去中心化區塊鏈則是由一個或以化名為“中本聰”的人在2008年的《比特幣白皮書》中提出的。
萊特幣創始人表示,中本聰如果想要展示自己,應該用創世密匙籤一條信息。任何做不到這一點的行為都極有可能是欺詐行為。
區塊鏈可以理解為一種公共記賬的技術方案,其基本思想可以這樣理解:通過建立一個互聯網上的公共賬本,由網絡中所有參與的用戶共同在賬本上記賬與核賬,每個人(計算機)都有個一樣的賬本,所有的數據都是公開透明的,並不需要一箇中心服務器作為信任中介,在技術層面就能保證信息的真實性、不可篡改性,也就是可信性。
下面從技術層面簡單介紹一下其實現,需要事先引入一個知識點,哈希函數:
哈希函數即一種將任意長度的消息或數據壓縮成固定長度的摘要或哈希值的函數。
哈希函數具有以下重要特點:
- 確定性:相同的輸入始終會產生相同的哈希值。
- 單向性:從哈希值幾乎不可能反向推導出原始輸入。
- 雪崩效應:輸入的微小變化會導致哈希值發生巨大的變化。
輸入字符串一丟丟的改動,哈希函數給出的輸出結果都將完全改變
下面我們就可以構建區塊鏈網絡了,當用戶提交交易,會將價值從一個賬戶轉移到另一個賬戶時,待執行的交易會被打包進“區塊”中,然後網絡中的每個節點都會對這些交易進行處理和驗證。讓所有節點都驗證交易是為了確保帳本中的變更得到重複驗證。
因此每個交易記錄都是以區塊的形式存儲,然後再廣播到系統中的其他用戶中。而區塊之間相互連接,形成一條由系統內全體用戶共同維護的區塊鏈(即區塊的鏈條)。
那麼很容易就會出現疑問,所有人保存的區塊鏈是事實上是同一條鏈,那麼如何保障修改後大家還是同一個鏈呢?如何避免有人造假呢?
的確如此,互聯網節點遍佈全球,區塊添加的廣播過程也需要時間,因此肯定會存在不同節點收到不同區塊存儲的問題。
如此一來這個網絡就亂套了。為了降低傳播時間的影響,出現了一個極其簡單粗暴的方式限制區塊生成的速度,即比特幣系統的核心思想採就是用算力限制區塊的生成速度。
比特幣系統要求,每個用戶在發佈新區塊前,必須先完成一個任務。這個任務就是:
- 根據前一區塊的一些信息加上新區快的一些信息,生成一個字符串S;
- 選擇一個字符串B,與S合併成“BC”,且要求“BC”的哈希函數滿足某個條件,比如映射結果的前72位為0(概率:2^(-72));
上面的第2步,根據我之前介紹的哈希函數單向性,必須通過暴力遍歷(就是一個一個試)來計算,時間恰好是我們宇宙中最稀缺的資源。因此我們可以調節這個難度,比如使得系統中所有平均每20分鐘才會有一臺設備完成要求的任務,猜出符合要求的字符串B。如此一來,撞車的概率就會大大降低。補充一句,這個難度是不斷調節的,以適應硬件算力的提升和區塊鏈的長度增加,比如當比特幣挖到一半(比特幣的總數是固定的大概21000萬枚)的時候,計算難度就會提高一倍。
這裡有一個很殘酷的事情,當一個人成功計算出哈希值時,如果同一時間其他人沒有計算出這個值,即時已經算到了90%,也只能放棄計算,校驗該結果的準確性,並將該節點成功挖出的區塊(副本)追加到自己區塊鏈的末尾。
雖然因此概率大大降低,但仍然無法排除存在撞車的概率,同時為了避免有人造假生成假區塊,因此引出了區塊鏈驗證中最核心的思想,相信最長的區塊鏈。
這裡引入一個分叉的例子,假如幾乎同一時間,節點A和節點B同時宣稱計算出來了新區塊。其他節點也幾乎同時參與了對這兩個區塊的校驗,結果發現這倆都沒問題,這時各節點也開始犯困,因為在他們的視野裡他們並不清楚最後哪一個區塊應該會被主鏈接納。如果都連在自己區塊鏈末尾,產生分叉,區塊鏈變成了兩條。
這已經嚴重違背了區塊鏈裡最基本原則——所有節點共同維護同一份數據。所以,為了解決這個問題,區塊鏈世界引入了一條新的規則——擁有最多區塊的支鏈將是真正被認可有價值的,較短的支鏈將會被直接Kill掉,被Kill掉後掉落的新區塊會重新被定義為“未確認”。
如果有人想對區塊鏈造假,那麼他就需要一直搶先生成假的新區塊,並廣播出去。這就要求造假者生產新區塊的速度,要快於系統中的其他所有用戶的生成能力之和(與世界為敵)。換句話說,造假者需要用戶有和其他用戶算力之和匹敵的算力,而這幾乎是不可能的。
這也就是區塊鏈世界裡另外一個著名的概念,叫做“51%攻擊”,但這也僅僅是一個理論值,如果你永遠全球51%的算力,為了回滾剛剛發生的一筆交易記錄,或者為了添加一筆假的交易記錄,山東大學招生處成功發起了51%攻擊,這意味著很快整個區塊鏈系統將會崩盤,因為這次攻擊已經嚴重傷害到人們對這套系統的信任,接著比特幣開始暴跌至幾乎一文不值,但是這個擁有51%算力的山大招生處原本完完全全可以通過單純守法挖礦的方式獲取更多收益,因此即使是國家力量,也很難干涉一條大的區塊鏈的運轉(比如比特幣)。
那麼這個提到的挖礦到底收益是什麼呢?這就是bonus機制,區塊鏈系統為了鼓勵大家生成新的區塊,於是在開始時就定下規則:
- 每當一個新區塊加入主鏈,這個區塊的發行者就會被贈與50個BTC;
- 每21萬個區塊後,獎勵額度縮水一半;
這也就解釋了,為什麼BTC的發行上限是21000萬個。這個機制牢牢限制死了比特幣的總量,使得比特幣不可能超發,這也是其保值性的一個體現。
綜上所述,以區塊鏈為基礎的虛擬貨幣是完全去中心化的,和Q幣或者點券這種中心化發行的虛擬貨幣有本質區別,區塊鏈本質上是一種解決信任問題、降低信任成本的信息技術方案。區塊鏈的應用,可以取締傳統的信任中介,顛覆傳統上存在了幾千年的中心化舊模式,在不需要中心化信任中介的情況下,解決陌生人間的信任問題,大幅降低信任成本。正是基於這樣的原因,在全球範圍內的影響力和關注度相當高。
參考:知乎(區塊鏈是什麼,如何簡單易懂地介紹區塊鏈?)
IBM(區塊鏈是什麼,如何簡單易懂地介紹區塊鏈?)
知乎專欄(從零開始創建一個區塊鏈)
圖片均來自網絡。