區塊鏈是如何運作的——詳解7層架構

買賣虛擬貨幣
我理解區塊鏈就是一個去中心化不可篡改的資料庫,或者說是一個分散式賬本,有一個小故事幫助大家理解是怎麼回事:“位元村的故事”,在一個村子裡,一開始村民相互交易用的是黃金,後來村民發現直接用金條交易方式非常不方便,一是金條容易磨損;二是金條質量比較重,進行交易時可能需要隨身攜帶,特別不方便。
後來他們提出一種辦法,由村裡一位德高望重的村長替大家記賬,把金條收到村長那裡,記錄一下每個人有多少錢,餘額資訊就在村長賬本里記錄。之後村民們互相交易時只需要跟村長說轉了多少錢,比如張三買牛轉了多少錢給李四,村長完成這筆交易記錄之後,這筆轉帳就算是完成了。這就是中心化的賬本,也可以理解為數字貨幣的時代。但是中本聰發現這種模式可能會存在一些問題:1、中心信任程度問題,村長可以做假帳,把自己或自己朋友餘額增加,普通村民沒辦法去監管這樣的改變,這樣可能整個市場中流通的貨幣會增加,造成通貨膨脹。
2、這個賬本只儲存在村長這裡,那麼賬本維護可能會有問題。如果賬本損壞或者其他因素造成歷史記錄丟失,可能就再也找不回來了。中本聰提出了去中心化賬本的構想,目的是在沒有一個可信中心的環境建立一個全民賬本,這個賬本主要原理是大家一起記賬,每筆賬目都需要所有記賬人共識,並且每個人都存在這樣一份相同的賬本,這樣就不用擔心有個別記賬員造假、丟失的問題了。一是個人造假的賬本不會得到大家的認可,二是個人丟失賬本可以透過其他人重新獲取這個賬本來恢復所有的歷史交易記錄。不過這種分散式賬本會有一些問題需要解決:
第一個問題:賬本一致問題,因為所有人都參與記賬,每個人賬本如何保持一致是最關鍵的一個問題;第二個問題:
每個人都有這樣的賬本,意味著所有人的交易都是公開的,很可能所有人的餘額也是公開的,能否做到對交易匿名處理,就是把所有人資產資訊隱藏起來;第三個問題:交易怎麼鑑別真偽?即如何防止別人冒充你花你的錢?
第四個問題:大家都記賬,記賬肯定有消耗,需要消耗儲存、消耗精力,如何讓記賬員長期維持下去?針對這幾個問題,中本聰提出一些關鍵技術來解決這些問題,我們後面會一一講解。
區塊鏈技術架構可以分為七層,從底層往上依次是加密層、資料層、網路層、共識層、激勵層、合約層和應用層,而每一層都運用了一些技術來保證整個區塊鏈系統的正常運作。加密層1.雜湊函式;
也叫雜湊函式,是把一段資料壓縮成一個摘要,這個摘要相比原始資訊更小,但有一些比較特別的性質,首先是確定性,如果相同的輸入資料得到的輸出是相同的。基本是不可逆的,給定一個輸出,無法直接推算出輸入,雖然我們知道有無數個輸入會輸出同一個雜湊值,但如果知道雜湊值的話,很難計算出任何一個輸入。“雪崩”效應,輸入資訊只要修改一小部分,哪怕是一個單詞,一個字母,甚至1bit值,輸出的雜湊值就會產生翻天覆地的變化,這一點保證它是不可逆的。
雜湊函式有什麼用?在分散式賬本里,為了保證資料完整性,會採用雜湊值進行校驗。如,一筆交易、一頁賬本(也就是區塊的概念),用了雜湊之後生成摘要,意味著整個區塊交易資訊無法進行篡改(即無法在篡改資料之後保持摘要不變)。區塊鏈原始的定義或狹義的理解就是區塊+鏈的形式,這個鏈是透過雜湊連結起來,每一個區塊可能都有很多交易,整個區塊又可以透過雜湊函式產生摘要資訊,然後規定每一個區塊都需要記錄上一個區塊的摘要資訊,這樣一來所有區塊都可以連成一條鏈。
如果改了歷史中某一個區塊的資料,意味著這個區塊摘要值(即雜湊值)會改變,那麼下一個區塊中記錄的上一個區塊的雜湊也得做相應的修改,以此類推,也就是說如果要修改歷史記錄的話,要從那一個點開始往後所有記錄都要修改才能保證賬本的合法性,雜湊函式就提高了賬本篡改的難度。2.採用非對稱加密技術。這是相對對稱加密而言的,對稱加密中加密和解密過程用的是同一把鑰匙,而非對稱加密是加密和解密過程用的是一對金鑰,這對金鑰分別稱為“公鑰”和“私鑰”,公鑰是可以公開的,私鑰是個人儲存、個人維護的。
公鑰加密的資料只能用配對的私鑰來解密,私鑰加密的資料同樣也只能用配對的公鑰來解密。用非對稱加密就可以產生數字簽名。假設有一筆交易,我給你轉10元,這個訊息或這筆交易有固定的資料格式,透過雜湊函式算出這個交易的雜湊值(即訊息摘要),透過使用私鑰加密,得到一個數字簽名,然後可以把數字簽名以及這個訊息同時傳送給其他人。其他人拿到這個訊息和數字簽名後,首先可以把這個訊息的訊息摘要算出來,然後就可以用公鑰驗證這個簽名是否真的是由這個訊息摘要算出來的,進而判斷這個訊息是否由我簽署並且沒有被篡改。
這就是數字簽名的效果,它的作用:一是可以確認訊息歸屬,即檢驗訊息是否真的由私鑰擁有者發出的,只要拿對應的公鑰驗證去簽名,驗證透過就可以證明訊息是由私鑰擁有者發出的;二是確保訊息完整,如果訊息被篡改,那麼雜湊值就發生了變化,用同樣的數字簽名就無法驗證透過。非對稱加密和資料簽名解決了“位元村”的兩個問題:第一,交易可以鑑別真偽;第二,可以保證交易進行匿名化。現在不需要實名認證每個人有多少錢,只需要用公鑰作為錢包的地址,要花公鑰錢包裡的錢只需要用對應私鑰對一筆交易簽名,即可證明你是錢包的所有者,這筆交易別人無法篡改和偽造。
而且公私鑰可以線上下自己生成,並不需要在賬本里進行實名註冊,如果沒有賬本外的額外資訊,任何人都不知道某個公鑰錢包到底屬於誰的,這就達到了交易匿名的目的。資料層
剛才說到區塊的概念,可以理解為賬本中的一頁記賬紙,裡面記錄了若干筆交易,除此以外,區塊裡需要包含哪些資訊?首先有一個區塊高度,可以理解為賬本的頁碼;包含上一個區塊摘要資訊,這個是為了保證整個區塊鏈鏈式賬本不可篡改性;包含本區塊裡所有資料交易雜湊摘要值。網路層
網路層是用P2P網路來進行訊息的傳播,P2P網路是對等式網路,也可以稱為是無中心的自組織網路,特點是沒有中心化的伺服器,任何節點在這個網路中既是伺服器,也是客戶端。訊息的傳送、網路的組織都是自發的,整個網路可以無限擴充套件,任何節點可以隨時加入、隨時退出。網路層規定了區塊鏈系統中交易是怎麼傳輸的,以及每一頁賬本(即區塊)是怎麼傳輸的。共識層
就是要讓全網所有記賬員賬本保持一致,也就是說對所有交易有一個先後順序,達成完全一致。具體而言,共識機制主要需要解決以下三個問題:1、What,下一個區塊包含哪些交易;2、Who,下一個區塊由誰產生;

3、When,下一個區塊在什麼時候產生;


區塊鏈共識演算法用的最多的是PoW,字面意思是工作量證明,即證明你做了一定量的工作。
工作量證明官方定義是要求使用者進行一些比較耗時的複雜運算,然後得出這個答案能夠被其他人快速驗證,用工作期間耗用的時間、裝置、能源作為擔保成本,來確保資源是被真正需求方所使用。PoW最早是在反垃圾郵件中使用,在傳送一個郵件之前,需要在本地進行平均幾秒的PoW計算,目的是為了增加駭客群發一些垃圾郵件的成本,對於正常使用者來說傳送一封郵件是低頻操作,每次等待幾秒完全可以接受;但對於製造垃圾郵件的人,就大幅增加了成本。PoW一般用雜湊函式實現,雜湊函式特點是結果確定,但不可逆,知道一個雜湊值或雜湊值特徵,很難推算出輸入,如何使用雜湊函式實現PoW呢?假設現在有一條訊息,雜湊值是確定的,如果規定允許在這個訊息後面加上一個隨機數(我們稱為nonce值),然後再計算雜湊,那麼這個雜湊就可以隨著nonce值的改變而改變,我們不斷地嘗試不同的nonce值,就可以得到不同的雜湊值。
當得到雜湊值符合某一個特徵,比如前三位為0或者小於某個特定的數,那麼就接受該nonce值作為一個符合要求的答案。這個過程中需要計算方嘗試很多次才能得到符合條件的答案,條件越苛刻,需要計算的次數就越多,而這個答案在驗算方這邊只需要進行一步雜湊計算,就可以知道這個nonce值是否是符合條件的答案。PoW透過使用雜湊函式保證了難計算、易驗證的特點。

PoW運用在比特幣這邊,區塊頭部有一個nonce值,每一個礦工需要不斷調整區塊的Nonce值,使得整個區塊的雜湊值小於某一個目標雜湊(這個目標雜湊值由難度值確定,難度值越高,目標雜湊值越小),這樣一個區塊才是合法的區塊,誰先算出這個合法的區塊,廣播到網路中,這個合法的區塊就會被其他人接受。


POW的優點是工程上非常簡單可靠,容易實現,容錯率可以達到50%,控制全網算力沒有達到50%,基本上不可能篡改歷史記錄,這在中本聰一篇論文裡有嚴格的資料論證,是比較公平的機制,投入越多算力,獲得記賬權概率越大,越有可能產生新的區塊。缺點則是效率低,對於算力和能源浪費非常嚴重,有人統計過現在整個區塊鏈網路電力消耗超過一個小型國家全國的電力消耗。同時POW會有分叉,可能有若干個礦工,同時算出下一個區塊,因為算雜湊值是隨機的,可能有人在相近時間內算出來了,因為網路有延遲,不同礦工接受不同的區塊,然後就產生了分叉,分叉可能需要等待多個區塊來確認,這個交易的確認時間也是不確定的。
目前階段算力越來越集中,因為一個獨立的礦工想要挖下一個區塊的話,以你的算力可能在全網比例非常低,挖到下一個區塊的概率非常低,以至於一輩子可能都挖不上一個區塊。這時候最好的選擇就是加入某一個礦池,貢獻你的算力,按照算力份額分成,比如整個礦池挖出下一個區塊,把下一個區塊獎勵平均分給整個礦池裡面算力的,這樣加入礦池就可以獲得比較穩定的獎勵,也導致算力越來越集中在礦池手裡。共識層除了POW,還有其他演算法,比如POS權益證明,就是佔有的比例越多,獲得下一個區塊釋出權的概率越大。POW簡單理解就是按勞分配,多勞多得,POS就是按錢分配,持有越多,獲得的收益也就越大。
早期的POS也是跟POW一樣,結合POW,透過計算當前持有的權益所佔比例來決定這個節點的難度,可能持有越多,需要計算的難度值越低,就越有可能算出下一個區塊,這是早期的POS。之後有人提出純POS想法,完全由節點權益決定區塊形成,這時候不需要計算POW進行挖礦,但是現在工業界沒有一個公認安全可靠的純POS專案,但在學術界有一些論文,也提出一些解決方案,對安全性有比較嚴格的資料論證,但他們的工程化難度非常高。POS的優點是資源消耗少;共識效率高;權益平等。缺點是實現複雜,安全性有待驗證,容易導致馬太效應,富者越富,權益會越來越集中,跟POW有差不多的特點。
前面講了加密層、資料層、網路層、共識層,基本上一筆交易的流程就可以確定下來了:新交易建立之後,透過P2P網路廣播到全網所有的礦工,礦工把這個交易驗證透過之後,打包進一個區塊中,接著開始計算PoW,當得到某個nonce值使得這個區塊的雜湊值符合條件之後,再透過P2P網路把這個區塊廣播給所有的礦工,其他礦工驗證這個區塊合法之後,就會將這個區塊新增到自己的賬本中,這樣一個交易就在全網範圍內完成了寫入。激勵層
這樣一個分散式賬本系統,需要所有礦工消耗CPU、儲存、頻寬等資源誠實地記賬,如果完全沒有激勵的話,這些礦工可能就沒有動力去維護這個系統了。比特幣的激勵機制是如果一個礦工計算出了一個新的區塊,這個區塊會產生一些新的比特幣,連同區塊裡所有交易的手續費都可以歸這個礦工所有,這些比特幣是對一個誠實礦工的獎勵。如果一個礦工試圖修改歷史記錄或者將不合法的交易打包到新的區塊,那麼這個礦工將白白浪費算力,而不能使其他礦工同步自己的賬本,這部分浪費的算力可以理解為是對不誠實礦工的懲罰。
激勵機制在公有鏈中是必需的。在聯盟鏈中,所有節點都是已經經過組織認證的節點,不需要額外的激勵,這些節點也會自發地維護整個系統的安全和穩定。但在公有鏈中,節點不需要進行認證,可以隨時加入、隨時退出這個網路,記賬需要消耗CPU、儲存、頻寬等資源,所以需要有一定的激勵機制來確保礦工在記賬的過程中能有收益,以此來保證整個區塊鏈系統朝著良性迴圈的方向發展。合約層
合約層是區塊鏈可程式設計特性的基礎,區塊鏈可以理解為是去中心化不可篡改的賬本,程式程式碼也是資料,也可以存到賬本里。智慧合約是儲存在區塊鏈中的一段不可篡改的程式,可以自動化的執行一些預先定義好的規則和條款,響應接收到的資訊。合約釋出之後,其執行和維護就交給全網的礦工去達成共識,合約的開發者定義了合約執行的規則,這個規則釋出之後就是公開透明且不可篡改的。應用層執行在合約層之上,透過使用合約層的指令碼和程式碼構建去中心化的應用。現在比較火的應用有眾籌類的WeiFund,遊戲類的加密貓,博彩類的Fomo3D等。
總結加密層,區塊鏈技術的基石,提供了整個區塊鏈系統的安全性、匿名性保證。
資料層,採用偏序的資料結構,又採用了訊息摘要的形式,使得歷史資料難以篡改,資料的完整性得以保證。網路層
,規定了整個網路節點裡的通訊機制,可以實現沒有中心伺服器的資料共享。共識層,透過POW、POS等共識演算法來保證全網資料的一致性,是區塊鏈技術裡的關鍵。
激勵層,是透過經濟激勵機制,使得整個區塊鏈系統可以朝著良性迴圈方向發展。合約層
,提供區塊鏈系統的可程式設計性。應用層,可以開發分散式應用,來豐富整個區塊鏈的生態。
區塊鏈整個發展歷程可以分為區塊鏈1.0,即比特幣,是可信的分散式賬本,更多是在數字加密貨幣領域的應用;區塊鏈2.0,即以太坊為代表,在可信的分散式賬本基礎上,加上了圖靈完備的智慧合約,基本所有程式邏輯都可以用智慧合約的形式寫出來,區塊鏈2.0擴大了區塊鏈應用場景;區塊鏈3.0,目前還沒有公認的區塊鏈3.0專案,未來可能在可擴充套件性或者區塊鏈應用上有更大的突破。
區塊鏈的技術特點是它沒有特定主體,它是由P2P網路連線起來的一個去中心化的全球系統,這確實會給監管帶來很多挑戰。目前的區塊鏈行業亂象叢生,需要有監管介入,方能促使區塊鏈行業健康發展,但同時也應避免過嚴的監管阻礙區塊鏈行業的發展。來源:OK區塊鏈工程院更多區塊鏈資訊:www.qukuaiwang.com.cn/news

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;