1. 程式人生 > >乾貨|破解區塊鏈的密碼——技術進化之路(分享實錄)

乾貨|破解區塊鏈的密碼——技術進化之路(分享實錄)

在正式分享之前,我先說說我是怎麼接觸區塊鏈的。我接觸區塊鏈是在2016年春天,一個很偶然的機會,當時以太坊在深圳搞了一個線下活動,我覺得很好奇,“區塊鏈”到底是個什麼東西呢?我需要了解一下,於是去參加了這次活動。自從那次會議以後,我樹立了對區塊鏈的基本認識,並經過不斷的思考和實踐有了一些新的看法。我希望今天的這個分享,能夠幫助大家。

今年1月份區塊鏈忽然間就火爆起來了,這種火爆跟很多因素有關。但是不可否認,很多言必稱區塊鏈的人並不是真正地理解區塊鏈,包括現在很多很火的社群、所謂的專家教授等,很多所謂接觸區塊鏈的人時間都很短。

由於熱度很高,每天我們都能聽到各種各樣的關於區塊鏈的觀點和聲音,那要怎樣形成真正的認識這些東西呢?區塊鏈技術本身也在不斷的發展中,本次分享基於我對區塊鏈的研究和理解,從概念的角度給大家做一個簡單的介紹。

1
基本認識:三句話理解區塊鏈,不再被各種似是而非的文章所誤導

現在出了很多關於區塊鏈的書,還有百度百科、維基百科等,它們把區塊鏈定義為一個公共的資料庫,或者一個公共賬本。我們知道區塊鏈是一個數據儲存系統,不可篡改;它是去中心化的;它是基於信任共識的……至於什麼是公共賬本?什麼是公共資料庫?這些概念並沒有一個清楚的解釋。

1)首先它確實是一個數據儲存系統,區塊鏈本身就是一個存資料的地方;

2)第二它本身是一個數據計算系統,不僅儲存資料,還進行計算;

3)第三它是分散式的,有很多節點組成。它跟企業中雲計算分散式的區別是:區塊鏈是基於一個網際網路的分散式。

也就是說,區塊鏈是在網際網路分散式下的資料計算和儲存系統

。首先它是分散式的,其次它是資料計算系統,最後才是公共賬本,也就是公共資料庫。

這個概念是我提出的,具有獨創性,但怎麼去理解呢?看下圖,其實這個過程沒有多複雜。就是說有一個區塊鏈網路,有客戶端,你加入到這個網路中,你可能會同步這個區塊資料,把資料從網路上下載下來,所以第一步就是下載。當然我講的是挖礦節點的模式,如果是輕錢包其實可以不用下載。

在正常的儲存中,第一步是搜尋節點,第二步是同步賬本資料,這個類似於迅雷下載,比如我有個種子,就能從網路上下載一個電影,這是大家都知道的最普遍的應用,種子技術。

搜尋節點、同步賬本資料到本地,這一步來看它就是一個公共賬本,人人可以下載,每個人可以持有一塊。我有了這個賬本之後就結束了嗎?沒有。區塊鏈更復雜更神祕的地方在挖礦。

為什麼要挖礦?進行到第三步,我有一個數據,比如轉賬,那麼,我要發起一個轉賬的請求,由網路上的節點進行計算,而之前提到區塊鏈是一個網際網路分散式系統,那麼多節點,讓誰來計算呢?它要選擇一個節點,這個被選中的節點就叫“礦工”,被選中的礦工做計算的過程被稱為“挖礦”,所以我們說的礦工、礦池其實是計算資料的。礦工要接收、計算資料,存入記憶體,並將資料打包成一個區塊,打包完之後向其他節點廣播,至此這個資料計算才算完成,其他節點驗證後,就可以正式接收這個資料了。


區塊鏈是一個匿名的網際網路網路,加入多少節點都是不受限制的,它是一個網際網路的分散式,與企業中雲計算下的分散式有本質區別。因此從本質上,區塊鏈解決了網際網路分散式計算的難題。

網際網路上這麼多節點,它們去負責計算,而在整個自組織的系統中,各節點彼此互不相識互不信任,充滿了欺詐行為。這裡就有了幾個問題:

第一個問題:怎麼鼓勵大家貢獻自己的計算資源,比如CPU、顯示卡、硬碟,參與到這個計算的過程中。就是說作為一個普通使用者,我憑什麼買機器去幫你做這個計算?

第二個問題:可信的問題,如何避免惡意的攻擊、作弊、竊取身份、修改數字等?這是最重要的。節點是匿名的,憑什麼相信他?以前有一句經典的話:你都不知道對方是不是一條狗,你怎麼會相信它的計算結果?

怎麼來解決這些問題呢?通過挖礦。這是一個通俗的叫法。挖礦的過程是用一系列技術來完成的,包括:共識演算法、加密技術、P2P技術、挖礦獎勵、公共賬本等。

很多人說你可以談共識演算法、可以談加密演算法、但是你不能談挖礦,不能談代幣,不能談token,我感覺這種說法很可笑,我認為談區塊鏈不談挖礦,就等於是沒有抓住本質的盲人摸象。

2
技術解析:古已有之的幾個關鍵技術,創新只是在於組合

1、共識

共識是什麼意思?為什麼叫共識演算法?我覺得這個共識演算法的名字起得非常好,但是不太好理解。演算法怎麼能共識呢?我證明你算出來的資料是準確的、是可信的,我們大家才容易達成共識。它解決了一個拜占庭將軍的問題,大家可以百度一下拜占庭將軍問題,當然可能你查半天也沒辦法理解到底說的是什麼,研究數學問題、和計算機演算法的人對它可能會有更深刻的認識。

拜占庭問題到底是什麼呢?就是在一個分佈的互不信任的網路上如何保持事務的一致性。相信如果你不是做IT的,也一樣很難理解什麼是保持事務的一致性,這裡先假設你是程式設計師,可以理解。那麼怎麼保持一致性?回到前文提到的區塊鏈網路,我們要保證事務的一致性或資料的一致性,就必須只能有一個節點來計算出的結果是最終有效的。

那到底選擇誰來計算呢?就是選擇礦工的過程。這個方法跟中心化伺服器是不一樣的,比如支付寶、電商網站,這些應用都是使用中心化伺服器,有伺服器在那裡,上面部署了相應的程式,負責排程資源進行計算,不會出現多臺計算器同時計算同一個資料的問題。但在網際網路環境下,有很多個節點、很多臺計算器,可能同時計算。所以我們要有一個演算法或規則,在一段時間內,只能選擇其中的一個有效計算節點。

還要防止這個演算法或規則被人控制,計算節點的選擇要高度隨機,不可預測。假如我控制了這個規則,就可以作弊,選擇我的節點來計算。

還要保證計算正常進行,多個節點同時執行,只有一個數據最有效。

通俗地來說,共識演算法就是:在網際網路上,我憑什麼相信和接受你算出來的東西,共識演算法就是為解決這個問題而存在的。

具體是怎麼解決的呢?常見的有幾種演算法:

POW 工作量證明

工作量證明的基本原理是:通過暴力計算的方式來求得一個計算難度極高的數學解,其目的是為了增加作弊的成本。就是說這個節點必須不停地計算,然後求得一個解,如果算對了,這個節點就是礦工,這個計算的過程很難,有一定的計算成本,保證礦工選擇的高度隨機性,如果過程很簡單的話,就很容易作弊,也很容易被控制。在這個計算過程中,最終的結果可能只是做了很多無用功,浪費了大量的計算。

我們來看其程式碼實現,最終是要計算出小於這樣的一個值。當然區塊鏈有不同的計算方法,大概的意思都差不多,就是經過一系列複雜運算,計算得出一個比它給出的值還要小的結果,那你就是礦工。這個給出的值本來就很小,它前面有14個空格,你算出來的值要在前面14個空格,才是有效的。這個數是算雜湊值,當時我算了一下,好像是幾萬億分之一的概率。如果你想要挖礦的話就只能不停的算,一個節點做了大量計算,偶然像中彩票一樣,被選為礦工,就可以去負責在全網做一個計算。將來誰的計算能力越高,被選中為礦工的機率就越大。

為什麼說古已有之?

區塊鏈技術確實是一項偉大的創新,但它是一種應用式創新、整合式的創新,而非顛覆式的發明。工作量證明在很早以前就有了,上圖是我從維基百科擷取的,1999年的時候就提出過這樣的方法,當然它不是用於比特幣,而是用於判斷垃圾郵件或可信身份方面,原理是一樣的。

很多人提出異議:工作量證明會耗費大量的計算和資源。我個人覺得:無用即是有用,這是一種合理的浪費,信任的代價。信任是有成本的,可能就是通過工作量證明而來,在去中心化的場景下,必須要付出這些代價。當然了,現在社會還是中心化的組織,為什麼相信他可以代表一個公司、一個企業,甚至代表政府?因為他是有信任力的,我們對這個中心化的組織是有信任的。而網際網路上,我憑什麼相信你呢?POW是一種解決方案。

POS系列

當然也有很多人質疑,除了浪費資源以外,還因為誰的計算能力強,誰就獲得記賬的權利,那如果有人投很多錢建立一個礦池,買很多礦機,擁有強大的算力,就可以壟斷記賬,這就不公平。

因此後來衍生出POS系列,不用工作量的方式來實現,它的方式非常簡單,和銀行存款一樣,按照節點的持幣數量和持有天數,計算某一時間內,參與計算的各個節點優先順序順序。

這個方式在理論上實現了人人平等,實際上還是有錢人說了算。持幣太少的話,在一個記賬區間內其實是沒有機會獲得記賬許可權的。普通人在這個節點上沒有獲得記賬許可權,沒辦法獲得收益,怎麼辦?因此衍生了DPOS選舉代理計算節點,由計算節點進行計算,投票節點分享收益。

DPOS的優點是:計算任務由少數人承擔,計算速度快。

缺點是:存在中心化的傾向。

2、加密技術

非對稱加密

非對稱加密技術不是區塊鏈或比特幣獨有的,而是在以前就存在,它解決了匿名身份的認證和資料安全的問題。

為什麼叫非對稱?在網路傳送資料的時候,用公鑰來加密,用私鑰來解密。一般來說公鑰是接收方的賬戶地址,比如我要把這個幣轉給你,我事先肯定要知道你的地址,那麼我就把你這個地址的這串字元作為一個公鑰來加密,私鑰是根據公鑰產生的,不能逆推,如果有人知道了公鑰,其實是解密不了的,必須用私鑰才能開啟。

非對稱加密技術解決了身份認證和資料安全的問題,就是說如果有人截留你了,甚至知道你的公鑰都沒有用,因為只有私鑰才能開啟這個資料。

3、P2P網路

點對點的傳輸技術,是區塊鏈脫離中心化伺服器控制,形成公共賬本存在的基礎。公共賬本為什麼會存在?你去連結到一個區塊鏈網路,就可以把整個網路下下來,只有P2P點對點傳輸技術才能把這些資料下下來。

當然點對點傳輸也不是所有人都是普通的伺服器,節點上也有一些大型的伺服器來支撐整個網路的運轉。

4、公共賬本-區塊鏈資料

為什麼叫區塊鏈?

1)它是由很多個區塊首尾相連形成的,包括創世區塊、區塊鏈0001、區塊0002……它跟傳統資料庫是有區別的。

2)整個資料(賬本)可以存在於每個計算節點上,當然這個電腦硬碟要足夠大,因為節點資料很多。

3)歷史資料不可能篡改。這個是存在一定爭議的,理論上通過分叉等其他控制也是可以改的,只是實際操作難度比較大而已。資料是首尾相連的,想在中間加一個數據,或改一個數據,是改不掉的,它是通過校驗的方式去實現的。

4)存在容量瓶頸。為什麼呢?公共賬本的資料如果太大,大家就很難儲存了,所以,目前的技術還不適合儲存大量資料(如圖片、視訊)。

5)具有先天的效能和統計缺陷。沒辦法做一些複雜的統計。

3
發展前景:去中心化的信仰,複雜問題需要複雜的技術

我認為目前還處於前區塊鏈時代,還沒有正式進入區塊鏈時代,只是一些概念被炒得很火熱。我們設想的區塊鏈世界是一個理想的社會:

1)沒有邊界的社會,人人都可以協作。

2)可程式設計的社會。技術在改變我們的社會,但是我們能不能做到一些更加智慧化、定製化的東西?現在還很難,比如空調,升高降低溫度還需要靠遙控器來控制,將來某一天我們能不能對空調進行程式設計?讓技術深入到生活和社會的方方面面,這些未來都可以在區塊鏈上完成。

3)契約化的和民主自治的社會

我們認為目前區塊鏈技術還處於一個比較低階的階段,還承擔不了這樣一個職能,但相信未來一定是這樣一個社會。網際網路還有一個匿名的特徵,同時還是分散式的,還要有工具和技術來實現,要可程式設計要自動執行,不能輕易更改,這些都是區塊鏈提供給我們的,有了這些區塊鏈世界才能達成。

去中心化

很多人都在說去中心化,那麼這個潛在的需求是什麼?是去中心化的需求,有些東西就是要去中心化。我們簡單地從一人世界、二人世界和多人世界這個角度來理解,這也是一個專家學者提出來的社會學的概念。

在一人世界中,比如一個家庭裡面,或者你跟你的親屬之間就是一人世界,就是圍著某個人轉,這個世界比較簡單,這肯定是一箇中心化的場景。到了公司可能也是,為這家企業工作,圍著股東董事會或者公司總經理,也是一人化的世界。

再往前一點就稍微複雜一點,比如供一個產業鏈,這時可能不是一個公司說了算的,上下游會互相博弈。到了國家層面就更復雜了,比如國家選舉、執行一項重大決策等。到全球貿易,全球市場就更復雜了,可能會變成一個多邊協作的關係。

多元世界就是人人之間的協作,比如我現在想從某一個國家買一個東西,假如有人出售,我就可以去買。現在的很多交易都會依賴一箇中介,比如淘寶或者其他的網站,這個中介就是中心化的組織,其實很多去中心化的場景是依託於中心化的方式來實現的。如果有一個去中心化的東西,我和他之間的商品交換能夠通過這個去中心化的東西更順利進行,交易成本更低。

所以我想,未來我們怎麼通過這種去中心化的技術來滿足去中心化的場景,而不是像現在很多人說的那樣,去中心化的東西要顛覆中心化。

什麼是真正的去中心化?

當前網際網路、共享經濟宣稱的“去中心化”是偽去中心化,因為點對點交易仍然依賴於商業組織提供的中心化服務,並被監控和剝削。

舉個簡單的例子,比如現在某些打車軟體,還是依賴於這個公司的伺服器,它承擔了一箇中介的職能,在整個過程中會監控資料、利用資料,甚至竊取資料,這就必然產生剝削行為,軟體會向司機收錢,比如你支付20元,實際司機只能拿到15元。

真正的區塊鏈是這樣的,不需要通過哪個公司,直接查詢車主。車主向區塊鏈釋出資料,我的車現在閒著,誰願意用,位置在哪裡,打車的人可以直接在區塊鏈上下單,司機接單跑完這個服務。這個時候誰來支撐網路執行呢?誰負責這個交易的撮合呢?礦工,他要支撐這個網路運轉,必然也會收取一定的費用,但他收取的費用肯定遠遠低於中心化組織。大家可以沿著這個思路去擴充套件。

複雜的地方需要複雜的技術,那些場景是比較複雜的?人類社會最複雜。

區塊鏈技術不能亂用,有些東西比較簡單沒必要非得用區塊鏈技術來解決。有人說你這個企業資料量太大,使用者量一大就宕機了,區塊鏈執行比較安全、穩定、可靠,可以解決你的宕機問題。我覺得這完全是胡說八道,宕機的問題通過區塊鏈來解決是不現實的。

複雜場景的複雜問題以及其對應的複雜技術,包括:

1)沒有負責人,這個可以通過共識演算法解決。

2)各主體互不信任,甚至有利益衝突,可以通過分散式計算、可程式設計合約、強制執行解決。

3)場景多變、不確定性強,存在惡意參與者,還有一些精確計量和沒有規則的,可以通過自定義合約,一次性合約、資料公開或有限透明、資料分散式儲存不可篡改、業務代幣化、量子化等解決。

比如電子合同的簽訂,現在籤合同大多是線下的紙質合同,還得蓋騎縫章,如果兩個公司之間通過區塊鏈或一個類似平臺,互相發電子合同就可以了。

區塊鏈技術是一個複雜的東西,適合應用在複雜的場景中。

我覺得區塊鏈技術最偉大的地方不是前面說的共識演算法,而是它有一個自我進化的生命力——經濟體系。

它是去中心化的,那它怎麼運營、怎麼推廣、技術怎麼迭代?中心化組織有一個開發團隊,受盈利或KPI驅動,會推動它向前發展。而去中心的怎麼推廣?它有一套經濟體系在執行。

首先是眾籌資金,拿到資金後做產品開發,上線之後發行token,然後上線挖礦,挖礦獎勵可以去交易所變現,有了錢之後就可以運營推廣,之後產品又有了新的生命力,進行更新迭代。每一個環節組成一個命運共同體,共同進化。

這是一個技術與商業的完美結合,它是自我迴圈的技術歸屬於全人類,依託於區塊鏈而不是某個組織。避免技術反噬或反惡人類。AI火爆的時候大家都擔心一個問題,機器人越智慧對人類的威脅越大,如果某一個很高深的技術被某個組織控制了,而這個組織有作惡傾向,利用它來對抗人類是可怕的。如果這項技術是屬於區塊鏈的,那麼,就是公開、透明的,本質上這個技術是屬於全人類的,大大降低了作惡的可能。

4
誤區澄清:token不是洪水猛獸,點對點價值交換的媒介

1、token是貨幣

我認為token不是貨幣,它是虛擬商品,充當價值交換媒介,並未增加貨幣挖礦獲得的token才是真token,以太坊上發行的代幣根本就不是真token。Token是支撐網路執行的獎勵,前面說過,礦工挖礦、負責這個網路的計算、儲存資料,要給他獎勵驅使他工作,特別是支撐全球的網路運轉,靠義務奉獻是不現實的。

Token避免不了炒作、投機等市場自由買賣引起的問題,沒必要汙名化。Token可以實現線下資產數字化、價值網際網路化,不依託於中介和中心化組織。還可以自由進行線上流通,擺脫積分、郵卡等資金盤套路。

舉個例子,我有一套房子,這個房子值100萬,假如我想把它部分變現,其實很難,除非去銀行抵押貸款,但是我只想抵押一部分可以嗎?抵押10%,我拿10萬塊錢回來,90%的產權還歸我所有,這在銀行做不到。房產證只能抵押一次,不能說我只抵押10%,但是對銀行來說,你的房產證必須拿出來,全部抵押,沒辦法拿出一部分,因為產權不是數字化的,不可以分割。

如果把它變成token就可以了,我發行100萬個token,如果我想變現10萬,就賣出10萬個token,剩下90萬個token還在我手裡,相當於還有這套房子90%的控制權。當然這也是對未來的暢想,短期內實現比較難。

Token和資金盤有什麼區別呢?我們經常看到積分商城等資金盤套路,它們只能在規定的網站內使用,脫離開這個區域就沒辦法流通,token則不一樣。比如我有一個比特幣,全世界範圍內都可以流動,交易所之間可以互相轉賬,人與人之間都可以去轉移,不存在盤內流動的問題。

2、挖礦浪費資源

舉個例子就很好理解了,有一些國家的國會開會,參眾兩院天天吵架,不停投票,互相舉證等,週期很長,這是在浪費資源嗎?他們並不覺得,這是達成新共識的一種成本,人與人之間要進行協作要達成共識,本來就很難。

挖礦是分散化、去中心的方法,也是規則公開、自治的選擇。網路需要有礦工來支撐,如果只有一個礦工那他說了算,這怎麼叫去中心化?

挖礦是支撐網路執行的基礎設施。不挖礦的話,網路誰來執行?誰來計算?

挖礦是區塊鏈的根基,不能動搖。

3、區塊鏈效能不佳

不是所有的交易都是越快越好,不是所有的服務都是吞吐量越大越好,也不是所有的計算都需要極致的使用者體驗,防止上當受騙才是重點。

區塊鏈解決的問題場景不同,效能好的中心化伺服器和效能“不好”的區塊鏈服務是不可互相取代的。

4、區塊鏈顛覆中心化組織

這個完全不可能,我認為中心化組織有它的優勢:

1)資源優勢、集中;

2)組織力強,定目標行動快;

3)功利性強,其目的是為了盈利或實現某個目標;

4)外部難以監控。

中心化組織適用於:公司、政府、司法等。

去中心化組織也有它的好處:資源少,比較分散;公益性強;公開透明,你的資料是公開的,每人有一份,匿名性也不是很強。不好的地方在於:它是一盤散沙,很難達成共識。

去中心化適用於:公益、輿論、點對點交易、眾籌等。

這兩者分別有其適用的場景,不能走極端說誰取代誰。

5
學習知識圖譜

最近區塊鏈技術很火,行業工資也很高,很多朋友說想學不知道從哪學起,上圖提供給大家參考。

我們還處於前區塊鏈社會時代,未來很美好,前途也很光明,只是我們仍然要認清當前現實,技術仍然比較原始,盲目樂觀需要澆一瓢涼水,但正因為技術在起步階段,才給了我們每個人學習和成長的機會,抓住一波浪潮,獲得更廣闊的發展空間。

內容來源:HiBlock區塊鏈課堂001期 林海龍老師的線上分享《破解區塊鏈的密碼——技術進化之路》               

本文編輯:Cynthia

以下是我們的社群介紹,歡迎各種合作、交流、學習:)