1. 程式人生 > >從道法術三個層面理解區塊鏈:術

從道法術三個層面理解區塊鏈:術

image

區塊鏈對當下的大家來說,都還是盲人摸象的階段,所以經常群裡有各種爭論,歸結起來,都是有的摸到了大腿,有的摸到了耳朵,相互之間就難以說服對方。

image

各自有各自的認知

筆者嘗試從道法術這三個層面來解讀下區塊鏈,以便讓大家有個更全面的瞭解,也知道自己的認知的針對性實際是什麼。

區塊鏈首先是區塊鏈技術,這也幾乎構成了區塊鏈在術部分的全部。 也構成了道和法的基礎。離開術來空談道和法,是不夠腳踏實地的,而是空中樓閣。據傳,三點鐘群如果談論技術的話,會被踢出群的,這就暴露了大佬們在技術上的虛弱。

我們先來說說區塊鏈的鼻祖比特幣用到的計算機技術:

  • 1929年的逆波蘭表示式

  • 1970年的布隆過濾器bloom filter

  • 1989年的默克爾merkle樹

  • 1999年的橢圓曲線數字簽名演算法

  • 2000年的p2p網路

  • 2001年的sha-256(還有別的,不寫了)

  • 2009年的blockchain(首創)

今年接近90歲的逆波蘭表示式構成了比特幣的加鎖和解鎖指令碼的棧式執行。比特幣的加鎖和解鎖指令碼使得比特幣可以支援非常靈活和多樣的交易形式,保證交易(bond transaction),返還交易(refund transaction),擔保交易,多重簽名等。

70後的布隆過濾器(bloom filter)來了,Bloom filter可以在一個有很多元素的集合中高效判斷元素是否屬於該集合,元素屬於該集合的不會誤判,元素不屬於該集合的會有小概率誤判。比特幣的輕錢包需要用瘦客戶端模式實現的錢包,因為不儲存完整區塊鏈,就涉及到如何獲取UTXO的問題。比特幣就是用布隆過濾器(Bloom filter)在快速檢索並返回相關資料的節點

**80後的默克爾**merkle樹可以高效地比對大檔案在傳輸過程中是否有出錯或改動,同時還能高效地定位出大檔案是哪一個的片段出錯了,從而只要重新更新該片段即可。比特幣用merkle樹來將塊中的所有交易作為樹的葉節點,來實現塊的交易資料的準確高效傳輸,並把merkle樹根作為block header的主要資料。

90後的橢圓曲線數字簽名演算法正式出場了。所有發行出來的比特幣都體現為未花費的交易輸出UTXO,也就是目前大約是1640萬枚的比特幣,是呆在一堆UTXO裡。那麼這些UTXO理論上是無主的,每個UTXO有一個加密指令碼,只要誰有辦法解開,誰就可以使用這個UTXO裡的比特幣。一般地說,大部分的加密用公鑰加密,用對應的私鑰來解密。由於橢圓曲線計算的非對稱性,即求乘積很容易,但求除法很困難,換成加解密的角度來說,就是知道私鑰,容易算出公鑰,但知道公鑰,是算不出來私鑰的。這樣客觀上保證了即使UTXO是公開的,也只有私鑰持有者可以使用。

00後的p2p網路重磅登場。其實這個雖然很多人不一定深入瞭解它的原理,但多數人又都用過。多數人是用過BT或迅雷來下載過檔案,它的背後就是p2p的網路。這一技術的發明是為了解決中心化的伺服器要不斷地擴容才能滿足越來越多的使用者請求,而且使用者越多,系統越慢。p2p由於是peer2peer的,也就是下載的檔案來自於全球分散的電腦裡,而不是中心化的伺服器,這樣極大的避免了中心化的伺服器的擁堵。而且,使用者越多,提供下載的節點也就越多,是一個正向的反饋激勵。比特幣也是應用p2p網路來進行分散式計算的。每個全節點都要將廣播接收來的交易校驗、打包成塊,並廣播出去,將廣播接收來的打包好的塊檢驗後記錄下來,並在其後進行新的打包成塊。p2p網路也是區塊鏈技術中最為重要的一個篇章。

sha-256等報文摘要雜湊(hash)函式是為了對資料進行摘要處理,從而發現原始資料是否有被修改,哪怕是非常細微的修改。同時,hash值又可以用來做key value資料庫的key,這樣查詢就可以非常快。比特幣採用工作量證明POW(Proof of Work)作為共識演算法,又把隨機數加塊頭的一些資料來計算滿足難度的雙sha-256結果的計算當作工作量。POW有效地避免了公開的交易賬本被修改的風險,因為要想修改,也需要足夠的算力去重新計算,因為每個塊都需要足夠的工作量,也就是時間,所以嘗試修改的人是難於在落後其他人的情況下追上其他人的。

最後是非常狹義角度的區塊鏈。狹義是在於區塊鏈本來只是一種資料結構,也就是最常規的連結串列結構,每個節點(block)都有一個指標指向前一個節點(block),由於這裡採用的是塊頭block header的資料生成的hash來作為指標,也就天然的讓任何一個塊的修改,都需要這個塊後面的指標全部重新計算。

我們現在習慣的區塊鏈技術實際是以上技術整合的總稱。可以這樣來定義:區塊鏈(Blockchain)是指通過去中心化和去信任的方式集體維護一個可靠資料庫的技術方案。該技術方案讓參與系統中的任意多個節點,把一段時間系統內全部資訊交流的資料,通過密碼學演算法計算和記錄到一個數據塊(block),並且生成該資料塊的指紋用於連結(chain)下個數據塊和校驗,系統所有參與節點來共同認定記錄是否為真。

有了比特幣開創的區塊鏈技術和第一個實際應用,我們就容易理解其它區塊鏈應用是怎麼回事了。**首先呢,p2p是必不可少的,是區塊鏈應用用來實現分散式計算的網路基礎,其次要有數字簽名,目前肯定是非對稱加密,一般而言也會用橢圓曲線,因為這是目前最難被破解的,再就是要報文摘要hash函式。**merkle樹及其變種也是主要的利器。

以太坊主要是針對比特幣的腳本系統進行擴充套件,用虛擬機器VM去替代棧式計算,用仿javascript的solidity來替代指令碼語言作為智慧合約的語言,以準圖靈完備來代替比特幣的非圖靈完備。用merkle patricia樹來替代merkle樹。就被追捧和成為了區塊鏈2.0. vitalik更是由此封神,並擁有價值300億美元的eth。

從這些基礎的技術展開思考,我們還可以看到採用p2p來搭建系統從技術層面上帶來類似用RAID替代高可用硬碟的效果,就是可以用很low的計算機來實現高可用HA(High Availability),從而達到計算成本的降低。推而廣之,就是可以不用Iaas層就可以直接開幹SaaS,直接構建應用,這樣就大大擺脫了對AWS和阿里雲的依賴。

本文內容作者:HiBlock區塊鏈社群“一起寫筆記”小夥伴——星星之火待燎原

原文首發於今日頭條

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

image