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