在正式分享以前,我先說說我是怎麼接觸區塊鏈的。我接觸區塊鏈是在2016年春天,一個很偶然的機會,當時以太坊在深圳搞了一個線下活動,我以爲很好奇,「區塊鏈」究竟是個什麼東西呢?我須要瞭解一下,因而去參加了此次活動。自從那次會議之後,我樹立了對區塊鏈的基本認識,並通過不斷的思考和實踐有了一些新的見解。我但願今天的這個分享,可以幫助你們。程序員
今年1月份區塊鏈突然間就火爆起來了,這種火爆跟不少因素有關。可是不能否認,不少言必稱區塊鏈的人並非真正地理解區塊鏈,包括如今不少很火的社區、所謂的專家教授等,不少所謂接觸區塊鏈的人時間都很短。算法
因爲熱度很高,天天咱們都能聽到各類各樣的關於區塊鏈的觀點和聲音,那要怎樣造成真正的認識這些東西呢?區塊鏈技術自己也在不斷的發展中,本次分享基於我對區塊鏈的研究和理解,從概念的角度給你們作一個簡單的介紹。數據庫
如今出了不少關於區塊鏈的書,還有百度百科、維基百科等,它們把區塊鏈定義爲一個公共的數據庫,或者一個公共帳本。咱們知道區塊鏈是一個數據存儲系統,不可篡改;它是去中心化的;它是基於信任共識的……至於什麼是公共帳本?什麼是公共數據庫?這些概念並無一個清楚的解釋。編程
1)首先它確實是一個數據存儲系統,區塊鏈自己就是一個存數據的地方;安全
2)第二它自己是一個數據計算系統,不只存儲數據,還進行計算;服務器
3)第三它是分佈式的,有不少節點組成。它跟企業中雲計算分佈式的區別是:區塊鏈是基於一個互聯網的分佈式。網絡
也就是說,區塊鏈是在互聯網分佈式下的數據計算和存儲系統。首先它是分佈式的,其次它是數據計算系統,最後纔是公共帳本,也就是公共數據庫。分佈式
這個概念是我提出的,具備首創性,但怎麼去理解呢?看下圖,其實這個過程沒有多複雜。就是說有一個區塊鏈網絡,有客戶端,你加入到這個網絡中,你可能會同步這個區塊數據,把數據從網絡上下載下來,因此第一步就是下載。固然我講的是挖礦節點的模式,若是是輕錢包其實能夠不用下載。工具
在正常的存儲中,第一步是搜索節點,第二步是同步帳本數據,這個相似於迅雷下載,好比我有個種子,就能從網絡上下載一個電影,這是你們都知道的最廣泛的應用,種子技術。性能
搜索節點、同步帳本數據到本地,這一步來看它就是一個公共帳本,人人能夠下載,每一個人能夠持有一塊。我有了這個帳本以後就結束了嗎?沒有。區塊鏈更復雜更神祕的地方在挖礦。
爲何要挖礦?進行到第三步,我有一個數據,好比轉帳,那麼,我要發起一個轉帳的請求,由網絡上的節點進行計算,而以前提到區塊鏈是一個互聯網分佈式系統,那麼多節點,讓誰來計算呢?它要選擇一個節點,這個被選中的節點就叫「礦工」,被選中的礦工作計算的過程被稱爲「挖礦」,因此咱們說的礦工、礦池實際上是計算數據的。礦工要接收、計算數據,存入內存,並將數據打包成一個區塊,打包完以後向其餘節點廣播,至此這個數據計算纔算完成,其餘節點驗證後,就能夠正式接收這個數據了。
區塊鏈是一個匿名的互聯網網絡,加入多少節點都是不受限制的,它是一個互聯網的分佈式,與企業中雲計算下的分佈式有本質區別。所以從本質上,區塊鏈解決了互聯網分佈式計算的難題。
互聯網上這麼多節點,它們去負責計算,而在整個自組織的系統中,各節點彼此互不相識互不信任,充滿了欺詐行爲。這裏就有了幾個問題:
第一個問題:怎麼鼓勵你們貢獻本身的計算資源,好比CPU、顯卡、硬盤,參與到這個計算的過程當中。就是說做爲一個普通用戶,我憑什麼買機器去幫你作這個計算?
第二個問題:可信的問題,如何避免惡意的攻擊、做弊、竊取身份、修改數字等?這是最重要的。節點是匿名的,憑什麼相信他?之前有一句經典的話:你都不知道對方是否是一條狗,你怎麼會相信它的計算結果?
怎麼來解決這些問題呢?經過挖礦。這是一個通俗的叫法。挖礦的過程是用一系列技術來完成的,包括:共識算法、加密技術、P2P技術、挖礦獎勵、公共帳本等。
不少人說你能夠談共識算法、能夠談加密算法、可是你不能談挖礦,不能談代幣,不能談token,我感受這種說法很好笑,我認爲談區塊鏈不談挖礦,就等因而沒有抓住本質的盲人摸象。
一、共識
共識是什麼意思?爲何叫共識算法?我以爲這個共識算法的名字起得很是好,可是不太好理解。算法怎麼能共識呢?我證實你算出來的數據是準確的、是可信的,咱們你們才容易達成共識。它解決了一個拜占庭將軍的問題,你們能夠百度一下拜占庭將軍問題,固然可能你查半天也沒辦法理解到底說的是什麼,研究數學問題、和計算機算法的人對它可能會有更深入的認識。
拜占庭問題究竟是什麼呢?就是在一個分佈的互不信任的網絡上如何保持事務的一致性。相信若是你不是作IT的,也同樣很難理解什麼是保持事務的一致性,這裏先假設你是程序員,能夠理解。那麼怎麼保持一致性?回到前文提到的區塊鏈網絡,咱們要保證事務的一致性或數據的一致性,就必須只能有一個節點來計算出的結果是最終有效的。
那到底選擇誰來計算呢?就是選擇礦工的過程。這個方法跟中心化服務器是不同的,好比支付寶、電商網站,這些應用都是使用中心化服務器,有服務器在那裏,上面部署了相應的程序,負責調度資源進行計算,不會出現多臺計算器同時計算同一個數據的問題。但在互聯網環境下,有不少個節點、不少臺計算器,可能同時計算。因此咱們要有一個算法或規則,在一段時間內,只能選擇其中的一個有效計算節點。
還要防止這個算法或規則被人控制,計算節點的選擇要高度隨機,不可預測。假如我控制了這個規則,就能夠做弊,選擇個人節點來計算。
還要保證計算正常進行,多個節點同時運行,只有一個數據最有效。
通俗地來講,共識算法就是:在互聯網上,我憑什麼相信和接受你算出來的東西,共識算法就是爲解決這個問題而存在的。
具體是怎麼解決的呢?常見的有幾種算法:
POW 工做量證實
工做量證實的基本原理是:經過暴力計算的方式來求得一個計算難度極高的數學解,其目的是爲了增長做弊的成本。就是說這個節點必須不停地計算,而後求得一個解,若是算對了,這個節點就是礦工,這個計算的過程很難,有必定的計算成本,保證礦工選擇的高度隨機性,若是過程很簡單的話,就很容易做弊,也很容易被控制。在這個計算過程當中,最終的結果可能只是作了不少無用功,浪費了大量的計算。
咱們來看其代碼實現,最終是要計算出小於這樣的一個值。固然區塊鏈有不一樣的計算方法,大概的意思都差很少,就是通過一系列複雜運算,計算得出一個比它給出的值還要小的結果,那你就是礦工。這個給出的值原本就很小,它前面有14個空格,你算出來的值要在前面14個空格,纔是有效的。這個數是算哈希值,當時我算了一下,好像是幾萬億分之一的機率。若是你想要挖礦的話就只能不停的算,一個節點作了大量計算,偶然像中彩票同樣,被選爲礦工,就能夠去負責在全網作一個計算。未來誰的計算能力越高,被選中爲礦工的概率就越大。
爲何說古已有之?
區塊鏈技術確實是一項偉大的創新,但它是一種應用式創新、集成式的創新,而非顛覆式的發明。工做量證實在很早之前就有了,上圖是我從維基百科截取的,1999年的時候就提出過這樣的方法,固然它不是用於比特幣,而是用於判斷垃圾郵件或可信身份方面,原理是同樣的。
不少人提出異議:工做量證實會耗費大量的計算和資源。我我的以爲:無用便是有用,這是一種合理的浪費,信任的代價。信任是有成本的,可能就是經過工做量證實而來,在去中心化的場景下,必需要付出這些代價。固然了,如今社會仍是中心化的組織,爲何相信他能夠表明一個公司、一個企業,甚至表明政府?由於他是有信任力的,咱們對這個中心化的組織是有信任的。而互聯網上,我憑什麼相信你呢?POW是一種解決方案。
POS系列
固然也有不少人質疑,除了浪費資源之外,還由於誰的計算能力強,誰就得到記帳的權利,那若是有人投不少錢創建一個礦池,買不少礦機,擁有強大的算力,就能夠壟斷記帳,這就不公平。
所以後來衍生出POS系列,不用工做量的方式來實現,它的方式很是簡單,和銀行存款同樣,按照節點的持幣數量和持有天數,計算某一時間內,參與計算的各個節點優先級順序。
這個方式在理論上實現了人人平等,實際上仍是有錢人說了算。持幣太少的話,在一個記帳區間內實際上是沒有機會得到記帳權限的。普通人在這個節點上沒有得到記帳權限,沒辦法得到收益,怎麼辦?所以衍生了DPOS:選舉代理計算節點,由計算節點進行計算,投票節點分享收益。
DPOS的優勢是:計算任務由少數人承擔,計算速度快。
缺點是:存在中心化的傾向。
二、加密技術
非對稱加密
非對稱加密技術不是區塊鏈或比特幣獨有的,而是在之前就存在,它解決了匿名身份的認證和數據安全的問題。
爲何叫非對稱?在網絡發送數據的時候,用公鑰來加密,用私鑰來解密。通常來講公鑰是接收方的帳戶地址,好比我要把這個幣轉給你,我事先確定要知道你的地址,那麼我就把你這個地址的這串字符做爲一個公鑰來加密,私鑰是根據公鑰產生的,不能逆推,若是有人知道了公鑰,實際上是解密不了的,必須用私鑰才能打開。
非對稱加密技術解決了身份認證和數據安全的問題,就是說若是有人截留你了,甚至知道你的公鑰都沒有用,由於只有私鑰才能打開這個數據。
三、P2P網絡
點對點的傳輸技術,是區塊鏈脫離中心化服務器控制,造成公共帳本存在的基礎。公共帳本爲何會存在?你去連接到一個區塊鏈網絡,就能夠把整個網絡下下來,只有P2P點對點傳輸技術才能把這些數據下下來。
固然點對點傳輸也不是全部人都是普通的服務器,節點上也有一些大型的服務器來支撐整個網絡的運轉。
四、公共帳本-區塊鏈數據
爲何叫區塊鏈?
1)它是由不少個區塊首尾相連造成的,包括創世區塊、區塊鏈000一、區塊0002……它跟傳統數據庫是有區別的。
2)整個數據(帳本)能夠存在於每一個計算節點上,固然這個電腦硬盤要足夠大,由於節點數據不少。
3)歷史數據不可能篡改。這個是存在必定爭議的,理論上經過分叉等其餘控制也是能夠改的,只是實際操做難度比較大而已。數據是首尾相連的,想在中間加一個數據,或改一個數據,是改不掉的,它是經過校驗的方式去實現的。
4)存在容量瓶頸。爲何呢?公共帳本的數據若是太大,你們就很難存儲了,因此,目前的技術還不適合存儲大量數據(如圖片、視頻)。
5)具備先天的性能和統計缺陷。沒辦法作一些複雜的統計。
我認爲目前還處於前區塊鏈時代,尚未正式進入區塊鏈時代,只是一些概念被炒得很火熱。咱們設想的區塊鏈世界是一個理想的社會:
1)沒有邊界的社會,人人均可以協做。
2)可編程的社會。技術在改變咱們的社會,可是咱們能不能作到一些更加智能化、定製化的東西?如今還很難,好比空調,升高下降溫度還須要靠遙控器來控制,未來某一天咱們能不能對空調進行編程?讓技術深刻到生活和社會的方方面面,這些將來均可以在區塊鏈上完成。
3)契約化的和民主自治的社會。
咱們認爲目前區塊鏈技術還處於一個比較低級的階段,還承擔不了這樣一個職能,但相信將來必定是這樣一個社會。互聯網還有一個匿名的特徵,同時仍是分佈式的,還要有工具和技術來實現,要可編程要自動執行,不能輕易更改,這些都是區塊鏈提供給咱們的,有了這些區塊鏈世界才能達成。
去中心化
不少人都在說去中心化,那麼這個潛在的需求是什麼?是去中心化的需求,有些東西就是要去中心化。咱們簡單地從一人世界、二人世界和多人世界這個角度來理解,這也是一個專家學者提出來的社會學的概念。
在一人世界中,好比一個家庭裏面,或者你跟你的親屬之間就是一人世界,就是圍着某我的轉,這個世界比較簡單,這確定是一箇中心化的場景。到了公司可能也是,爲這家企業工做,圍着股東董事會或者公司總經理,也是一人化的世界。
再往前一點就稍微複雜一點,好比供一個產業鏈,這時可能不是一個公司說了算的,上下游會互相博弈。到了國家層面就更復雜了,好比國家選舉、執行一項重大決策等。到全球貿易,全球市場就更復雜了,可能會變成一個多邊協做的關係。
多元世界就是人人之間的協做,好比我如今想從某一個國家買一個東西,假若有人出售,我就能夠去買。如今的不少交易都會依賴一箇中介,好比淘寶或者其餘的網站,這個中介就是中心化的組織,其實不少去中心化的場景是依託於中心化的方式來實現的。若是有一個去中心化的東西,我和他之間的商品交換可以經過這個去中心化的東西更順利進行,交易成本更低。
因此我想,將來咱們怎麼經過這種去中心化的技術來知足去中心化的場景,而不是像如今不少人說的那樣,去中心化的東西要顛覆中心化。
什麼是真正的去中心化?
當前互聯網、共享經濟宣稱的「去中心化」是僞去中心化,由於點對點交易仍然依賴於商業組織提供的中心化服務,並被監控和剝削。
舉個簡單的例子,好比如今某些打車軟件,仍是依賴於這個公司的服務器,它承擔了一箇中介的職能,在整個過程當中會監控數據、利用數據,甚至竊取數據,這就必然產生剝削行爲,軟件會向司機收錢,好比你支付20元,實際司機只能拿到15元。
真正的區塊鏈是這樣的,不須要經過哪一個公司,直接查找車主。車主向區塊鏈發佈數據,個人車如今閒着,誰願意用,位置在哪裏,打車的人能夠直接在區塊鏈上下單,司機接單跑完這個服務。這個時候誰來支撐網絡運行呢?誰負責這個交易的撮合呢?礦工,他要支撐這個網絡運轉,必然也會收取必定的費用,但他收取的費用確定遠遠低於中心化組織。你們能夠沿着這個思路去擴展。
複雜的地方須要複雜的技術,那些場景是比較複雜的?人類社會最複雜。
區塊鏈技術不能亂用,有些東西比較簡單不必非得用區塊鏈技術來解決。有人說你這個企業數據量太大,用戶量一大就宕機了,區塊鏈運行比較安全、穩定、可靠,能夠解決你的宕機問題。我以爲這徹底是胡說八道,宕機的問題經過區塊鏈來解決是不現實的。
複雜場景的複雜問題以及其對應的複雜技術,包括:
1)沒有負責人,這個能夠經過共識算法解決。
2)各主體互不信任,甚至有利益衝突,能夠經過分佈式計算、可編程合約、強制執行解決。
3)場景多變、不肯定性強,存在惡意參與者,還有一些精確計量和沒有規則的,能夠經過自定義合約,一次性合約、數據公開或有限透明、數據分佈式存儲不可篡改、業務代幣化、量子化等解決。
好比電子合同的簽定,如今籤合同大可能是線下的紙質合同,還得蓋騎縫章,若是兩個公司之間經過區塊鏈或一個相似平臺,互相發電子合同就能夠了。
區塊鏈技術是一個複雜的東西,適合應用在複雜的場景中。
我以爲區塊鏈技術最偉大的地方不是前面說的共識算法,而是它有一個自我進化的生命力——經濟體系。
它是去中心化的,那它怎麼運營、怎麼推廣、技術怎麼迭代?中心化組織有一個開發團隊,受盈利或KPI驅動,會推進它向前發展。而去中心的怎麼推廣?它有一套經濟體系在運行。
首先是衆籌資金,拿到資金後作產品開發,上線以後發行token,而後上線挖礦,挖礦獎勵能夠去交易所變現,有了錢以後就能夠運營推廣,以後產品又有了新的生命力,進行更新迭代。每個環節組成一個命運共同體,共同進化。
這是一個技術與商業的完美結合,它是自我循環的;技術歸屬於全人類,依託於區塊鏈而不是某個組織。避免技術反噬或反惡人類。AI火爆的時候你們都擔憂一個問題,機器人越智能對人類的威脅越大,若是某一個很高深的技術被某個組織控制了,而這個組織有做惡傾向,利用它來對抗人類是可怕的。若是這項技術是屬於區塊鏈的,那麼,就是公開、透明的,本質上這個技術是屬於全人類的,大大下降了做惡的可能。
一、token是貨幣
我認爲token不是貨幣,它是虛擬商品,充當價值交換媒介,並未增長貨幣。挖礦得到的token纔是真token,以太坊上發行的代幣根本就不是真token。Token是支撐網絡運行的獎勵,前面說過,礦工挖礦、負責這個網絡的計算、存儲數據,要給他獎勵驅使他工做,特別是支撐全球的網絡運轉,靠義務奉獻是不現實的。
Token避免不了炒做、投機等市場自由買賣引發的問題,不必污名化。Token能夠實現線下資產數字化、價值互聯網化,不依託於中介和中心化組織。還能夠自由進行線上流通,擺脫積分、郵卡等資金盤套路。
舉個例子,我有一套房子,這個房子值100萬,假如我想把它部分變現,其實很難,除非去銀行抵押貸款,可是我只想抵押一部分能夠嗎?抵押10%,我拿10萬塊錢回來,90%的產權還歸我全部,這在銀行作不到。房產證只能抵押一次,不能說我只抵押10%,可是對銀行來講,你的房產證必須拿出來,所有抵押,沒辦法拿出一部分,由於產權不是數字化的,不能夠分割。
若是把它變成token就能夠了,我發行100萬個token,若是我想變現10萬,就賣出10萬個token,剩下90萬個token還在我手裏,至關於還有這套房子90%的控制權。固然這也是對將來的暢想,短時間內實現比較難。
Token和資金盤有什麼區別呢?咱們常常看到積分商城等資金盤套路,它們只能在規定的網站內使用,脫離開這個區域就沒辦法流通,token則不同。好比我有一個比特幣,全世界範圍內均可以流動,交易所之間能夠互相轉帳,人與人之間均可以去轉移,不存在盤內流動的問題。
二、挖礦浪費資源
舉個例子就很好理解了,有一些國家的國會開會,參衆兩院每天吵架,不停投票,互相舉證等,週期很長,這是在浪費資源嗎?他們並不以爲,這是達成新共識的一種成本,人與人之間要進行協做要達成共識,原本就很難。
挖礦是分散化、去中心的方法,也是規則公開、自治的選擇。網絡須要有礦工來支撐,若是隻有一個礦工那他說了算,這怎麼叫去中心化?
挖礦是支撐網絡運行的基礎設施。不挖礦的話,網絡誰來運行?誰來計算?
挖礦是區塊鏈的根基,不能動搖。
三、區塊鏈性能不佳
不是全部的交易都是越快越好,不是全部的服務都是吞吐量越大越好,也不是全部的計算都須要極致的用戶體驗,防止上當受騙纔是重點。
區塊鏈解決的問題場景不一樣,性能好的中心化服務器和性能「很差」的區塊鏈服務是不可互相取代的。
四、區塊鏈顛覆中心化組織
這個徹底不可能,我認爲中心化組織有它的優點:
1)資源優點、集中;
2)組織力強,定目標行動快;
3)功利性強,其目的是爲了盈利或實現某個目標;
4)外部難以監控。
中心化組織適用於:公司、政府、司法等。
去中心化組織也有它的好處:資源少,比較分散;公益性強;公開透明,你的數據是公開的,每人有一份,匿名性也不是很強。很差的地方在於:它是人心渙散,很難達成共識。
去中心化適用於:公益、輿論、點對點交易、衆籌等。
這二者分別有其適用的場景,不能走極端說誰取代誰。
最近區塊鏈技術很火,行業工資也很高,不少朋友說想學不知道從哪學起,上圖提供給你們參考。
咱們還處於前區塊鏈社會時代,將來很美好,前途也很光明,只是咱們仍然要認清當前現實,技術仍然比較原始,盲目樂觀須要澆一瓢涼水,但正由於技術在起步階段,纔給了咱們每一個人學習和成長的機會,抓住一波浪潮,得到更廣闊的發展空間。
(內容來源:HiBlock區塊鏈課堂001期 林海龍老師的線上分享《破解區塊鏈的密碼——技術進化之路》
本文編輯:Cynthia)
如下是咱們的社區介紹,歡迎各類合做、交流、學習:)