區塊鏈(blockchain)源于2008年出現的`比特幣`之中。比特幣需要一個公開透明`總賬(Ledger)`,來達到一種`去中心化` (Decentralized) 的、`無需信任` (trustless) 的范式。在這種范式中,任何互不了解的人可以通過加入該總賬,通過點對點的記賬、數據傳輸、認證或是合約,而不需要借助任何一個中間方來達成信用共識。這個總賬包括了過去所有的交易記錄、歷史數據及其他相關信息,所有信息都分布式存儲并透明可查,并以密碼學協議的方式保證其不能非法篡改。
作為一種去中心化的網絡信息管理方式,區塊鏈技術主要有四大特點:
1. 去中心化(更準確的說是分布式),區塊鏈數據庫分布式記錄、存儲,與傳統數據庫的中心化記錄、存儲截然相反;
2. 去信任化,區塊鏈通過數學方法,依靠非對稱加密和可靠數據庫,通過特定的算法為網絡中的節點制造信用、產生信任及達成交易共識,最終 完成去中心化;
3. 集體維護,區塊鏈中的每一個區塊都是由整個系統所有節點(或者部分節點,但足夠達成共識)共同維護;
4. 可靠數據庫,系統中的每個節點都有一份完整的區塊鏈內容拷貝(或者多副本,但并非全節點全復制),除非同時控制整個系統超過半數以上的節點,否則單個節點的改寫無效。
我們剖析底層核心技術,具有兩方面的意義:技術分析是為了更好的發展區塊鏈應用!
技術核心問題歸類
區塊鏈技術的核心問題仍然屬于分布式計算領域的經典問題:`拜占庭將軍問題`,`共識`算法,`加密`算法,`哈希`算法…但是比特幣第一次有效解決了大規模去中心化P2P網絡達成無法篡改的共識的所有障礙,并得以在“貨幣”這個需要極其嚴謹的應用上第一次取得了成功。所以我們將會圍繞這些方面,進行分類, 總結, 分析 各個應用的異同點。我們將從下幾個方面,分類當前市場的主要區塊鏈應用和加密貨幣,來層層深入,領略各自的技術特點:
目前大家幾乎只關注共識機制,還有所謂的“性能陷阱”。但實際上,作為一種分布式計算的架構,不研究底層存儲、數據同步機制,談單機的性能優化其實是沒有“工業價值”的。所以本文會研究完整的技術棧。
PoW相關技術分析
`Proof of Work` 是比特幣系統里解決選擇下一個負責創建新區塊節點的核心思想。主要方式是讓所有想參與的節點全部一起競爭: 計算上一區塊的hash值 + 當前未處理交易數據 + 時間戳 + 一些可變隨機參數, 目標是得到前綴為若干個前導“0”的hash結果。這個計算量是很大的, 但是一旦算出來, 其它節點驗證其正確性是很簡單的。 這種機制, 解決了新區塊產生的公平性和信任問題, 經濟上, 也讓參與者(`礦機`)有機會獲得一定的收益形成生態鏈, 成為BTC被廣泛接受的基礎。
此后的各種新加密貨幣, 對PoW算法也做了多種改進。下面分析幾個主要的使用PoW的應用。
BitCoin (比特幣)
比特幣是一切加密貨幣的鼻祖,也是第一次應用區塊鏈技術的創新應用。
作為首個開創性的加密貨幣,比特幣用到了大量的加密算法:
1. 在計算散列時會計算2次。大多數情況下,使用SHA-256散列,RIPEMD-160會用于生成較短的散列(例如生成比特幣地址的時候)。
2. 使用橢圓曲線 數字簽名算法(ECDSA)對交易進行簽名
3. ECDSA 使用了 http://www.secg.org/collateral/sec2_final.pdf 中的secp256k1曲線
4. 公鑰(in scripts) 以 04 《x》 《y》的形式給出,x和y是表示曲線上點的坐標的32字節字符串。簽名使用DER編碼 將 r 和 s 寫入一個字節流中(因為這是OpenSSL的默認輸出)。
參考文檔:
· SHA-2安全哈希標準算法 幾乎所有加密貨幣都用到的基礎hash算法
· Merkle樹 基礎算法:數據塊完整性驗證
· Bloom Filter 基礎算法:快速確定存在性
· 比特幣源代碼
比特幣被詬病最多的幾個方面,也就造成了其它派生加密貨幣的誕生:
LiteCoin (萊特幣)
派生于 Tenebrix(TBX)主要目的是抵抗顯卡挖礦導致的不平衡。萊特幣對比特幣的改變很小, 主要是PoW證明算法改成了Scrypt。具體如下:
第一,Litecoin網絡每2.5分鐘(而不是10分鐘)就可以處理一個塊,因此可以提供更快的交易確認。
第二,Litecoin網絡預期產出8400萬個Litecoin,是比特幣網絡發行貨幣量的四倍之多。
第三,Litecoin在其工作量證明算法中使用了由Colin Percival (著名的FreeBSD黑客) 首次提出的scrypt加密算法,這個改變導致了經濟上的變化: 由于Scrypt算法需要更長的時間和更多的內存, 使得`礦機`的難度更大, 收益率更小, 因此對參與者而言“可能更公平” (需要頻繁內存訪問的算法, ASIC礦機相較普通CPU的優勢減小了)。
DarkCoin
DarkCoin(Dash, 達世幣)主要目標是“更加匿名化的虛擬貨幣”,更加難以追蹤,同時更快的交易速度和更低的費用(BTC網絡擁擠,同時BTC價格很高,導致交易費比較高了)。
達世幣(DASH)是一款支持即時交易、以保護用戶隱私為目的數字貨幣。它基于比特幣,特有的雙層網絡使其能夠更加全面的進行測試和更新。如同使用現金一樣,達世幣可以有效的保護您在交易過程中的財政隱私。當使用比特幣時,交易都會被寫到數據塊鏈中,您可以查詢到接收和發送雙方。然而達世幣通過匿名技術,使得交易無法被追蹤查詢。匿名技術極其重要——因為任何網絡用戶都可以進入數據塊鏈查看交易,對于那些不想暴露交易記錄和財政隱私的用戶,這無疑是硬傷。達世幣通過獨創的去中心化網絡服務器“主節點”混淆交易,實現匿名。無需第三方,有效的避免了因第三方介入所帶來的不穩定性。
X11加密算法由達世幣核心開發者Evan Duffield創立。X11算法是由11種加密散列算法組成的工作量證明加密算法,因此其具有公平的分配機制并且與比特幣的分配機制相同。由于算法的復雜性,使得制造礦機的難度大大提高,至少需要幾年時間。由于鏈式加密算法的特性,高端CPU與一些GPU的算力相似。由于此新算法的優勢,使用GPU挖X11算法的達世幣會比挖使用Scrypt算法的幣種降低約30%的能耗以及30%-50%的發熱量。
PoS相關技術分析
PoS的目標是取代PoW這種在分配體系中達成一致的方式。PoS引入“幣齡”的概念,幣齡=幣數*持有時間,通過幣齡來作為投票權重。出塊用一定的公司計算值,達到所需要的幣數(也叫做目標,是由網絡通過類似于PoW的難度調節機制來規定的),以此來確保大致恒定不變的出塊時間。
PoS需要基于一個“去中心化的、安全的數字資產”以及證明機制,而btc本身就是這樣的數字資產,所以很多PoS需要基于btc構建stack池。
傳統的電子貨幣體系一直都依賴一個中心化的服務來保障交易安全,如何去中心化已經討論了幾十年了,一個主要的問題就是如何構建一個能夠確保多點一致性同時又是去中心化的BFT(Byzantine fault tolerance)系統。
在比特幣(Bitcoin)提出之前,大家的研究可以達到容忍25%的節點攻擊,但這并不能解決問題。直到2008年,中本聰(Satoshi Nakamoto)提出的比特幣把這個比例提高到了50%。同時,一方面通過挖礦收益來鼓勵節點加入網絡,從而進一步提高攻擊難度;另一方面,通過對每十分鐘產生的一個區塊進行鏈式簽名,這樣,這個鏈上每多一個區塊,之前區塊的偽造難度都會指數級上升。
比特幣解決了這個問題,并且目前一直是市值最高的電子貨幣,但大家并沒有停止研究。其中一個研究點就是比特幣采用的工作量證明機制。在中本聰的論文里,工作量證明機制是被希望為每CPU擁有一個投票權(one-CPU-one-vote),并選用了兩次SHA-256算法。然而,從今天來看,這種算法決定了它和能耗、硬件投入有著直接的關系。雖然比起傳統貨幣體系里花費的能耗,比特幣花費的可能微不足道,但硬件上的不公平性卻越演越烈。從CPU挖礦到顯卡挖礦再到ASIC設備挖礦,硬件之間的差異越來越明顯,也開始背離了每CPU一個投票權的初衷。為了解決這個問題,著名的Litecoin和Darkcoin通過替換算法的方式一定程度降低了對能耗的要求,同時讓算法更依賴CPU來降低硬件上的不公平性,但并沒有從根本上解決。直到2011年出現的權益證明機制,它不依賴計算量,是目前最有效的解決辦法。之后的Peercoin和NXT便采用了這種機制并證明了其可靠性。
NXT (未來幣)
NXT主要針對PoW類加密貨幣的挖礦能源消耗問題,使用了PoS方式來達成共識。技術上,Nxt最根本的革新就是透明鍛造(Transparent Forging)。這種方式是PoS的一種技術實現。
在Nxt的PoS模型里,安全性是由持幣者保證的。由POS帶來的好處不會產生在PoW中的集權化趨勢,并且數據顯示,NXT從誕生開始保持了非常好的分布式狀態。在網絡中貢獻block的獨立用戶數正在非常快速的增長并且保持了一個較大的數字,前5名top持幣者貢獻了35%的blocks。
Ethereum (以太坊)
“以太坊”是在比特幣之后,加密貨幣領域比較大的創新產品。事實上,以太坊的重點不在于原生貨幣–以太幣上,而是“智能合約”。
以太坊試圖提供一個自帶有完整“圖靈完備”編程語言的區塊鏈,可以讓用戶用來創建任意的“狀態轉移(state transition)”功能的“合約”,也就是號稱“智能合約”。允許用戶創建像下面這些系統:
1. 定制化的貨幣和財產 (“colored coins”)
2. 優先權屬物理設施的所有權證明 (“smart property”)
3. 不可代替的資產,比如域名 (“Namecoin”)
4. 涉及通過一段代碼來實現任意規則的數字資產直接管控的復雜應用 (“smart contracts” 智能合約)
5. 基于區塊鏈的“去中心化自治組織” (DAOs)。
技術特色上:
1. 使用了新的“內存消耗”算法(和Scrypt算法類似,降低礦機的優勢)
2. 使用“GHOST blocktrees” 取代傳統的區塊鏈
3. 區塊內部數據結構使用“Patricia trees”,而不是 Merkle Tree
4. 交易數據可以包含程序代碼,也就是“合約”
DPoS技術分析
DPoS是 比特股在PoS基礎上提出來的,delegated的PoS,主要目的是擴大交易容量。 核心思想是,預選出后續時段的一系列代理(選舉過程還是用PoS),產生區塊的權利直接交給預選出來的節點。這樣保證非常高的速度去達成一致性。因為選舉還是用PoS,只是提前和其它工作并行,所以稱為DPoS。
BitShares
BitShares (比特股,BTS)最大的改進,就是針對比特幣的交易效率和確認速度太低,而提出來的“工業級”的擴展區塊鏈技術。
密碼學貨幣和智能合約平臺若想成為當前金融平臺的可用替代品,高性能的區塊鏈技術是不可或缺的。BitShares的設計從最底層就是為了比VISA和MasterCard加起來還多的交易處理能力。基于DPoS的設計,BitShares網絡能夠在平均僅1秒的時間里確認交易,僅受光傳輸的速度限制。為了實現這個業內領先的性能,比特股借鑒了從能達到6百萬TPS的 LMAX) 交易平臺里學到的經驗。經驗中的關鍵點如下:
1. 將所有東西都放在內存
2. 將核心業務邏輯保持在一個單線程里
3. 將加密算法操作(哈希和簽名)保持在核心業務邏輯外
4. 將校驗分成有狀態和無狀態兩種檢查
5. 使用面向對象的數據模型
遵循這幾條簡單原則,BitShares在沒有進行任何特別優化的情況下就能每秒處理10萬次交易。未來的優化預計會讓BitShares的性能達到LMAX的水平。
應當注意的是,BitShares達到的性能很大程度上受限于一個兼容交易協議。在一個核心業務邏輯運行在一個需要執行加密算法操作和所有對象都靠哈希索引的虛擬機上的協議里,達到同樣的性能水平是不可能的。區塊鏈本質上是單線程的,加上CPU單個核的性能是各種資源中最受限和最不易擴展的。BitShares設計成讓這種單線程的執行效率最高化。
PoS+PoW相關技術分析
PoS + PoW
對比PoS和PoW各自的缺點后,新的一種證明形式出現了。
為了減少礦池控制的風險等原因,PoS被引入;但又要保持給礦工收益保持網絡規模,同時需要PoW。所以這種結合體出現并發展。
PeerCoin
Peercoin(PPC、點點幣)是第一個實踐了PoS的加密貨幣,也是混合模式的原創者。像其他加密貨幣,初始貨幣能被挖礦,但核心網絡還是掌握在幣的持有者里,而不是最快速的礦池。用PoS/PoW算法的網絡,能夠減少幾個PoW的風險:自私礦主、51%攻擊等,也能減少能源消耗。
Novacoin
Novacoin (NVC), 派生于PeerCoin,主要改變證明算法和區塊參數。
其他共識方式
因為主要目標和加密貨幣不同, 在共識機制上, 有的應用產生了不同的演化方向。并且由于共識機制的不同, 對`去中心化`的程度也不同, 比如為了成為`銀行基礎架構`目標的Ripple, 在自己的半中心化架構上, 實現了金融基礎架構需要的快速確認, 高吞吐量, 價值流動低成本 等核心需求。
Ripple
Ripple的目標并不是運作一個虛擬貨幣(雖然他們有內置原生貨幣XRP,用于撮合不同貨幣、資產的橋接、匯兌),而是有遠大的多的目標:“Ripple的分布式金融科技讓世界各地的銀行可以直接交易而無需中央對手方或代理銀行。Ripple可以讓銀行壓縮運營成本并且提供跨境支付服務…” 雖然筆者覺得這個目標不切實際,難以推動區塊鏈生態的真實運轉,但是它的確提供了一種新的共識方案,一個優秀創新的工程項目。
從技術角度而言,Ripple的確更接近銀行類金融機構的基礎架構形態。
Stellar
Stellar(恒星幣)創始人Jed就是原來Ripple的聯合創始人和主要技術開發者,因為發展方向矛盾而另立門戶。基本上恒星幣繼成了Ripple早期版本的核心,但是修改了核心的共識算法。
由于用了全新的共識算法,Stellar出現過嚴重的fork問題(網絡里的參與節點產生了兩個區塊鏈,各有一半的節點執行兩個鏈條),導致信用下滑,從而導致重新編寫共識機制,并理論性證明。
評論
查看更多