區(qū)塊鏈是什么?
我理解區(qū)塊鏈就是一個去中心化不可篡改的數(shù)據(jù)庫,或者說是一個分布式賬本,有一個小故事幫助大家理解區(qū)塊鏈技術是怎么回事:
“比特村的故事”,在一個村子里,一開始村民相互交易用的是黃金,后來村民發(fā)現(xiàn)直接用金條交易方式非常不方便,一是金條容易磨損;二是金條質量比較重,進行交易時可能需要隨身攜帶,特別不方便。
后來他們提出一種辦法,由村里一位德高望重的村長替大家記賬,把金條收到村長那里,記錄一下每個人有多少錢,余額信息就在村長賬本里記錄。之后村民們互相交易時只需要跟村長說轉了多少錢,比如張三買牛轉了多少錢給李四,村長完成這筆交易記錄之后,這筆轉帳就算是完成了。這就是中心化的賬本,也可以理解為數(shù)字貨幣的時代。
但是中本聰發(fā)現(xiàn)這種模式可能會存在一些問題:
1、中心信任程度問題,村長可以做假帳,把自己或自己朋友余額增加,普通村民沒辦法去監(jiān)管這樣的改變,這樣可能整個市場中流通的貨幣會增加,造成通貨膨脹。
2、這個賬本只保存在村長這里,那么賬本維護可能會有問題。如果賬本損壞或者其他因素造成歷史記錄丟失,可能就再也找不回來了。
中本聰提出了去中心化賬本的構想,目的是在沒有一個可信中心的環(huán)境建立一個全民賬本,這個賬本主要原理是大家一起記賬,每筆賬目都需要所有記賬人共識,并且每個人都存在這樣一份相同的賬本,這樣就不用擔心有個別記賬員造假、丟失的問題了。
一是個人造假的賬本不會得到大家的認可,二是個人丟失賬本可以通過其他人重新獲取這個賬本來恢復所有的歷史交易記錄。不過這種分布式賬本會有一些問題需要解決:
第一個問題:賬本一致問題,因為所有人都參與記賬,每個人賬本如何保持一致是最關鍵的一個問題;
第二個問題:每個人都有這樣的賬本,意味著所有人的交易都是公開的,很可能所有人的余額也是公開的,能否做到對交易匿名處理,就是把所有人資產(chǎn)信息隱藏起來;
第三個問題:交易怎么鑒別真?zhèn)?即如何防止別人冒充你花你的錢?
第四個問題:大家都記賬,記賬肯定有消耗,需要消耗存儲、消耗精力,如何讓記賬員長期維持下去?
針對這幾個問題,中本聰提出一些關鍵技術來解決這些問題,我們后面會一一講解。
區(qū)塊鏈技術架構可以分為七層,從底層往上依次是加密層、數(shù)據(jù)層、網(wǎng)絡層、共識層、激勵層、合約層和應用層,而每一層都運用了一些技術來保證整個區(qū)塊鏈系統(tǒng)的正常運作。
加密層
1.哈希函數(shù);
也叫散列函數(shù),是把一段數(shù)據(jù)壓縮成一個摘要,這個摘要相比原始信息更小,但有一些比較特別的性質,首先是確定性,如果相同的輸入數(shù)據(jù)得到的輸出是相同的。
基本是不可逆的,給定一個輸出,無法直接推算出輸入,雖然我們知道有無數(shù)個輸入會輸出同一個哈希值,但如果知道哈希值的話,很難計算出任何一個輸入。
“雪崩”效應,輸入信息只要修改一小部分,哪怕是一個單詞,一個字母,甚至1bit值,輸出的哈希值就會產(chǎn)生翻天覆地的變化,這一點保證它是不可逆的。
哈希函數(shù)有什么用?
在分布式賬本里,為了保證數(shù)據(jù)完整性,會采用哈希值進行校驗。如,一筆交易、一頁賬本(也就是區(qū)塊的概念),用了哈希之后生成摘要,意味著整個區(qū)塊交易信息無法進行篡改(即無法在篡改數(shù)據(jù)之后保持摘要不變)。
區(qū)塊鏈原始的定義或狹義的理解就是區(qū)塊+鏈的形式,這個鏈是通過哈希鏈接起來,每一個區(qū)塊可能都有很多交易,整個區(qū)塊又可以通過哈希函數(shù)產(chǎn)生摘要信息,然后規(guī)定每一個區(qū)塊都需要記錄上一個區(qū)塊的摘要信息,這樣一來所有區(qū)塊都可以連成一條鏈。
如果改了歷史中某一個區(qū)塊的數(shù)據(jù),意味著這個區(qū)塊摘要值(即哈希值)會改變,那么下一個區(qū)塊中記錄的上一個區(qū)塊的哈希也得做相應的修改,以此類推,也就是說如果要修改歷史記錄的話,要從那一個點開始往后所有記錄都要修改才能保證賬本的合法性,哈希函數(shù)就提高了賬本篡改的難度。
2.采用非對稱加密技術。
這是相對對稱加密而言的,對稱加密中加密和解密過程用的是同一把鑰匙,而非對稱加密是加密和解密過程用的是一對密鑰,這對密鑰分別稱為“公鑰”和“私鑰”,公鑰是可以公開的,私鑰是個人存儲、個人維護的。
公鑰加密的數(shù)據(jù)只能用配對的私鑰來解密,私鑰加密的數(shù)據(jù)同樣也只能用配對的公鑰來解密。用非對稱加密就可以產(chǎn)生數(shù)字簽名。
假設有一筆交易,我給你轉10元,這個消息或這筆交易有固定的數(shù)據(jù)格式,通過哈希函數(shù)算出這個交易的哈希值(即消息摘要),通過使用私鑰加密,得到一個數(shù)字簽名,然后可以把數(shù)字簽名以及這個消息同時發(fā)送給其他人。
其他人拿到這個消息和數(shù)字簽名后,首先可以把這個消息的消息摘要算出來,然后就可以用公鑰驗證這個簽名是否真的是由這個消息摘要算出來的,進而判斷這個消息是否由我簽署并且沒有被篡改。
這就是數(shù)字簽名的效果,它的作用:一是可以確認消息歸屬,即檢驗消息是否真的由私鑰擁有者發(fā)出的,只要拿對應的公鑰驗證去簽名,驗證通過就可以證明消息是由私鑰擁有者發(fā)出的;二是確保消息完整,如果消息被篡改,那么哈希值就發(fā)生了變化,用同樣的數(shù)字簽名就無法驗證通過。
非對稱加密和數(shù)據(jù)簽名解決了“比特村”的兩個問題:第一,交易可以鑒別真?zhèn)?第二,可以保證交易進行匿名化。
現(xiàn)在不需要實名認證每個人有多少錢,只需要用公鑰作為錢包的地址,要花公鑰錢包里的錢只需要用對應私鑰對一筆交易簽名,即可證明你是錢包的所有者,這筆交易別人無法篡改和偽造。
而且公私鑰可以在線下自己生成,并不需要在賬本里進行實名注冊,如果沒有賬本外的額外信息,任何人都不知道某個公鑰錢包到底屬于誰的,這就達到了交易匿名的目的。
數(shù)據(jù)層
剛才說到區(qū)塊的概念,可以理解為賬本中的一頁記賬紙,里面記錄了若干筆交易,除此以外,區(qū)塊里需要包含哪些信息?
首先有一個區(qū)塊高度,可以理解為賬本的頁碼;包含上一個區(qū)塊摘要信息,這個是為了保證整個區(qū)塊鏈鏈式賬本不可篡改性;包含本區(qū)塊里所有數(shù)據(jù)交易哈希摘要值。
網(wǎng)絡層
網(wǎng)絡層是用P2P網(wǎng)絡來進行消息的傳播,P2P網(wǎng)絡是對等式網(wǎng)絡,也可以稱為是無中心的自組織網(wǎng)絡,特點是沒有中心化的服務器,任何節(jié)點在這個網(wǎng)絡中既是服務器,也是客戶端。
消息的發(fā)送、網(wǎng)絡的組織都是自發(fā)的,整個網(wǎng)絡可以無限擴展,任何節(jié)點可以隨時加入、隨時退出。網(wǎng)絡層規(guī)定了區(qū)塊鏈系統(tǒng)中交易是怎么傳輸?shù)?,以及每一頁賬本(即區(qū)塊)是怎么傳輸?shù)摹?/p>
共識層
就是要讓全網(wǎng)所有記賬員賬本保持一致,也就是說對所有交易有一個先后順序,達成完全一致。具體而言,共識機制主要需要解決以下三個問題:
1、What,下一個區(qū)塊包含哪些交易;
2、Who,下一個區(qū)塊由誰產(chǎn)生;
3、When,下一個區(qū)塊在什么時候產(chǎn)生;
區(qū)塊鏈共識算法用的最多的是PoW,字面意思是工作量證明,即證明你做了一定量的工作。
工作量證明官方定義是要求用戶進行一些比較耗時的復雜運算,然后得出這個答案能夠被其他人快速驗證,用工作期間耗用的時間、設備、能源作為擔保成本,來確保資源是被真正需求方所使用。
PoW最早是在反垃圾郵件中使用,在發(fā)送一個郵件之前,需要在本地進行平均幾秒的PoW計算,目的是為了增加黑客群發(fā)一些垃圾郵件的成本,對于正常用戶來說發(fā)送一封郵件是低頻操作,每次等待幾秒完全可以接受;但對于制造垃圾郵件的人,就大幅增加了成本。
PoW一般用哈希函數(shù)實現(xiàn),哈希函數(shù)特點是結果確定,但不可逆,知道一個哈希值或哈希值特征,很難推算出輸入,如何使用哈希函數(shù)實現(xiàn)PoW呢?假設現(xiàn)在有一條消息,哈希值是確定的,如果規(guī)定允許在這個消息后面加上一個隨機數(shù)(我們稱為nonce值),然后再計算哈希,那么這個哈希就可以隨著nonce值的改變而改變,我們不斷地嘗試不同的nonce值,就可以得到不同的哈希值。
當?shù)玫焦V捣夏骋粋€特征,比如前三位為0或者小于某個特定的數(shù),那么就接受該nonce值作為一個符合要求的答案。這個過程中需要計算方嘗試很多次才能得到符合條件的答案,條件越苛刻,需要計算的次數(shù)就越多,而這個答案在驗算方這邊只需要進行一步哈希計算,就可以知道這個nonce值是否是符合條件的答案。PoW通過使用哈希函數(shù)保證了難計算、易驗證的特點。
PoW運用在比特幣這邊,區(qū)塊頭部有一個nonce值,每一個礦工需要不斷調(diào)整區(qū)塊的Nonce值,使得整個區(qū)塊的哈希值小于某一個目標哈希(這個目標哈希值由難度值確定,難度值越高,目標哈希值越小),這樣一個區(qū)塊才是合法的區(qū)塊,誰先算出這個合法的區(qū)塊,廣播到網(wǎng)絡中,這個合法的區(qū)塊就會被其他人接受。
POW的優(yōu)點是工程上非常簡單可靠,容易實現(xiàn),容錯率可以達到50%,控制全網(wǎng)算力沒有達到50%,基本上不可能篡改歷史記錄,這在中本聰一篇論文里有嚴格的數(shù)據(jù)論證,是比較公平的機制,投入越多算力,獲得記賬權概率越大,越有可能產(chǎn)生新的區(qū)塊。
缺點則是效率低,對于算力和能源浪費非常嚴重,有人統(tǒng)計過現(xiàn)在整個區(qū)塊鏈網(wǎng)絡電力消耗超過一個小型國家全國的電力消耗。
同時POW會有分叉,可能有若干個礦工,同時算出下一個區(qū)塊,因為算哈希值是隨機的,可能有人在相近時間內(nèi)算出來了,因為網(wǎng)絡有延遲,不同礦工接受不同的區(qū)塊,然后就產(chǎn)生了分叉,分叉可能需要等待多個區(qū)塊來確認,這個交易的確認時間也是不確定的。
目前階段算力越來越集中,因為一個獨立的礦工想要挖下一個區(qū)塊的話,以你的算力可能在全網(wǎng)比例非常低,挖到下一個區(qū)塊的概率非常低,以至于一輩子可能都挖不上一個區(qū)塊。
這時候最好的選擇就是加入某一個礦池,貢獻你的算力,按照算力份額分成,比如整個礦池挖出下一個區(qū)塊,把下一個區(qū)塊獎勵平均分給整個礦池里面算力的,這樣加入礦池就可以獲得比較穩(wěn)定的獎勵,也導致算力越來越集中在礦池手里。
共識層除了POW,還有其他算法,比如POS權益證明,就是占有的比例越多,獲得下一個區(qū)塊發(fā)布權的概率越大。POW簡單理解就是按勞分配,多勞多得,POS就是按錢分配,持有越多,獲得的收益也就越大。
早期的POS也是跟POW一樣,結合POW,通過計算當前持有的權益所占比例來決定這個節(jié)點的難度,可能持有越多,需要計算的難度值越低,就越有可能算出下一個區(qū)塊,這是早期的POS。
之后有人提出純POS想法,完全由節(jié)點權益決定區(qū)塊形成,這時候不需要計算POW進行挖礦,但是現(xiàn)在工業(yè)界沒有一個公認安全可靠的純POS項目,但在學術界有一些論文,也提出一些解決方案,對安全性有比較嚴格的數(shù)據(jù)論證,但他們的工程化難度非常高。
POS的優(yōu)點是資源消耗少;共識效率高;權益平等。缺點是實現(xiàn)復雜,安全性有待驗證,容易導致馬太效應,富者越富,權益會越來越集中,跟POW有差不多的特點。
前面講了加密層、數(shù)據(jù)層、網(wǎng)絡層、共識層,基本上一筆交易的流程就可以確定下來了:
新交易創(chuàng)建之后,通過P2P網(wǎng)絡廣播到全網(wǎng)所有的礦工,礦工把這個交易驗證通過之后,打包進一個區(qū)塊中,接著開始計算PoW,當?shù)玫侥硞€nonce值使得這個區(qū)塊的哈希值符合條件之后,再通過P2P網(wǎng)絡把這個區(qū)塊廣播給所有的礦工,其他礦工驗證這個區(qū)塊合法之后,就會將這個區(qū)塊添加到自己的賬本中,這樣一個交易就在全網(wǎng)范圍內(nèi)完成了寫入。
激勵層
這樣一個分布式賬本系統(tǒng),需要所有礦工消耗CPU、存儲、帶寬等資源誠實地記賬,如果完全沒有激勵的話,這些礦工可能就沒有動力去維護這個系統(tǒng)了。
比特幣的激勵機制是如果一個礦工計算出了一個新的區(qū)塊,這個區(qū)塊會產(chǎn)生一些新的比特幣,連同區(qū)塊里所有交易的手續(xù)費都可以歸這個礦工所有,這些比特幣是對一個誠實礦工的獎勵。
如果一個礦工試圖修改歷史記錄或者將不合法的交易打包到新的區(qū)塊,那么這個礦工將白白浪費算力,而不能使其他礦工同步自己的賬本,這部分浪費的算力可以理解為是對不誠實礦工的懲罰。
激勵機制在公有鏈中是必需的。在聯(lián)盟鏈中,所有節(jié)點都是已經(jīng)經(jīng)過組織認證的節(jié)點,不需要額外的激勵,這些節(jié)點也會自發(fā)地維護整個系統(tǒng)的安全和穩(wěn)定。
但在公有鏈中,節(jié)點不需要進行認證,可以隨時加入、隨時退出這個網(wǎng)絡,記賬需要消耗CPU、存儲、帶寬等資源,所以需要有一定的激勵機制來確保礦工在記賬的過程中能有收益,以此來保證整個區(qū)塊鏈系統(tǒng)朝著良性循環(huán)的方向發(fā)展。
合約層
合約層是區(qū)塊鏈可編程特性的基礎,區(qū)塊鏈可以理解為是去中心化不可篡改的賬本,程序代碼也是數(shù)據(jù),也可以存到賬本里。智能合約是存儲在區(qū)塊鏈中的一段不可篡改的程序,可以自動化的執(zhí)行一些預先定義好的規(guī)則和條款,響應接收到的信息。合約發(fā)布之后,其運行和維護就交給全網(wǎng)的礦工去達成共識,合約的開發(fā)者定義了合約運行的規(guī)則,這個規(guī)則發(fā)布之后就是公開透明且不可篡改的。
應用層
運行在合約層之上,通過使用合約層的腳本和代碼構建去中心化的應用?,F(xiàn)在比較火的應用有眾籌類的WeiFund,游戲類的加密貓,博彩類的Fomo3D等。
總結
加密層,區(qū)塊鏈技術的基石,提供了整個區(qū)塊鏈系統(tǒng)的安全性、匿名性保證。
數(shù)據(jù)層,采用偏序的數(shù)據(jù)結構,又采用了消息摘要的形式,使得歷史數(shù)據(jù)難以篡改,數(shù)據(jù)的完整性得以保證。
網(wǎng)絡層規(guī)定了整個網(wǎng)絡節(jié)點里的通信機制,可以實現(xiàn)沒有中心服務器的數(shù)據(jù)共享。
共識層,通過POW、POS等共識算法來保證全網(wǎng)數(shù)據(jù)的一致性,是區(qū)塊鏈技術里的關鍵。
激勵層,是通過經(jīng)濟激勵機制,使得整個區(qū)塊鏈系統(tǒng)可以朝著良性循環(huán)方向發(fā)展。
合約層,提供區(qū)塊鏈系統(tǒng)的可編程性。
應用層,可以開發(fā)分布式應用,來豐富整個區(qū)塊鏈的生態(tài)。
區(qū)塊鏈整個發(fā)展歷程可以分為區(qū)塊鏈1.0,即比特幣,是可信的分布式賬本,更多是在數(shù)字加密貨幣領域的應用;
區(qū)塊鏈2.0,即以太坊為代表,在可信的分布式賬本基礎上,加上了圖靈完備的智能合約,基本所有程序邏輯都可以用智能合約的形式寫出來,區(qū)塊鏈2.0擴大了區(qū)塊鏈應用場景;
區(qū)塊鏈3.0,目前還沒有公認的區(qū)塊鏈3.0項目,未來可能在可擴展性或者區(qū)塊鏈應用上有更大的突破。
區(qū)塊鏈的技術特點是它沒有特定主體,它是由P2P網(wǎng)絡連接起來的一個去中心化的全球系統(tǒng),這確實會給監(jiān)管帶來很多挑戰(zhàn)。目前的區(qū)塊鏈行業(yè)亂象叢生,需要有監(jiān)管介入,方能促使區(qū)塊鏈行業(yè)健康發(fā)展,但同時也應避免過嚴的監(jiān)管阻礙區(qū)塊鏈行業(yè)的發(fā)展。