區塊鏈淺析

zimo發表於2019-01-29

前言

部落格停更已經一陣子了,原因林林總總,從畢業到搬家,人生踏入了另一段旅程。今天我們的話題聊一聊區塊鏈。這是我與我畢設相關的主題。大家對於區塊鏈的爭議,似乎一直存在。幣圈那些陳穀子的事情,影響著區塊鏈的發展。目前,眾多區塊鏈團隊中,真正在研究區塊鏈應用場景的,少之又少,同樣能讓區塊鏈應用落地,也需要時間。但是,區塊鏈技術的出現,可以說是一個金融領域和網際網路領域的一個里程碑。下面我們來聊聊區塊鏈技術吧。如果你喜歡我的文章,歡迎評論,歡迎Star~github部落格

正文

其實,早在比特幣大火之前,我就聽說過區塊鏈(看過一篇公眾號講述區塊鏈與人才鏈之間的相關性)。當初,對於區塊鏈的理解,並沒有特別深刻,同時也毫不在意。在經濟社會中,資本已經能夠推動技術的發展了。直到比特幣大火時,才對區塊鏈技術感到一絲興趣。

看過比特幣的白皮書,發現區塊鏈技術是比特幣的一個基礎。同時,畢業設計選擇的主題也是與區塊鏈相關的方向,所以,在此聊聊區塊鏈。

簡單來說,區塊鏈就是一個分散式的賬本,或者說分散式的資料庫。這個資料庫可以同步到節點網路中的每個節點。用阮一峰老師部落格中的一張圖來形容,如圖:

區塊鏈

這種圖中,我們可以看到,之所以說是去中心化,是因為在整個節點網路中,每個節點都是參與者,每個節點都能夠進行資料處理的操作,並沒有一個統一的中心化伺服器來進行業務處理。然後,每個節點處理的結果會被傳播到整個網路中去,來同步全部的網路。

區塊鏈的英文比較有意思,叫做blockchain。我們可以將blockchain拆分開來看就是block+chain(塊+鏈)。所以,我們可以先來了解一下區塊的內容。

區塊

區塊是什麼?區塊就是一個類似於資料庫的東西,用來記錄資料的地方。所以,每次系統寫入資料時,都會建立區塊。

下面,我們來看一下一副區塊的例項圖,如下:

區塊

這裡開頭有個Previous Hash就是用來記錄上一個區塊的Hash值的。這樣就可以上一個區塊和下一個區塊連線起來。

同時,它也記錄了區塊的時間和區塊內部的Data。Hash值,就是一種加密後得出來的字串。Hash是一種單向加密,現實中很少出現Hash碰撞的事件。一般而言,Hash值的破解只能使用只能使用彩虹表等手段才能達到。其本身的安全性就是相對一般的加密方法要高的。我們會接觸到的Hash加密有MD5加密、SHA128和SHA256。目前而言,SHA256是很難破解的。

說了這麼多Hash相關的內容,回過頭來說一下Block。我們可以來看一下,實際的一些Block表內容,如圖:

區塊列表

這是一個測試網路的區塊列表,我們可以看到它的block ID就是一個hash值。同時,它具備高度等特殊欄位,來記錄整個區塊的內容大小。

瞭解了區塊之後,我們來看一下區塊鏈的形成。

鏈的形成

拿比特幣舉例,交易比特幣的過程就是,區塊形成的過程。區塊的建立,就像賬本的資料一樣,有了資料就有了區塊。同樣的,生成區塊的過程會產生一定的獎勵。下面生成的區塊會連線上一個區塊的hash,這樣可以保證整個區塊鏈的不可更改性。如圖所示:

鏈的形成

如果黑客修改了第51塊的內容,那麼他就必須修改52塊中51的Hash值。同時,修改了52的內容,導致了52本身的Hash值發生了變化。所以,這就導致了一系列的連鎖反應。同時,區塊鏈會往整個網路廣播整個過程。這樣,網路節點中的每個節點都會收到改變,改變自身的區塊內容。

這樣的設計,可以保證整個網路中的內容沒有辦法被外力而改變。這也說明整個網路是安全的。那麼什麼是51%的攻擊呢?

我們來舉個例子:

假設我具備了全網51%的算力,那麼,我可以偷偷的計算出一個這樣的區塊鏈,包含我所有的比特幣交易到我的私人賬戶的資訊。這個區塊鏈的長度為10,但是我不向全網進行廣播。同時,我將所有的比特幣放入到交易市場進行售賣。這筆交易記錄在正常的區塊鏈中。

當我交易所得美元進行提取時,正常的區塊鏈長度應該是9。而我的隱藏的區塊鏈長度是10,同時,將這個區塊鏈廣播到網路中去,然後通過觀察網路會認為我後發的區塊是正確的,從而到達修改了那筆交易記錄的目的。

之後,就是雙花問題的解決了。

雙花問題

何為雙花問題?從表意上來說,就是一個人在同一時間進行了兩筆交易。這個問題,一直是支付系統的難點。無論是中心化的支付系統,還是去中心化的交易系統,都得面對這個問題。舉個例子:

某某人,手裡有20塊錢。他同時與兩個人進行了一筆20塊錢的交易。現實生活中,你可以明確地發現問題。但是,相對於支付系統而言,併發的情況經常發生。一旦一個不完善的支付系統,雙花問題是很容易發生的。當然,後端處理過程中,可以通過佇列的形式來解決問題。但是,對於去中心化的交易系統而言,這個問題也需要解決。

每一筆交易的產生,都會產生一個區塊,那麼,往往會發現這麼一種情況,如圖:

雙花

我們可以看到,Block A和Block B就會同時去連線上一個區塊。那麼,相對於這個問題,比特幣系統採用的規則就是選最長的那條鏈。通常,比特幣採用的是6次確認規則。在1小時內,根據10分鐘產生一個區塊的原則,往往會生成一條6個長的區塊。那麼,只要確認下這條區塊,就可以避免去連線其他區塊了。

理論上是,區塊鏈越長,準確性越高。

#總結

相對於中心化的高成本的方式,區塊鏈技術可能是一種解放生產力的技術。當然了,區塊鏈的實際落地場景並不多,比特幣是為數不多的,真正落地的應用。作為一名開發者,我相信區塊鏈的未來。這篇內容中,我們講述了:

  1. 區塊的產生
  2. 鏈的形成
  3. 雙花的問題

最後,希望大家能夠對區塊鏈感興趣。

如果你對我寫的有疑問,可以評論,如我寫的有錯誤,歡迎指正。你喜歡我的部落格,請給我關注Star~呦github部落格

歡迎訂閱微信公眾號

微信公眾號

相關文章