公有链的本质挑战
本文是 Fundamental challenges with public blockchains 的非完全翻譯。
原文作者 Preethi Kasireddy 是 Coinbase 的前員工,她寫的技術文章非常適合新手閱讀。
【轉載須知】
- 請在轉載圖文中注明 1) 原文作者 2) 譯文作者 3) 譯文出處(鏈接形式注明)。
- 無需通知譯者,直接轉載即可
毫無疑問,區(qū)塊鏈技術有巨大的潛力。在 2017 年里,人們高昂的熱情為 ICO 募集了數(shù)百億資金,大大提升了加密貨幣市場的規(guī)模。
然而,另一面卻沒有得到足夠重視:區(qū)塊鏈存在一些技術壁壘(technical barriers),這導致難以有效地將它應用到主流人群里。這些技術壁壘包括:
在這篇文章里,我會一一闡述這些技術壁壘,并分享一些可行的解決方案。
1. 可擴展性的限制
當前公有鏈的共識協(xié)議都存在這樣的限制:網絡中的全節(jié)點參與者需要處理全部交易。
為什么會這樣?因為區(qū)塊鏈本質上是「去中心化」——這意味著不存在一個中心團體來保護和維持系統(tǒng)。取而代之,網絡的每個節(jié)點都會處理每筆交易并維持全狀態(tài)副本,通過這種方式來保護系統(tǒng)。
去中心化共識機制的關鍵優(yōu)勢是安全保證、政治中立和抵抗審查等。然而,這是以擴展性為代價換來的,因為去中心化限制了區(qū)塊鏈里全節(jié)點可處理交易的數(shù)量。
實質上這帶來了兩個影響
因此,在公有鏈里,我們需要在低交易吞吐量和高中心化之間做一個權衡。
換句話說,隨著區(qū)塊鏈大小的增加,網絡里全節(jié)點所需的存儲、帶寬和計算能力也會增加。當?shù)竭_某個時刻,就只有少數(shù)節(jié)點才能提供足夠資源來處理區(qū)塊——這會帶來中心化風險。
在那種情況下,我們會回到需信任少數(shù)大節(jié)點的中心化系統(tǒng)里。然而我們所希望的系統(tǒng)是:它既能每秒處理上千筆交易,又能帶來一定程度的去中心化。
可擴展性的解決方案
理想狀態(tài)下,我們希望所設計的區(qū)塊鏈有著與比特幣和以太坊相近或更好的安全性,但同時又不希望網絡里的每個節(jié)點都要處理超過一定比例的交易。換句話說,需要一種機制,來限制驗證交易的節(jié)點數(shù)量(注:因為減少驗證節(jié)點數(shù)量可以提高吞吐量),同時又保證網絡里的每筆交易都是合法可信。這聽起來很容易,但在技術上非常困難。
可擴展性是平臺走向成功的一個巨大障礙。下面是一些不同開發(fā)團隊正在努力研究的解決方案。在這一篇文章里我已經對可擴展性解決方案進行了詳細介紹,推薦大家閱讀。這里只做一個簡短總結
鏈下交易通道(off-chain payment channel)
該方案是在鏈下使用微支付通道網絡處理大部分交易。區(qū)塊鏈只作為清算層來處理一系列交易的最終清算,從而來減少底層區(qū)塊鏈的負擔。
這解決了我們前面討論的吞吐量問題,區(qū)塊鏈可處理交易的數(shù)量可提升一個量級。除此之外,由于交易都是在支付通道里處理的,無需等待區(qū)塊確認,因此交易速度問題也得到了解決,消除了時延。
Raiden Network 和 Lightning Network 都是微支付通道網絡的實例。
分片(Sharding)
分片的思想是把區(qū)塊鏈的整體狀態(tài)分割成不同的「片」,每部分狀態(tài)都由不同的節(jié)點存儲和處理。每個分片都只處理整體狀態(tài)的一小部分,因此可以做到并行處理。區(qū)塊鏈分片就像傳統(tǒng)數(shù)據(jù)庫的分片一樣,但還需額外考慮如何在去中心化的節(jié)點集合里維持安全性和合法性。
鏈下計算(off-chain computation)
這個方案和狀態(tài)通道很相似,但適用范圍更廣。其主要思想是以一種安全可證的方式,在鏈下處理一些在鏈上執(zhí)行代價很高的計算。把計算和證明處理移到鏈下的獨立協(xié)議里,可以提高交易吞吐量。一個實例是以太坊的 TrueBit。
DAG
DAG 是有向無環(huán)圖(Directed Acyclic Graph)的縮寫,這是一種有頂點和邊的圖結構。DAG 可以保證,從一個頂點出發(fā),沿著若干邊前進,最后不會回到原點。基于此我們可以給頂點進行拓撲排序。
DAG一些 DAG 協(xié)議,如 IOTA 的 Tangle,丟棄了全局的線性區(qū)塊概念,而是使用 DAG 數(shù)據(jù)結構來維持系統(tǒng)狀態(tài)。為了保證網絡安全,這些協(xié)議需要用某種新方法,使節(jié)點不再需要用線性方式處理每一筆交易。
另一種 DAG 協(xié)議 SPECTRE protocol,使用了區(qū)塊的 DAG 技術,可以并行挖礦,帶來更大的吞吐量和更快的交易確認時間。
DAG 技術還處在早期階段。老實說,它們也存在一些需要被解決的底層限制和缺陷。
對于擴展性解決方案,仍然推薦閱讀我先前寫的這篇文章。
2. 隱私保護的限制
區(qū)塊鏈上的交易并沒有直接關聯(lián)到你的身份,這看起來似乎是可以保護隱私的。每個人都可以匿名地生成錢包,并進行交易。
然而,事實遠沒有這么簡單。
區(qū)塊鏈技術的巨大前景之一是假名(pseudonymity)的使用:交易被記錄在公共賬本里,但是它們又與由數(shù)字和字母組成的地址保持關聯(lián)。因為無需將真實世界的身份信息關聯(lián)到地址上,交易的發(fā)起者似乎是不可能被追蹤的。
然而,這種想法是錯誤的。沒有將假名關聯(lián)到個人信息,這確實可以保護隱私。然而只要有人建立了鏈接,則隱私就不再是秘密。一個例子是執(zhí)法機構坦言他們在調查時,可以識別比特幣用戶,對他們進行反匿名(deanonymizing)。
這是怎么發(fā)生的呢?
商業(yè)網站的 Web Tracker 和 cookies 會輕易泄露與交易相關的信息。任何人,包括政府、執(zhí)法機構和惡意用戶都可以利用這些信息。
此外,區(qū)塊鏈平臺(如以太坊)的用戶與智能合約進行著復雜交互。智能合約的所有細節(jié),包括發(fā)送者和接受者、交易數(shù)據(jù)、執(zhí)行的代碼和合約內部存儲的狀態(tài),都是公開。
大部分公司都不會考慮把重要的商業(yè)數(shù)據(jù)上傳區(qū)塊鏈中,因為黑客、競爭者和其他非授權組織都可以輕易看到這些信息。思考一下:
- 電子醫(yī)療記錄是十分隱私和敏感的信息。
- 身份識別數(shù)據(jù)如身份證不能在智能合約上公開。
- 憑證管理如密碼和密鑰都不能放在公開和不安全的智能合約中。
- 金融文件如股權結構表或員工薪資都不能公開。
- 這樣的例子不勝枚舉
隱私保護對于個人、組織和企業(yè)來說,都是一個本質挑戰(zhàn)。許多人為區(qū)塊鏈和數(shù)字貨幣著迷,是因為這個去信任和抵抗審查的系統(tǒng)能帶來金融上的變革。矛盾的是,我們在使用的是一個公開且容易被追蹤的賬本。
隱私保護解決方案
下面是一些不同開發(fā)團隊正在努力實現(xiàn)的方案
Elliptic Curve Diffie-Hellman-Merkle (ECDHM) addresses
理解 ECDHM 地址之前,你需要理解 Diffie-Hellman 密鑰交換,它背后的思想在于雙方之間建立一個共享的秘密。在公開網絡里,這可以被用于交換秘密信息。
這是如何做到?
發(fā)送方和接收方共享 ECDHM 地址,然后通過共享的秘密將其轉化成比特幣地址。該比特幣地址只會被擁有該秘密的人知道。唯一公開的東西只有可重復使用的 ECDHM 地址。因此,用戶不用擔心交易會被追蹤。
Conceptual diagram that illustrates the general idea of the key exchange by using colors instead of very large numbers (Source: https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange)ECDHM 地址方案包括 Peter Todd 提出的 Stealth Addresses,Justus Ranvier 提出的 BIP47 Reusable Payment Codes 和 Justin Newton 提出的 BIP75 Out of Band Address Exchange。然而,沒有一個方案得到實際應用。
混合器(Mixer)
混合器的思想是把交易混到一個池里,收支平衡由池中的私有賬本來記錄。當池中的資金被花費后,原始交易就變得難以追蹤了。觀察區(qū)塊鏈的人可以看到池的支付金額和收款人,但是無法追蹤交易的發(fā)起人。混合器服務的一個例子是 CoinJoin。
Source: https://en.wikipedia.org/wiki/CoinJoin不幸的是,混合器不是一個可靠的解決方案。研究者可以確定 CoinJoin 里的交易,他們證明,攻擊者只要花費 $32,000,就能以 90% 的成功率識別交易。并且,研究者還證明混合器幾乎無法抵御女巫攻擊(Sybil attacks)和拒絕服務攻擊(Denial-of-Service attacks)。
另一個令人不安的地方是,需要通過一個相對中心化的實體來維護混合器的私有賬本,這意味著需要一個可信第三方來“混合”交易。
CoinJoin 不是默認交易方法,因此很少人參與到進混合池里,這導致匿名集合十分小。在人數(shù)少的集合里,可以很容易確認交易的來源。
另一種混合器方案是 CoinShuffle,這是德國薩爾布呂肯大學研究團隊設計的去中心化混合協(xié)議。CoinShuffle 嘗試解決 CoinJoin 里需要可信第三方來混合交易的問題。
門羅幣(Menoro)
不同于其他的山寨幣,門羅幣不是比特幣的分叉,而是基于另一種協(xié)議 CryptoNote。門羅幣的最大特色是環(huán)簽名(Ring Signature)方案。
環(huán)簽名是一種群簽名,群里的每個簽名者都擁有一對私公鑰對。不像傳統(tǒng)的加密簽名證明交易是單個簽名者用私鑰簽的,群簽名證明交易是群里的某個人簽名的,但不會暴露具體是誰簽的。
零知識證明(Zero-knowledge proofs)
零知識證明是指,在不揭露特定知識的情況下,證明者(prover)可以說服驗證者(verifier)他們知道該知識。換句話說,零知識的輸入是秘密的,證明者不會向驗證者揭露任何知識。零知識證明可以被用在隱私保護方案里。例子包括:
例子1:質詢/響應比賽
在計算機安全里,質詢-響應認證(challenge-response authentication)是指一類協(xié)議。在這類協(xié)議里,一方進行提問(“質詢“),另一方給出正確答案(”響應”)以獲得授權。在區(qū)塊鏈里,這個“比賽”能被用于驗證交易。如果某一交易是非法的,其他節(jié)點會注意到其非法性。這就需要提供可驗證的證明(verifiable proof),來證實交易是非法的。如果驗證失敗,則會產生一個“質詢”,要求交易的發(fā)起人生成一個“響應”,來證明交易是合法的。
這里有一個例子:假設只有 Bob 可以訪問某些資源(如他的車)。Alice 現(xiàn)在也想訪問它們(如開這輛車去雜貨店)。Bob 發(fā)起一個質詢,假設為“52w72y“。Alice 必須用一個字符串來響應 Bob 發(fā)起的質詢。使用一個只有 Bob 和 Alice 知道的算法,這是找到答案的唯一方式。此外,Bob 每次發(fā)起的質詢都會不一樣。知道先前正確的響應,并不能給 Alice 帶來任何的優(yōu)勢。
質詢/響應比賽已經被使用在區(qū)塊鏈,如以太坊里了。然而,還需要相應的函數(shù)庫和工具,來使這一類認證方案更容易被使用。
例子2:zkSNARKs
zkSNARKs 到底是什么?讓我們來逐步分解其定義:
- zk=zero-knowledge(零知識)。不需要信息本身的條件下,可以證明該信息存在。
- SNARK:Succinct Non-interactive Adaptive ARgument of Knowledge
- 簡潔(Succinct)表示證明簡潔,可以被快速驗證。
- 非交互(Non-interactive)表示驗證者不需要和證明者進行交互。取而代之,證明者會預先公開它的證明,而驗證者可以檢查它的正確性。
- 適應性知識論證(Adaptive argument of knowledge)表示某些計算的證明。
盡管我希望有一天可以寫一篇文章介紹 zkSNARKs,但這里我會跳過技術細節(jié)。zkSNARKs是一個的構建隱私保護的組件,它令人振奮且具有遠大前景,但有幾點需要注意
- SNARKs 是資源密集型的
- SNARKs 能讓用戶證明他們擁有訪問某個秘密的權限。但用戶有職責維護秘密,讓它在需要的時候能被訪問到。
- SNARKs 需要一個啟動階段,來準備需要證明的電路或運算。該階段由一組可信團體預先進行。這不僅意味著你需要信任進行該啟動階段的團體,還意味著不適合用 SNARKs 進行任意的運算,因為總需要一個準備階段。
例子3:zkSNARKs + Zcash
Zcash 是基于 zk-SNARKs,具有隱私保護特點的加密貨幣。在 Zcash 所謂的“私密交易(shielded transactions)”里,每一個被使用的幣都帶有一組匿名集合。私密交易使用“私密地址(shielded addresses)”,它要求發(fā)送方或接收方生成一個零知識證明,以在不泄露交易信息的情況下,允許其他人驗證交易。
Zcash transaction diagramZcash 無疑是一個值得關注的有趣項目。
例子4:zkSNARKs + Ethereum
在以太坊下一個要升級的協(xié)議 Metropolis 里,開發(fā)者將可以在鏈上高效地驗證 zk-SNARKs。
我們可以在支持 SNARKs 的以太坊里做什么呢?可以把某些合約變量被設為不可見。秘密信息可以與那些遵守使用 SNARKs 的合約規(guī)則的用戶存儲在一起,而不是直接存儲在鏈上。每一組用戶群自身都需要一個可信的啟動階段,這會增加一些用于準備階段的開銷。但一旦電路被設置好,它就可以被任意數(shù)量的交易使用。
在支持 SNARKs 的以太坊里,你無法把隱私與用戶分開,即做不到自治性隱私(autonomous privacy)。由于以太坊的 SNARKs 依賴用戶在鏈下維護密鑰,因此如果沒有這些用戶,就沒有地方可以找到這些秘密。
例子5:zkSTARKs
ZK-SNARKs 有一個更年輕更閃耀的同胞兄弟:ZK-STARKs,其中“T“表示”透明(transparent)“。ZK-STARKs 解決了 ZK-SNARKs 的一個主要缺陷:需要依賴一個可信的啟動階段。由于 ZK-STARKs 只依賴哈希和信息論,因此它更簡易;由于不再使用橢圓曲線和指數(shù)假設,面對量子計算機時它更加安全。
總而言之,盡管在上述的零知識證明隱私保護方案的前沿研究中,我們取得了驚人的進步,但仍然有許多工作需要去做。我們需要對零知識證明的函數(shù)庫進行實證研究和實踐檢測,使其成熟。我們需要在不同公鏈上對 zkSNARKs 和 zkSTARKs 進行實驗。在真實世界的場景里,Zcash 則需要在擴展性上給出令人滿意的使用案例。我們離這些仍有很長的路要走。
代碼混淆(Code Obfuscation)
另一種隱私保護機制是代碼混淆。該方案要找到一種方式來混淆程序 P,混淆器(obfuscator)會產生第二個程序 O(P)=Q,使得在給 P 和 Q 相同的輸入時,產生相同的輸出。但是 Q 不會揭露與 P 內部構造相關的任何信息。這使得我們可以在 Q 內部隱藏如密碼和身份證等的私密信息,但同時在程序里使用這些信息。
雖然研究者已經證明完全的黑盒混淆器是不可能實現(xiàn)的,但不可區(qū)分混淆器(indistinguishability obfuscation)是可以實現(xiàn)的,這是一種概念上弱化的混淆器。不可區(qū)分混淆器 O 的定義是,如果你使用兩個同等的程序 A 和 B(如把相同值輸入到 A 或 B 里去產生相同的輸入)計算得到 O(A)=P 和 O(B)=Q,則在無法進入程序 A 或 B 的情況下,則在計算上分辨 P 來自于 A 還是 B 是不可行的。
最近,研究者 Craig Gentry, Amit Sahai 等人完成了不可區(qū)分代碼混淆器。然而,該算法的計算開銷十分高昂。
如果開銷問題可以得到改善,則能帶來巨大的潛在好處。
舉個例子,假設以太坊的智能合約里有 Coinbase 的密碼。則我們可以寫出這樣一個程序:當智能合約滿足了特定條件后,合約通過中間節(jié)點初始化與 Coinbase 的 HTTPS 會話,使用密碼進行登錄,然后執(zhí)行交易。由于合約里的信息被混淆了,因此中間節(jié)點或區(qū)塊鏈的其他參與者都沒法修改發(fā)出的請求和獲取用戶密碼。
預言機(Oracle)
在區(qū)塊鏈世界里,預言機是指在智能合約和外部數(shù)據(jù)源之間傳遞消息的角色。它在鏈上智能合約和鏈下外部數(shù)據(jù)源之間充當數(shù)據(jù)的運輸者。因此,一種保護信息隱私性的方法是使用預言機從外部數(shù)據(jù)源中取出隱私數(shù)據(jù)。
可信任執(zhí)行環(huán)境(Trusted Execution Environments)
可信任執(zhí)行環(huán)境(TEE)是位于主處理器里的一個安全區(qū)域。在 TEE 里加載運行的代碼和數(shù)據(jù)會得到隱私性和完整性的保護。TEE 可以與面向用戶的操作系統(tǒng)并行運行,但比后者具有更好的隱私性和安全性。
Source: https://www.slideshare.net/JavierGonzlez49/operating-system-support-for-runtime-security-with-a-trusted-execution-environment-phd-thesis3. 缺乏合約的形式化驗證
智能合約的形式化驗證仍然是一個未解決的巨大問題。首先,讓我們通過“形式化證明(formal proof)”來理解“形式化驗證(formally verify)”的意思。在數(shù)學上,“形式化證明”是一種數(shù)學證明,計算機可以通過基本的數(shù)學公里和推理規(guī)則(inference rules)來證明它。
在程序方面,形式化驗證是一種判斷程序是否能按預期運行的方法。具體的規(guī)約語言可以來描述輸入和輸出之間的函數(shù)關系。也就是說,如果聲明了關于程序的一個不變式(invariant),則我們應該證明聲明的確實是不變式。
規(guī)范語言的一個例子是 Isabelle,它是一種通用證明輔助,可以在形式化語言里表達數(shù)學公式,還提供了工具在邏輯運算上來證明這些公式。另一種規(guī)范語言是 Coq,這是一種用來書寫數(shù)學定義、可執(zhí)行算法和定理的形式語言。
對于編碼在智能合約里的程序來說,為什么形式化驗證十分重要?
一個原因是智能合約是不可逆的,這意味著一旦將它們部署到主網絡里,你就無法升級或修改它們。因此在部署和使用智能合約之前,需要保證一切都不會出錯。而且,智能合約是可公開訪問的,存儲在智能合約里的內容對任何人可見;每個人都可以調用智能合約里的公開方法。這帶來了開放性和透明性,但也會吸引黑客攻擊智能合約。
無論你多么小心謹慎,寫出一個沒有 bug 和完全可信的智能合約都是十分困難的。此外,在以太坊上,由于 EVM 指令的設計方式,驗證 EVM 代碼也很困難。因此在以太坊上很難找到一種形式化驗證的解決方案。但無論如何,形式化驗證都是一種減少 bug 和攻擊的強有力手段。比起傳統(tǒng)方法(如代碼測試和同行審查),它在很大程度上可以保證正確性。我們急切地需要一種更好的解決方案。
4. 存儲限制
公有鏈上的大部分應用都需要解決存儲問題(如用戶身份、金融信息等)
然而,在公有鏈上存儲信息意味著數(shù)據(jù)
- 被網絡里的每一個全節(jié)點存儲著
- 被無限期存儲著,因為區(qū)塊鏈數(shù)據(jù)只增不減,且不可逆。
在去中心化網絡里,每一個全節(jié)點會存儲越來越多的數(shù)據(jù),因此數(shù)據(jù)存儲帶來了巨大的開銷。這將導致存儲變成區(qū)塊鏈應用的巨大瓶頸。
存儲解決方案
下面介紹一些項目,它們使用不同的策略將數(shù)據(jù)分割成分片(shard),并以去中心化的方法將其存儲在參與節(jié)點里。這些方法的基本前提是不讓每個節(jié)點都存儲所有數(shù)據(jù),而是將數(shù)據(jù)分散后,存儲在一個節(jié)點集合里。一些工程實例:
- Swarm:Swarm 是以太坊上的 p2p 文件分享協(xié)議。你能將程序代碼和數(shù)據(jù)存儲在主鏈之外的 swarm 節(jié)點里,這些節(jié)點與以太坊主鏈會保持連接。你可以在鏈上交換這些數(shù)據(jù)。
- Storj:文件和數(shù)據(jù)一開始會被分片和加密,然后被分散并存儲到多個節(jié)點里,每個節(jié)點只存儲數(shù)據(jù)的一小部分。這是一種“分布式存儲”。Storj 代幣(SCJX)被用來支付存儲和激勵存儲文件和數(shù)據(jù)的節(jié)點。
- IPFS:這是一種 p2p 超媒體(hypermedia)協(xié)議,它的特點是高吞吐量,基于內容尋址(content-addressed)的區(qū)塊存儲模型和超鏈接。本質上,它能以一種持久化和去中心化的方式存儲文件,同時還有歷史版本控制和減少相同文件副本的特點。
- Decent:Decent 是一個去中心化的內容分享平臺,允許用戶在沒有可信第三方時上傳和分享它們的作品(如視頻、音樂和電子書等)。存儲內容的節(jié)點會被獎勵手續(xù)費,用戶可以跳過中介,經濟實惠地接觸到這些內容。
- ... 還有更多
5. 難以證明的共識機制
區(qū)塊鏈具有”去信任(trustless)“的特點。用戶不需要信任任何人。無需信任帶來了自治、抵抗審查、真實性和無需授權等一系列引人注目的性質。
這種用來保證區(qū)塊鏈不易受攻擊者破壞的機制,被稱為“共識協(xié)議”。對于比特幣和其他區(qū)塊鏈來說,共識協(xié)議并不是一個新東西。在 1992 年,Dwork 和 Naor 就創(chuàng)建了第一個“工作量證明(proof-of-work)“系統(tǒng),用來在無需任何信任的情況下訪問資源。這個系統(tǒng)被用來解決垃圾郵件問題。Adam Back 后來在 1997 年創(chuàng)建了名為 Hashcash 的相似系統(tǒng)。 在 2003 年,Vishnumurthy 等人首次采用 proof-of-work 來保護貨幣,但其代幣不是作為通用貨幣來使用,而是用于維護點對點文件的交易系統(tǒng)。
5 年后,中本聰(Nakamoto)用 proof of work 機制發(fā)明了一種有價值的貨幣,即比特幣。這種底層共識協(xié)議使得比特幣成為第一個在全球使用的去中心化賬本。
工作量證明(proof-of-work)共識
PoW 機制的思想是讓問題變得難以解決,但驗證起來很容易。礦工需要使用算力來進行巨大開銷的計算,同時比特幣系統(tǒng)用比特幣和交易費來獎勵給出答案的礦工。礦工擁有的算力越多,則他們在共識上的“貢獻”越大。
PoW 共識使得比特幣成為第一個在全球使用的去中心化賬本。它無需可信第三方就能解決“雙花”問題。然而,PoW 不是完美的,仍然有許多人從事著研究和開發(fā),試圖去構建更可靠的共識算法。
PoW 存在什么問題呢?
1. 定制化硬件存在優(yōu)勢
PoW 的缺點是定制化硬件的使用。在 2013,一種名為專用集成電路(application-specific integrated circuits, ASICs)的設備被設計來專門挖比特幣。它可以將挖礦效率提高 10-50 倍。從那時起,用普通計算機的 CPU 和 GPU 來挖礦便變得無利可圖,使用 ASIC 設備變成了挖礦的唯一方法。在區(qū)塊鏈里,每個人都應該能為網絡的安全做貢獻,而 ASIC 的出現(xiàn)背離了“去中心化”的特點。
為了緩解這個問題,以太坊選用的 PoW 算法(Ethhash)是線性內存困難(sequentially memory-hard)的。該算法被設計成算出一個 nonce 值需要大量的內存和帶寬。即使是超高速計算機,也無法在需要大量的內存和帶寬的條件下同時計算出多個 nonce 值。這減少了中心化的風險,為節(jié)點創(chuàng)建一個公平競爭的環(huán)境。
當然,這不表示未來不會出現(xiàn)針對以太坊的 ASIC。定制化硬件對 PoW 算法仍然存在著巨大的威脅
2. 礦池中心化
用戶單獨挖礦時,收到區(qū)塊獎勵的機會是很小的。取而代之,他們都為礦池挖礦。礦池按比例給礦工持續(xù)的回報。礦池算力在網絡里占的權重大,大礦池所得回報的方差比單一礦工低得多。隨著時間推移,少數(shù)礦池將控制大部分網絡,而中心化的礦池控制的算力隨著時間又進一步增加。現(xiàn)在,前 5 個礦池擁有接近 70% 的全網算力,這很嚇人。
3. 浪費電力
礦工需要消耗大量電力來計算 PoW 問題。對于社會來說,這些計算是無價值的。根據(jù) Digiconomist’s Bitcoin Energy Consumption Index 所示,當前比特幣每年消耗的電力約為 29.05TWh,占全球消耗電力的 0.13%,超過了 159 個獨立國家。
隨著使用 PoW 共識的公有鏈規(guī)模的擴大,浪費的電力會越來越多。不可持續(xù)的電力浪費和 PoW 計算開銷,將不利于將公有鏈規(guī)模擴大到百萬級的用戶和交易。
共識的解決方案
有意義的 PoW
一種解決電力浪費問題的方法是用 PoW 函數(shù)來解決某些有意義的問題。比如,讓礦工用計算資源去解決困難的 AI 算法,而不是解決隨機的 SHA256 問題。
Proof-of-stake
另一種解決挖礦中心化的問題是完全拋棄挖礦,在共識里引入另一種機制來每個節(jié)點的貢獻。這就是 PoS 要做的事。
不像礦工使用算力,這里使用”權益(stake)“。如 Vitalik 所說,將“一單位算力一張票(one unit of CPU power, one vote)“變成“一塊錢一張票(one currency unit, one vote)“。
PoS 消除了對硬件的需求,因此不再有硬件中心化的問題。而且,礦工再也不用消耗大量電力來解決 PoW 問題,PoS 本質上更節(jié)能。
然而,天下沒有免費的午餐。PoS 算法也有自身的挑戰(zhàn),它們包括
1. Nothing-at-Stake Problem:在 PoS 共識下,如果存在分叉(無論是因為意外或攻擊),則節(jié)點最好的策略會是同時“挖”每條鏈。節(jié)點不需要消耗計算資源,只需要使用自己的錢來投票。這意味著無論哪條鏈勝出,礦工都會得到獎勵。
2. Long-range attacks:在 PoW 的鏈里,如果礦工想分叉,它需要在主鏈最新區(qū)塊的前幾個區(qū)塊開始挖。礦工往回得越多,就越難追上主鏈,這需要超過網絡一半的算力才能做到。然而,在 PoS 里,由于挖礦所需的東西只是權益,即錢,礦工可以從成千上萬個塊之前開始分叉。礦工可以輕易生成成千上萬的區(qū)塊,而用戶很難發(fā)現(xiàn)哪一條鏈才是“正確”的鏈。
3. Cartel formation:在由經濟激勵治理的去中心化系統(tǒng)里,一個真實存在的風險是共同合作(coordinated efforts)和寡頭的出現(xiàn)。就如以太坊研究者 Vlad Zamfir 所說,“數(shù)字貨幣都很集中,挖礦的算力也是這樣。在”真實世界“的市場中,寡頭競爭是常態(tài)。比起大量相對貧窮的驗證者,少數(shù)相對富有的驗證者之間的合作十分容易。卡特爾(Cartel)的出現(xiàn)是完全可以預期到的。”
為了可以有效地替代 PoW,我們需要一種算法來解決 nothing-at-stake 問題和 long-range attake 問題,同時不引入新的共謀風險。
一些團隊,如 Tendermint 和以太坊,在解決這個問題上已經取得了許多進展。Tendermint 是通過設計 PoS 共識引擎將傳統(tǒng)的 BFT 算法應用到區(qū)塊鏈里。然而,Tendermint 也有自身的缺陷。統(tǒng)一,以太坊也在 PoS 的實現(xiàn)上取得了很大的進展,但是在網絡里仍沒有運行。
不像 PoW,PoS 未經檢驗且難以理解。為了理解各類設計里的不同權衡,需要進一步的研究和實驗。正因如此,我們應該在前人的工作之上共同合作,研究出一個更有效、更快和更安全的共識系統(tǒng)。
6. 缺乏治理和標準
在去中心化的公有鏈,毫無疑問,不存在一個做決策的中央集權和組織來做決策。在另一方面,每個人都是管理者——這是一個完全去信任、開源且無需授權的系統(tǒng)——然而在另一方面,又沒有一個能夠安全升級協(xié)議的方法,也沒有人負責維護協(xié)議標準。
在保持區(qū)塊鏈技術的去中心化的同時,我們需要一個由區(qū)塊鏈生態(tài)里開發(fā)者和其他成員組成的組織,來對新標準、特性和升級達成共識。如何在沒有中心化組織(如以太坊基金會)的帶領下實現(xiàn)這個目標,仍然是個未知數(shù)。
例如,以太坊當前的特定標準和特性只由一兩個開發(fā)者來指導和決策。盡管這個模式可行,但仍存有缺陷。其中之一是不夠效率——如果領頭開發(fā)者太忙,或幾天幾周內忘記回應,則標準的推進就會陷入停滯,不管這個標準對其他參與構建區(qū)塊鏈的人來說是多么重要。在沒有明確領導下制定標準,將帶來混亂,很難快速即使地對問題達成共識。在社區(qū)越大時,這種情況越嚴重。
另一種方法是完全開放和去中心化區(qū)塊鏈。然而,這會使得自治十分低效,將帶來長久的危害。
我們需要一種更好的方法。
Tezos 試圖通過鏈上治理(on-chain governance)讓區(qū)塊鏈擁有升級協(xié)議的能力,但這仍是構想,還未被實現(xiàn),也未被證明合理。
總之,治理區(qū)塊鏈是一個棘手的問題。在治理控制權的集中和分布之間做好權衡,這是維持發(fā)展的關鍵所在。
7. 缺乏開發(fā)工具
制造充足的開發(fā)工具,這實際上是開發(fā)者的職責,尤其是對于想高效完成工作的開發(fā)者來說。
在當前區(qū)塊鏈生態(tài)系統(tǒng)里,開發(fā)工具顯然無法讓人滿意。即使是經驗豐富的開發(fā)者,在區(qū)塊鏈之上開發(fā)功能性協(xié)議或去中心化應用也是一項艱巨的任務。
我從一個 Solidity 和區(qū)塊鏈開發(fā)人員的角度,列舉了一些生態(tài)里缺乏的工具
- 能夠檢查代碼錯誤,且集成開發(fā)智能合約和區(qū)塊鏈分析所需插件的 IDE。
- 有完整文檔,且容易使用的構建工具和編譯器。
- 持續(xù)更新的 API 和框架技術文檔。
- 測試框架。以太坊里有一些可用的測試框架,如 Truffle,但我們急需能提供更多選項和實驗的測試框架。我看到過許多智能合約未經過測試,卻存著數(shù)以萬計的美元。在任何情況下,缺乏測試都不是一個可以令人接受的選擇,尤其是與大額資金相關時。舉例來說,BAT 的代幣銷售合約里就沒有測試套件,但它卻在 24 秒內募集了 3600 萬美元。任何理性的人都明白,如果合約可以移動那么多錢,那它很可能會遭受攻擊。
- 調試工具。調試 Solidity 代碼就像在黑暗隧道里蒙著眼睛尋找金子。在開發(fā)網站時,我可以使用調試器一行一行單步調試代碼。但是 Solidity 開發(fā)環(huán)境里沒有類似的工具,這令人沮喪。我們急需一種可以隔離和診斷問題的易用工具。
- 日志工具。與上述相同。
8. 量子計算機的威脅
量子計算機是密碼學和加密貨幣的潛在威脅之一。
盡管目前量子計算機只能解決特定類型的問題,但這種情況不會一直持續(xù)。現(xiàn)實是十分殘酷的:只要量子計算機足夠成熟,大部分流行的公鑰加密算法都會被有效地攻破。
在設計區(qū)塊鏈和底層的加密算法時,考慮怎么使它擁有抗量子的特性是一件十分重要的事。
抗量子解決方案
我不是這個領域的專家。在我有限的認知里,后量子算法的研究有六個不同的方向: Lattice-based cryptography, Multivariate cryptography, Hash-based cryptography, Code-based cryptography, Supersingular elliptic curve isogeny cryptography, 和 Symmetric key quantum resistance systems(如 AES 和 SNOW 3G)。
不管最終方案是什么,探尋一種抗量子的密碼解決方案都是我們首要關注的重點。
其他挑戰(zhàn)
- 我們需要一種跨鏈通信的解決方案,使得我們能在不同鏈(如比特幣、以太坊和萊特幣等)之間無縫進行通信和轉賬。
- 我們需要打造一套更好的密鑰管理系統(tǒng),使得應用程序可以基于之上運行。
- 我們需要更高效的簽名方案和密碼系統(tǒng),使得它們可以在低運算資源的設備上運行,同時又保證安全性。
- ...還有更多
總結
ICO 吸引了太多的注意力和資金。與此同時,一些全身心投入解決上述問題的研究者和開發(fā)人員卻得不到足夠的支持。這不是一件好事。
更令人遺憾的是,許多人,包括一些領域內有影響力的開發(fā)人員和領袖在內,都因為某些利益而選擇忽略這些問題。
在接下來一年里,我的目標會
- 持續(xù)關注這些問題
- 投入時間去思考解決方案
- 鼓勵其他研究者和開發(fā)者做同樣的工作
不管當前的投資環(huán)境是否存在泡沫,我都是區(qū)塊鏈堅定的信仰者。作為開發(fā)者,我們有義務投入精力去解決這些問題,將區(qū)塊鏈帶向主流人群。同時我們也需要投資者,來發(fā)現(xiàn)和支持這些工作。
https://zhuanlan.zhihu.com/p/32264334
總結
- 上一篇: Paxos算法小结
- 下一篇: Algorand 共识算法 BA* 入门