作者的話:一聽到區塊鏈技術,大多數人都會覺得很神秘,論壇上的所謂的大神們一談到區塊鏈都會拿出什麼「共識機制」、「對等網路」等名詞來唬人,其實在這裡我想給大家說的是,區塊鏈本身不是什麼新技術,什麼?不是新技術?你開玩笑吧?區塊鏈也是這幾年才興起的,怎麼能不算新技術呢?好吧,凡是有這樣的認識的人,可以說對區塊鏈認識還是小白級別,那麼更有必要了解下區塊鏈的技術組成。
區塊鏈本身只是一種資料的記錄格式,就像我們平常使用的excel**、word文件一樣,按照一定的格式將我們的資料儲存在電腦上。與傳統的記錄格式不同的是,區塊鏈是將產生的資料按照一定的時間間隔,分成乙個個的資料塊記錄,然後再根據資料塊的先後關係串聯起來,也就是所謂的區塊鏈了。按照這種規則,沿著時間線不斷增加新的區塊,就好像是時光記錄儀一樣,記錄下發生的每一筆操作。
這種資料記錄的方式很新穎,在這種記錄方式下,資料很難被篡改或者刪除。有朋友可能會有說,這有什麼不好修改、刪除的!比如我在自己電腦上儲存了乙份excel資料,再怎麼複雜的格式,我也能隨便改呀!如果區塊鏈的資料格式只是應用在單機環境或者乙個中心化的伺服器上,那確實是的,畢竟自己對自己的資料擁有完全的支配權力。然而,一切才剛剛開始,我們接著看。
如果說區塊鏈代表的僅僅只是乙個記錄格式的話,那麼也實在算不上是偉大的發明,也看不出有什麼特別的能力,比如難以篡改之類。事實上,區塊鏈是一整套技術組合的代表,在這一組技術的配合下,才能煥發出驚人的能力和耀眼的光芒。區塊鏈系統有很多種,就像聊天軟體有很多種,電子郵箱有很多種一樣,而無論是什麼樣的區塊鏈系統,其技術部件的組合都是類似的。就像汽車基本都是由發動機、底盤、車身、電器四大部件組成的,計算機都是由cpu、儲存器、輸入/輸出裝置組成的,不管是位元幣、萊特幣、以太坊還是其他,核心結構和工作原理都是共同的。我們就來看看最基本的技術組合都有哪些:
如圖所示,這是區塊鏈系統結構的基本組成,各種系統本質上都是在這個經典結構之上直接實現或者擴充套件實現。這些零部件裝配在一起,組成了乙個區塊鏈軟體,執行起來後就稱之為乙個節點,多個這樣的節點在不同的計算機裝置上執行起來,就組成了乙個網路。在這個網路中每個節點都是平等的,大家互相為對方提供服務,這種網路被稱為點對點的「對等網路」。為了讓大家對這些組成模組的名詞有更具體的感受和理解,我們一一來解釋一下。
所謂共識,就是指大家都達成一致的意思。在生活中也有很多需要達成共識的場景,比如開會討論,雙方或多方簽訂乙份合作協議等。在區塊鏈系統中,每個節點必須要做的事情就是讓自己的賬本跟其他節點的賬本保持一致。如果是在傳統的軟體結構中,這幾乎就不是問題,因為有乙個中心伺服器存在,也就是所謂的主庫,其他的從庫向主庫看齊就行了。在實際生活中,很多事情人們也都是按照這種思路來的,比如企業老闆發布了乙個通知,員工照著做。但是區塊鏈是乙個分布式的對等網路結構,在這個結構中沒有哪個節點是「老大」,一切都要商量著來。在區塊鏈系統中,如何讓每個節點通過乙個規則將各自的資料保持一致是乙個很核心的問題,這個問題的解決方案就是制定一套共識演算法。
共識演算法其實就是乙個規則,每個節點都按照這個規則去確認各自的資料。我們暫且拋開演算法的原理,先來想一想在生活中我們會如何解決這樣乙個問題:假設一群人開會,這群人中並沒有乙個領導或者說老大,大家各抒己見,那麼最後如何統一出乙個決定出來呢?實際處理的時候,我們一般會在某乙個時間段中選出乙個人來發表意見,那個人負責彙總大家的內容,然後發布完整的意見,其他人投票表決,每個人都有機會來做彙總發表,最後誰的支持者多就以誰的最終意見為準。這種思路其實就算是一種共識演算法了。然而在實際過程中,如果人數不多並且數量是確定的,那還好處理些,如果人數很多而且數量也不固定,那我們就很難讓每個人都去發表意見然後再來投票決定了,這樣效率就太低了。我們需要通過一種機制篩選出最有代表性的人,在共識演算法中就是篩選出具有代表性的節點。
如何篩選呢?其實就是設定一組條件,就像我們篩選運動員,篩選尖子生一樣,給一組指標讓大家來完成,誰能更好地完成指標,誰就能有機會被選上。在區塊鏈系統中,存在著多種這樣的篩選方案,比如pow(proof of work,工作量證明)、pos(proof of stake,權益證明)、dpos(delegate proof of stake,委託權益證明)、pbft(practical byzantine fault tolerance,實用拜占庭容錯演算法)等,各種不同的演算法,其實就是不同的遊戲玩法,限於篇幅,這裡暫不進行演算法過程的詳述,大家只要知道這些都是一種篩選演算法就行了。區塊鏈系統就是通過這種篩選演算法或者說共識演算法來使得網路中各個節點的賬
本資料達成一致的。
密碼演算法的應用在區塊鏈系統中是很巧妙的,應用的點也很多,我們在這裡不詳細介紹密碼演算法的原理,就從幾個很關鍵的應用來介紹一下。
首先我們回顧下區塊鏈賬本格式。通過上述講解我們已經知道,區塊鏈賬本就是連線起來的乙個個區塊。那麼到底是通過什麼來連線的呢?學過資料結構的朋友都知道,在資料結構中,有一種變數叫指標,它是可以用來指向某個資料的位址的。那麼區塊的連線是不是通過這樣的資料位址呢?生活中的位址連線例子很多,比如路牌、門牌等。然而,區塊之間的連線,往往都不是靠資料位址來關聯的,而是靠一種叫作雜湊值的資料來關聯的。什麼叫雜湊值?這是通過密碼演算法中的雜湊演算法計算得出的。雜湊演算法可以通過對一段資料計算後得出一段摘要字串,這種摘要字串與原始資料是唯一對應的。什麼意思呢?如果對原始資料進行修改,哪怕只是一點點修改,那麼計算出來的雜湊值都會發生完全的變化。區塊鏈賬本對每個區塊都會計算出乙個雜湊值,稱為區塊雜湊,通過區塊雜湊來串聯區塊。這有乙個很好的作用就是,如果有人篡改了中間的某乙個區塊資料,那麼後面的區塊就都要進行修改,這個時候並不是簡單地修改一下後面區塊的位址指向就能結束的,由於後面的區塊是通過區塊雜湊來指向的,只要前面的區塊發生變動,這個區塊雜湊就無效了,就指不到正確的區塊了。
另外乙個對密碼演算法的應用就是梅克爾樹結構。通過上述解釋我們知道,每個區塊會被計算出乙個雜湊值。實際上,除了整個區塊會被計算雜湊值外,區塊中包含的每一筆事務資料也會被計算出乙個雜湊值,稱為「事務雜湊」,每乙個事務雜湊都可以唯一地表示乙個事務。對乙個區塊中所有的事務進行雜湊計算後,可以得出一組事務雜湊,再通過對這些事務雜湊進行加工處理,最終會得出一棵雜湊樹的資料結構。雜湊樹的頂部就是樹根,稱為「梅克爾根」。通過這個梅克爾根就可以將整個區塊中的事務約束起來,只要區塊中的事務有任何改變,梅克爾根就會發生變化,利用這一點,可以確保區塊資料的完整性。
當然,密碼演算法在區塊鏈系統中的應用還遠不止這些,比如通過密碼演算法來建立賬戶位址、簽名交易事務等,以後有機會再詳細介紹,這裡只做科普性的講解。
指令碼系統在區塊鏈中是乙個相對抽象的概念,也是極其重要的乙個功能,可以說區塊鏈系統之所以能形成乙個有價值的網路,依靠的就是指令碼系統,它就像是發動機一樣,驅動著區塊鏈系統不斷進行著各種資料的收發。所謂指令碼,就是指一組程式規則。在區塊鏈系統中,有些系統中的程式規則是固定的,比如在位元幣系統中,只能進行位元幣的傳送與接收,這個傳送與接收的過程就是通過實現在位元幣中的一組指令碼程式來完成的;而有些系統是允許使用者自行編寫一組程式規則的,編寫好後可以部署到區塊鏈賬本中,這樣就可以擴充套件區塊鏈系統的功能,比如以太坊就是通過實現一套可以自定義功能的指令碼系統,進而實現了智慧型合約的功能。
指令碼系統使得在區塊鏈中可以實現各種各樣的業務功能。本來大家只是通過區塊鏈來記財務賬的,通過指令碼系統,大家可以使用區塊鏈來記錄各種各樣的資料,比如訂單、眾籌賬戶、物流資訊、**鏈資訊等,這些資料一旦可以記錄到區塊鏈上,那麼區塊鏈的優點就能夠被充分地發揮出來。
認識到區塊鏈的技術組成,所有的區塊鏈專案基都是由區塊鏈賬本、共識機制、密碼演算法、指令碼系統、網路路由這五項技術組成並延伸的,看到這裡是不是覺得區塊鏈中的每一項技術都不能算是新技術,但是就是將這些成熟的技術巧妙的結合起來,才形成現在的區塊鏈技術。其實仔細想想,這也是很正常的。比如說汽車的發明火車的發明,每一項發明都是將已有的技術整合到一塊,產生了乙個新的事物。
區塊鏈技術
區塊鏈本質上是乙個對等網路 peer to peer 的分布式賬本資料庫。位元幣的底層就採用了區塊鏈的技術架構。區塊鏈本身其實是一串鏈結的資料區塊,其鏈結指標是採用密碼學雜湊演算法對區塊頭進行處理所產生的區塊頭雜湊值。每乙個資料塊中記錄了一組採用雜湊演算法組成的樹狀交易狀態資訊,這樣保證了每個區塊內...
區塊鏈技術
目前,比較火的區塊鏈逐漸被重視起來,其根源與其說是其技術上帶來的人類的共識與寫作機制的轉變,不如說是由位元幣炒作帶來的利潤衝擊了投機者的內心。不過,這並不一定就是壞事,對於區塊鏈這個技術而言,是有利的,因為這樣的環境下,會帶來無數的開發者磨刀立馬,為其注入力量。區塊鏈是一種能夠包含交易資訊的從前往後...
區塊鏈技術
現階段,區塊鏈技術最顯著 的內涵在於使用分布式記賬 非對稱加密 點對點傳輸等技術組合,確 保資料不可篡改 全程可追溯,從而解決社會交往中的信任構建難題 當下區塊鏈之所以備受熱捧,乙個重要的原因是被貼上了許多特別的標籤,比如 去中心化 全程可 追溯 不可篡改等。歷史證明,商機並非都是先到先得 先到多得...