比特幣區塊鏈是一種分散式的事件流日誌

banq發表於2016-03-21
比特幣的區塊鏈機制其實是一種分散式的事件流日誌,這個事件流記錄著所有的比特幣交易事件。

比特幣是一種虛擬貨幣,我們知道我們可以透過自己設立一個機器來專門挖礦,也就是“無償”獲得比特幣,但是這個“無償”並不是真正無償,你的電腦將以算力和工作量的付出為代價,其實你的電腦就是參與一個全球的分散式系統

雖然電腦系統是分散式的,但是比特幣的所有交易需要記錄在一起,解決這個記錄問題有兩種方式:
第一種是最簡單的方式,設立一箇中心儲存庫,所有的交易進出資料都傳送到這個中心儲存庫,這是以資料庫為中心的軟體系統的普遍特徵,這種模式問題是存在一箇中心資料庫,而比特幣系統本身是分散式的,沒有任何中心,因此這種中心資料庫方式顯然不適合比特幣的記賬管理方式;

第二種是用分散式方式完成業務上需要集中記賬管理的模式,也就是說,全世界各地伺服器的比特幣交易肯定是必須記賬到一個統一的流水賬本上,只是這個統一流水賬本不是對應一箇中心儲存庫來儲存它,而是每臺機器上都保留一份統一流水賬的複製。這個就非常類似分散式系統中讀寫操作了,每臺機器可以自由地讀取這一份統一的流水賬本資料,但是如果需要將自己機器中發生的比特幣交易資料寫入這個流水賬中,那麼就需要擁有寫的許可權,實際是類似日誌追加的權力,我們知道普通日誌追加append就是開啟日誌檔案,在檔案最後一行追加新的一行即可,統一的流水賬類似這個檔案,首先,你需要找到流水賬的最後一行,如同你排隊,你需要排到隊伍最後一個,但是你不需要了解整個隊伍,你只要認準你需要跟在哪個屁股後面就可以,也就是你排在哪個人後面就可以。

一個區塊是一個有唯一標識的資料塊,唯一標識也就是主鍵是一個256位的雜湊數字,使用網路一致統一的演算法生成的,每個區塊包含一個頭部,指向上一個區塊的主鍵雜湊數字,如同資料表的外來鍵指向另一個表的主鍵一樣,每個區塊除了頭部,還有交易內容,也就是發生的比特幣交易資料。多個區塊就像這樣靠著頭部資訊指向另外一個區塊串聯在一起,像個鏈條一樣,稱為區塊鏈。

很顯然,這種區塊鏈如同Stream,是一種交易的事件流,如同事件日誌儲存的是交易事件流一樣。

區塊鏈是一系列交易事件組成的“流水賬”,它是分散式的,可以在不同伺服器中共享,能夠基於大多數參與者的共識進行修改(如同分散式的Paxos Raft演算法一樣),一旦交易事件資料加入就永遠不會被刪除(日誌只能永遠被append新增),比特幣的區塊鏈包含了每個比特幣過去發生的每次交易記錄。

因此,如果你有Event Sourcing和分散式知識背景,對於資料一致性有過一定了解,那麼瞭解比特幣的區塊鏈就會非常容易。

區塊鏈最重要的核心是如何解決競爭性追加資料的情況,也就是說:同時有多個機器需要寫入交易事件,這時必須進行排隊,技術架構上我們使用一箇中心化的訊息系統對寫入事件進行排隊,但是在一個完全分散式的系統中,不可能設立中心化的訊息系統,因此,併發的多個機器需要進行競選。

比特幣的區塊鏈設計了競爭記賬和激勵機制,每個計算機以自己的計算能力也就是算力來競爭寫入記賬權力,算力高的贏得記賬的機率大,一旦獲得記賬權力,還能夠得到一定數量的比特幣獎勵。算力高是透過工作量等公開量化指標來衡量比較的。

比特幣的區塊鏈機制是基於自由的自然法則,每臺伺服器如同每個生物自由追求自己利益最大化,最終看不見的手形成一種正反饋的自然進化生態系統。

比特幣區塊鏈機制的核心思想是分散式+事件流日誌,這種核心思想可在業務領域更廣泛的應用。如數字出版 音樂發行等很多網路應用領域。

A blockchain is a distributed, concurrency safe, eventually consistent stream of transactions (ownership changed events) EventSourcing --Danny Zamorano

相關文章