區(qū)塊鏈幾大技術(shù)上的障礙使得它還不能成為當(dāng)今主流的應(yīng)用。
1. 有限的可擴(kuò)展性
公有鏈共識協(xié)議達(dá)到了去中心化的目的,但是網(wǎng)絡(luò)中的每個(gè)全節(jié)點(diǎn)必須處理每個(gè)交易,直接導(dǎo)致了以下兩種過后,使之很難產(chǎn)生落地應(yīng)用:
低吞吐量:區(qū)塊鏈只能處理有限的交易數(shù)量
緩慢的交易處理時(shí)間:交易形成區(qū)塊的時(shí)間緩慢。例如:比特幣形成一個(gè)區(qū)塊的時(shí)間是10分鐘,以太坊形成一個(gè)區(qū)塊的時(shí)間是14秒左右。在高峰期的時(shí)候,可能這些區(qū)塊形成的時(shí)間更長。
擴(kuò)展性方案?
線下支付通道
微支付網(wǎng)絡(luò)通道是把大部分的交易放到鏈下。它本質(zhì)上是一種區(qū)塊鏈交互機(jī)制,使原本在鏈上的交互轉(zhuǎn)為鏈下。區(qū)塊鏈只是用作結(jié)算層來處理一系列交易的總和——最終交易。
這解決了我們上面討論的吞吐量的問題和交易速度的問題。
區(qū)塊鏈生態(tài)系統(tǒng)中微支付通道網(wǎng)絡(luò)的例子包括雷電網(wǎng)絡(luò)和閃電網(wǎng)絡(luò)。
分片
分片背后的概念是區(qū)塊鏈整體的狀態(tài)被分成不同的“片”,分區(qū)并行處理。
鏈下計(jì)算
除了范圍比較大一點(diǎn),鏈下計(jì)算和狀態(tài)通道是類似的。它想法就是在鏈下執(zhí)行計(jì)算(而不僅僅是鏈下代幣的轉(zhuǎn)移),如果在鏈上進(jìn)行,并且安全可驗(yàn)證的話,代價(jià)是非常昂貴的。將計(jì)算和驗(yàn)證過程轉(zhuǎn)移到鏈下單獨(dú)的協(xié)議中,就能達(dá)到交易的高吞吐量。以太坊鏈下計(jì)算的一個(gè)例子就是?TrueBit。
DAGs(有向無環(huán)圖)
DAG,有向無環(huán)圖的縮寫,是一個(gè)圖形數(shù)據(jù)結(jié)構(gòu),由頂點(diǎn)和邊組成。(頂點(diǎn)是圖中的點(diǎn),邊是圖中一個(gè)點(diǎn)到另一個(gè)點(diǎn)的路徑。)DAG保證了沒有環(huán),即不可能從一個(gè)點(diǎn)開始沿著一系列的邊在回到這個(gè)點(diǎn)。這使得我們能夠沿著拓?fù)漤樞颢@得一個(gè)節(jié)點(diǎn)(或頂點(diǎn))序列。
-DAG-
以DAG為基礎(chǔ)的協(xié)議(例如IOTA的Tangle)的前提,是將全局線性區(qū)塊鏈排在一起,用DAG數(shù)據(jù)結(jié)構(gòu)來維護(hù)系統(tǒng)的狀態(tài)。 為了維護(hù)網(wǎng)絡(luò)安全,這些協(xié)議依賴于他們自己的新方法,不要求每個(gè)節(jié)點(diǎn)都以線性方式處理每個(gè)交易。
另一種基于DAG的方法,例如SPECTER協(xié)議,用有向無環(huán)圖(DAG)組織區(qū)塊,并行挖DAG塊,以實(shí)現(xiàn)更高的吞吐量和更快的交易處理時(shí)間。?
我希望能夠在將來的帖子中寫下更多的基于DAG的方法。 現(xiàn)實(shí)情況是,這些協(xié)議還處于非常初級的階段,尚未得到大規(guī)模的實(shí)施和使用。 坦率地說,他們有一些根本性的限制/弱點(diǎn)尚未解決,還不能被認(rèn)為是可行的可擴(kuò)展的方案。
2. 有限的隱私?
鑒于區(qū)塊鏈交易不直接與您的身份掛鉤,它們可能顯得更私密。 世界上任何人都可以匿名創(chuàng)建一個(gè)新的錢包,并用它進(jìn)行交易。
但是,這沒有那么簡單。
一方面,這項(xiàng)技術(shù)的巨大潛力確實(shí)是可以使用化名:雖然交易在公共賬本中記錄和存儲,但是它們與一個(gè)僅由數(shù)字和字母組成的賬戶地址相關(guān)聯(lián)。 由于這個(gè)地址沒有真實(shí)世界的身份,交易的創(chuàng)建人似乎是無法跟蹤的。
然而,這種整體安全的表象是誤導(dǎo)性的。 只要化名不與個(gè)人連接在一起,一個(gè)人就可以一直保護(hù)自己的隱私,但只要有人連接起來,這個(gè)秘密就暴露了。 一個(gè)例子是,當(dāng)執(zhí)法機(jī)構(gòu)承認(rèn)他們能夠在調(diào)查過程中識別特定的比特幣用戶時(shí),于是,對他們進(jìn)行”去匿名化”,違背了區(qū)塊鏈所有交易不可見的總體前提。
這是怎么做到的呢?
商家網(wǎng)站上的網(wǎng)絡(luò)跟蹤器和cooky使得交易信非常容易的息泄漏到網(wǎng)上,任何人(包括政府,執(zhí)法機(jī)構(gòu)和惡意用戶)都可以隨意利用這些信息。
此外,像以太坊這樣的區(qū)塊鏈平臺,用戶是與智能合約進(jìn)行交互,而智能合約處理的不僅僅是簡單的價(jià)值轉(zhuǎn)移。 關(guān)于這些智能合約的所有細(xì)節(jié)在以太坊區(qū)塊鏈上都是公開的,包括交易發(fā)起方和接收方,交易數(shù)據(jù)本身,執(zhí)行的代碼以及合約中存儲的狀態(tài)。
將關(guān)鍵業(yè)務(wù)數(shù)據(jù)上傳到黑客、競爭對手或其他未授權(quán)方都可以查看的區(qū)塊鏈中,對與大多數(shù)公司來說不是一種選擇。 考慮一下情況:
電子病歷,這是非常私人和敏感的信息。 在公有鏈上公開顯示這些信息是令人不可接受的,這樣會侵犯病人的隱私。
身份驗(yàn)證數(shù)據(jù)(如社保號碼)不能公開存儲在公共智能合約中。
憑證管理(如密碼和密鑰)是不可能存放在開放的、本質(zhì)上不安全的智能合約中的。
財(cái)務(wù)文件,如電子股權(quán)結(jié)構(gòu)表或員工工資等不得公開與易于追溯的地址聯(lián)系。
不勝枚舉
對于關(guān)注隱私和主權(quán)的個(gè)人、組織和行業(yè)來說,隱私仍然是一個(gè)根本的障礙。我們這些人中許多癡迷于區(qū)塊鏈和加密貨幣的,對建立一個(gè)無需信任的、抗審查的、能為個(gè)人提供財(cái)務(wù)支持的系統(tǒng),有著共同的興趣。 相反的是,我們正在使用一個(gè)公開的,易于追蹤的賬本來做這個(gè)系統(tǒng)。
隱私的解決方案
以下是不同開發(fā)團(tuán)隊(duì)一直在致力解決的幾個(gè)方案。
橢圓曲線迪菲-赫爾曼-默克爾(ECDHM)地址
要了解 ECDHM 地址,你要先了解迪菲-赫爾曼密鑰交換(Diffie-Hellman Key Exchange)。迪菲-赫爾曼密鑰交換背后的思想是建立雙方之間的共享秘鑰。它可以用來在公共網(wǎng)絡(luò)上進(jìn)行私下的信息交換。
這是怎么做到的?
發(fā)起方和接收方可以公開共享 ECDHM 地址,然后可以用他們的共享密鑰獲取匿名比特幣地址。這些比特幣地址只能由擁有這個(gè)密鑰的人發(fā)布。 唯一公開可見的是可重用的ECDHM 地址。因此,用戶不必?fù)?dān)心被跟蹤的交易。?
-用顏色(而不是非常大的數(shù)字)說明的密鑰交換概念圖(圖片來源:?https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange)-
使用ECDHM地址方案的一些例子包括 Peter Todd 的?Stealth Addresses,Justus Ranvier 的?BIP47?可重復(fù)使用支付代碼,Justin Newton 的BIP75帶外地址交換等等。 但是,這些方案的實(shí)施和實(shí)際使用是很少的。
Mixers(交易混合器)
Mixers 背后的思想是,一群人可以將他們得到的付款合并進(jìn)一個(gè)池,并在一個(gè)私有賬本上保持債務(wù)的跟蹤。然后,當(dāng)池中的資金被花費(fèi)時(shí),每筆付款資金的來源都會被掩蓋。任何一個(gè)查看區(qū)塊鏈的人都可以看到支付金額以及接收方,但理論上,無法追蹤被特別授權(quán)的人。Mixers 服務(wù)的一個(gè)例子是?CoinJoin。
-圖片來源:?https://en.wikipedia.org/wiki/CoinJoin?-
不幸的是,Mixers 已被證明是不可靠的方案。例如,研究人員能夠輕松識別CoinJoin交易:只花32,000美元,就能讓一個(gè)攻擊者以90%的成功率將交易去匿名化。此外,研究人員還證明了 Mixers 對 Sybil 攻擊(編者注:即“女巫攻擊‘)和拒絕服務(wù)攻擊的抵抗力不足。
更令人不安的是,據(jù)稱,Mixers 的私有賬本需要由一些中央機(jī)構(gòu)進(jìn)行管理,這意味著它需要一個(gè)受信的第三方來“混合”交易。
由于 CoinJoin 是用戶可選而不是默認(rèn)的解決方案,因此歷史上很少有人參與這些類型的混合池,這使得匿名集合非常小。 因此,這就很容易確定一個(gè)特定的輸出是否為那幾個(gè)人之一。
混合方案的另一個(gè)例子是?CoinShuffle,這是一個(gè)由德國薩爾大學(xué)的研究人員開發(fā)的分布式混合協(xié)議。CoinShuffle 試圖通過去掉受信的第三方來收集混合交易,從而改進(jìn) CoinJoin。?
Monero
解決隱私問題的另一種方法是創(chuàng)建默認(rèn)私有的加密貨幣,如Monero。與許多其他幣種不同,Monero不是比特幣的分叉。相反,Monero基于另一種協(xié)議,CryptoNote。
?Monero提供的主要功能是另一種“環(huán)形簽名”方案。
環(huán)簽名是一種組簽名,組中的每個(gè)簽名者都有一對私鑰和公鑰。與傳統(tǒng)的加密簽名不同,傳統(tǒng)的加密簽名是指一個(gè)交易是由一個(gè)簽名者的私鑰“批準(zhǔn)”驗(yàn)證的,環(huán)簽名是指簽名者集合的一個(gè)成員驗(yàn)證批準(zhǔn)了一個(gè)交易,而不會暴露是誰簽署的交易。
零知識證明
零知識證明是證明者在不向驗(yàn)證者提供任何信息的情況下,使得驗(yàn)證者相信他們擁有一些秘密知識。換句話說,一個(gè)程序可以有秘密的輸入,證明者不會向驗(yàn)證者揭示任何東西。零知識證明提供了可用于構(gòu)建隱私保護(hù)機(jī)制的基礎(chǔ)。 例子包括:
示例1:質(zhì)詢/響應(yīng)規(guī)則
在計(jì)算機(jī)安全中,質(zhì)詢——響應(yīng)認(rèn)證是一個(gè)協(xié)議族,其中一方提出問題(“質(zhì)疑”),另一方必須提供一個(gè)有效的答案(“回應(yīng)”)以便認(rèn)證。這個(gè)“規(guī)則”可以在區(qū)塊鏈上用作交易驗(yàn)證。如果一個(gè)交易是無效的,另一個(gè)節(jié)點(diǎn)可以選擇“引起注意(call attention)”來證明交易無效。這就要求提供可驗(yàn)證的證據(jù),來證明交易是無效的。如果驗(yàn)證失敗,就會產(chǎn)生一個(gè)“質(zhì)疑”,要求交易的發(fā)起者產(chǎn)生一個(gè)證明交易有效的“回應(yīng)”。
讓我們來看一個(gè)例子:Bob有獨(dú)自訪問一些資源的權(quán)限(例如他的車)。Alice現(xiàn)在也想使用該資源,想開著它去雜貨店。Bob發(fā)出了一個(gè)質(zhì)疑,假設(shè)是“52w72y”。Alice必須回應(yīng)一個(gè)符合Bob發(fā)出的質(zhì)疑的字符串。找到答案的唯一方法,是使用只有Bob和Alice知道的算法。而且,Bob每次都會發(fā)出不同的質(zhì)疑。因此,知道以前的正確答案并不會給Alice帶來任何幫助。
質(zhì)詢/響應(yīng)規(guī)則已經(jīng)在像以太坊這樣的區(qū)塊鏈中使用。但是,我們需要庫和工具來使這些類型的認(rèn)證方案更容易使用。
示例2:zkSNARK
什么是zkSNARKs? 我們來分析定義:
zk =零知識。不需要知道信息而能證明信息存在。
SNARK:SuccinctNon-interactiveAdaptiveARgument ofKnowledge的縮寫。
“簡潔(Succinct)”是指可以快速驗(yàn)證的簡潔證明。信息較短,便于驗(yàn)證。
“無交互(Non-interactive)”意味著不要求驗(yàn)證者與證明者進(jìn)行交互。相反,證明者可以提前發(fā)布證據(jù),驗(yàn)證者可以驗(yàn)證它是否正確。
“適應(yīng)性的知識論(Adaptive Argument of Knowledge)”意味著一些計(jì)算的知識證明。
盡管有一天我希望能夠在帖子中詳細(xì)介紹zkSNARK,但是這次我會跳過zkSNARK的技術(shù)細(xì)節(jié)。zkSNARKs是一個(gè)令人興奮的、有前途的隱私建設(shè)塊,有幾點(diǎn)注意事項(xiàng):
SNARKs是資源密集型的。
SNARKs允許用戶證明他們擁有一個(gè)秘鑰的訪問權(quán)限,但是他們有責(zé)任維護(hù)秘鑰,并在需要時(shí)使它能夠被訪問。
SNARKs有一個(gè)啟動階段,在這個(gè)階段你想要證明的電路或者計(jì)算是固定了。這個(gè)階段需要事先在一組私下信任人的集合中進(jìn)行。這不僅要求你信任這組準(zhǔn)備這個(gè)啟動階段的人員,還意味著SNARK不適合運(yùn)行任意計(jì)算,因?yàn)樗偸切枰粋€(gè)準(zhǔn)備階段。
示例3:zkSNARKs + Zcash
Zcash是基于zk-SNARKs的隱私保護(hù)加密貨幣。Zcash擁有所謂的“匿名交易”,即所有使用的幣都有一個(gè)匿名集合。匿名交易使用“匿名地址”,要求發(fā)送者或接收者生成一個(gè)零知識證據(jù),在交易信息不被泄露的情況下允許其他人驗(yàn)證交易的加密數(shù)據(jù)。
-Zcash交易圖-
Zcash絕對是一個(gè)值得關(guān)注的有趣項(xiàng)目。
示例4:zkSNARKs +以太坊
在以太坊的下一個(gè)協(xié)議升級中,Metropolis,開發(fā)者將有能力高效的驗(yàn)證鏈上的zk-SNARKs。
在支持 SNARKs 的以太坊我們能做什么?某些合約變量可以被有效地私有化。它可以和那些遵守支持 SNARKs 的合約規(guī)則的用戶存儲在一起,而不是直接在鏈上存儲秘鑰。這些用戶每一個(gè)都需要自己的信任設(shè)置,這就會增加一些準(zhǔn)備工作。但是,需計(jì)算的電路一旦存在,它就可以根據(jù)需要被盡可能多的交易使用。
然而,支持 SNARKs 的以太坊上無法實(shí)現(xiàn)的是獨(dú)立于用戶的自治性隱私。由于以太坊上的 SNARKs 依靠用戶維護(hù)鏈下的秘鑰,所以如果沒有這個(gè)用戶,就無法追蹤這個(gè)秘鑰。
示例5:zkSTARKs
ZK-SNARKs擁有一個(gè)更新、更閃亮的兄弟:ZK-STARK,“T”代表“透明”。ZK-STARK解決了Zk-SNARKs的主要弱點(diǎn)之一:對于可信啟動的依賴。它們也更簡單,因?yàn)樗鼈兗兇庖蕾囉诠I⒘泻托畔⒄?,并且能更好抵御量子?jì)算機(jī)的攻擊,因?yàn)樗鼈儾皇褂脵E圓曲線或指數(shù)假設(shè)。
總的來說,盡管我們通過上面提到的基于零知識證明的方法,在隱私方面取得了令人驚嘆的進(jìn)展,但是仍然有很多工作要做。零知識證明庫需要進(jìn)行大量的研究與實(shí)戰(zhàn)考驗(yàn),才能成熟。zkSNARKs 和 zkSTARKs 需要在各種公有鏈上進(jìn)行實(shí)驗(yàn)。Zcash需要在真實(shí)世界的場景中大規(guī)模地證明用例。我們離做到這些還有很遠(yuǎn)。
代碼混淆(Code Obfuscation)
另一個(gè)隱私機(jī)制是代碼混淆。目標(biāo)是找到一種混淆程序P的方法,使得混淆器可以產(chǎn)生二代程序 O(P)=Q , 對于混淆程序 P 和 Q ,如果給定相同的輸入,返回相同的輸出,但Q 不會顯示任何關(guān)于 P 的內(nèi)部結(jié)構(gòu)。這使得我們可以隱藏Q中的私有數(shù)據(jù),如密碼、社保號碼等,但仍然可以在程序中使用它。
雖然研究人員聲稱,完全黑盒混淆是不可能的,但有一個(gè)模糊的概念:不可分辨性混淆,研究人員認(rèn)為它是可能的。不可分辨性混淆器O的定義是,如果你取兩個(gè)等價(jià)的程序 A 和 B(即給A、B相同的輸入產(chǎn)生相同的輸出)并且計(jì)算出O(A)= P和O(B)= Q,那么對于沒有權(quán)限訪問 A 或 B 的人來說,找出 P 是來自 A 還是 B,沒有計(jì)算上可行的方法。
最近,研究人員Craig Gentry,Amit Sahai等人成功實(shí)現(xiàn)了不可分變性混淆的代碼。但是,該算法計(jì)算開銷很高。
如果這個(gè)算法可以改進(jìn),那么潛在的好處是巨大的。在加密貨幣世界中,最有趣的可能性是包含私有信息的鏈上合約的想法。
例如,我們可以想象一個(gè)以太坊合約把用戶的密碼包含到 Coinbase 中。然后,我們可以編寫一個(gè)程序:如果合約中的某些條件得到滿足,合約將通過一些中間節(jié)點(diǎn)與Coinbase 發(fā)起 HTTPS 會話,也就是使用用戶的密碼登錄并進(jìn)行交易。由于合約中的信息將被混淆,那么任何中間節(jié)點(diǎn)或區(qū)塊鏈中的其他玩家,將無法改變正在傳播的請求或確定用戶的密碼。
預(yù)言機(jī)(Oracles)
在區(qū)塊鏈領(lǐng)域中,預(yù)言機(jī)是一個(gè)在智能合約和外部數(shù)據(jù)源之間傳遞信息的一方。它本質(zhì)上充當(dāng)鏈上智能合約與鏈外數(shù)據(jù)源之間的數(shù)據(jù)載體。因此,保持信息“私有”的一種方法就是使用預(yù)言機(jī)從外部數(shù)據(jù)源獲取隱私信息。
可信執(zhí)行環(huán)境
可信執(zhí)行環(huán)境(TEE,Trusted Execution Environment)是主處理器的安全區(qū)。它保證內(nèi)部加載的代碼和數(shù)據(jù)在保密性和完整性方面得到保護(hù)。這種可信賴的環(huán)境與面向用戶的操作系統(tǒng)并行運(yùn)行,但傾向于比面向用戶的操作系統(tǒng)更加私密和安全。
3. 缺乏形式化合約驗(yàn)證
智能合約的正式驗(yàn)證仍然是一個(gè)巨大且懸而未決的問題。首先,讓我們通過理解什么是“形式證明”來理解“正式驗(yàn)證”對一個(gè)合約的意義。數(shù)學(xué)中的“形式證明”意味著一個(gè)已經(jīng)被計(jì)算機(jī)用數(shù)學(xué)的基本公理和原始推理規(guī)則檢驗(yàn)過的數(shù)學(xué)證明。
更廣泛地說,與軟件程序相關(guān)的形式驗(yàn)證是確定程序是否按照規(guī)范行事的方法。一般來說,這是用一個(gè)具體的規(guī)范語言來完成的,這個(gè)語言用來描述函數(shù)的輸入和輸出應(yīng)該如何相關(guān)。 換句話說,我們首先聲明一個(gè)關(guān)于該程序的不變性,然后我們有義務(wù)證明這個(gè)不變性。
一個(gè)規(guī)范語言的例子是?Isabelle?,它是一個(gè)通用的定理證明輔助工具,支持形式化數(shù)學(xué)公式,并提供證明工具完成對數(shù)學(xué)公式的邏輯演算。另一種規(guī)范語言是?Coq?,它是編寫數(shù)學(xué)定義、可執(zhí)行算法和定理的形式化語言。?
那么,為什么對編碼到智能合約中的程序進(jìn)行形式化驗(yàn)證很重要?
?首先,智能合約是不可改變的,這意味著一旦將它們部署到以太坊主網(wǎng)絡(luò)后,就對他們不能再更新或修改。所以這意味著,在真實(shí)世界的應(yīng)用程序中部署并使用這些合約之前,我們需要把事情做好。而且,智能合約是可以公開訪問的,任何存儲在智能合約中的東西都是開放的,任何人都可以調(diào)用智能合約的公有方法。雖然這提供了開放性和透明度,但它也使得智能合約成為對黑客極具吸引力的攻擊目標(biāo)。
事實(shí)上,無論你采取多少預(yù)防措施,編寫可信且無bug的智能合約都很困難。而且,以以太坊為例,由于EVM指令的設(shè)計(jì)方式,驗(yàn)證EVM代碼非常困難。這使得為以太坊建立形式化驗(yàn)證解決方案變得更加困難。無論如何,形式化驗(yàn)證是減少bug和攻擊風(fēng)險(xiǎn)的強(qiáng)有效的方法。與傳統(tǒng)方法相比(例如測試,同行評審等),它們提供了更高的正確性保證,并且我們迫切地需要更好的解決方案。
形式化驗(yàn)證解決方案
我希望我有更多可公開的解決方案在本節(jié)炫耀,但不幸的是并不多。我發(fā)現(xiàn)一個(gè)非常早期的例子是由以太坊基金會的形式化驗(yàn)證工程師Yoichi Hirai完成的。他能夠獲得智能合約的形式化驗(yàn)證產(chǎn)生早期結(jié)果,其中包括一個(gè)很小的“行為契約”合約。雖然很小,但這是我在定理證明環(huán)境中看到的第一個(gè)被分析過的“真實(shí)的”合約(合同)。
就像 Yoichi 本人說的......
“驗(yàn)證結(jié)果還不夠完善。我仍然發(fā)現(xiàn)驗(yàn)證合約階段比驗(yàn)證初始階段有更多的問題。EVM(以太坊虛擬機(jī))編程不針對其他人進(jìn)行測試!我已經(jīng)公開這個(gè)項(xiàng)目了,因?yàn)檫@個(gè)項(xiàng)目是使用機(jī)器輔助邏輯推理,來驗(yàn)證智能合約所需的工作量(和細(xì)節(jié)水平)的一個(gè)很好的例子。在這個(gè)時(shí)候,如果我要實(shí)現(xiàn)一個(gè)包含價(jià)值超過10萬美元的智能合約,并且如果我負(fù)責(zé)這個(gè)計(jì)劃,我會考慮這種方案(另一個(gè)選擇是先嘗試較價(jià)值較小的合同)”。
還有一些其他的團(tuán)隊(duì),比如 Tezos 完全放棄使用 Solidity 語言與 EVM,而是建立自己的智能合約編程語言和虛擬機(jī),來完成形式化驗(yàn)證。
無論正確的方法是什么,無論是徹底改革 EVM 使其更容易進(jìn)行形式化驗(yàn)證,或建立一個(gè)本質(zhì)上更容易驗(yàn)證的全新語言,我們都需要做更多的工作。我們需要更多的研究人員和開發(fā)人員來研究形式化驗(yàn)證。我們需要在每種可能的編程語言中實(shí)現(xiàn)形式化驗(yàn)證庫和標(biāo)準(zhǔn)。
4. 存儲的約束
構(gòu)建在公有鏈上的大多數(shù)應(yīng)用程序都需要某種存儲解決方案。(用戶身份,財(cái)務(wù)信息等)。
然而,將信息存儲在公有鏈數(shù)據(jù)庫中意味著數(shù)據(jù):
由網(wǎng)絡(luò)中的每個(gè)全節(jié)點(diǎn)存儲。
由于區(qū)塊鏈數(shù)據(jù)庫僅可添加和不可更改,所以數(shù)據(jù)被無限期地存儲。
因此,數(shù)據(jù)存儲為分布式網(wǎng)絡(luò)增加了巨大的成本,每個(gè)全節(jié)點(diǎn)得無限期的存儲越來越多的數(shù)據(jù)。從而,對于任何構(gòu)建在區(qū)塊鏈上的現(xiàn)實(shí)應(yīng)用,存儲都是一個(gè)巨大的障礙。
存儲方案
早期的幾個(gè)項(xiàng)目使用的策略是將數(shù)據(jù)拆分成片,然后根據(jù)參與的節(jié)點(diǎn)以分布式的方式存儲數(shù)據(jù)(即分布式存儲)。這里的基本前提是,不是每個(gè)節(jié)點(diǎn)都存儲所有的數(shù)據(jù),而是一組節(jié)點(diǎn)將數(shù)據(jù)分離或“分配”。像這樣的項(xiàng)目的幾個(gè)例子包括:
蜂群協(xié)議(Swarm):蜂群協(xié)議是 Ethereum 點(diǎn)對點(diǎn)文件共享協(xié)議,允許用戶將應(yīng)用程序代碼和數(shù)據(jù)存儲在主鏈下連接到以太坊區(qū)塊鏈的 swarm 節(jié)點(diǎn)中。用戶接下來就可以在區(qū)塊鏈上交換這些數(shù)據(jù)。
Storj:一種數(shù)據(jù)分片的解決方案:首先對文件和數(shù)據(jù)進(jìn)行分片、加密,然后分發(fā)到多個(gè)節(jié)點(diǎn),從而使每個(gè)節(jié)點(diǎn)只存儲一小部分?jǐn)?shù)據(jù)。因此 Storj 也是“分布式數(shù)據(jù)存儲”。然后 Storj 幣(SCJX)就被用來支付存儲操作,并且作為存儲部分用戶文件或數(shù)據(jù)的節(jié)點(diǎn)的激勵(lì)。
IPFS:一種可選的 p2p 超媒體協(xié)議,以內(nèi)容尋址超鏈接為基礎(chǔ)的、提供高吞吐量、內(nèi)容尋址的塊存儲模型。從本質(zhì)上講,它允許文件以永久和分布式的方式存儲,同時(shí)提供歷史版本的文件從而刪除重復(fù)文件。
Decent:Decent是一個(gè)分布式的內(nèi)容共享平臺,允許用戶上傳和數(shù)字貨幣化分享他們的工作成果(視頻,音樂,電子書等),而不依賴于集中化的第三方來分享。用戶可以通過跳過這些中間媒介,以更經(jīng)濟(jì)的方式訪問媒體內(nèi)容,而承載數(shù)字媒體內(nèi)容的節(jié)點(diǎn)將獲得獎(jiǎng)勵(lì)。
......還有更多。
5. 不可持續(xù)的共識機(jī)制
區(qū)塊鏈?zhǔn)恰叭バ湃位摹薄S脩粼谶M(jìn)行交易時(shí)沒必要相信其他任何人,因此這能帶給用戶有吸引力的特性,如自主性、抗審查性、真實(shí)性和無許可創(chuàng)新等。
能夠?qū)崿F(xiàn)去信任化區(qū)塊鏈又不易受攻擊的機(jī)制被稱為“共識協(xié)議”。共識協(xié)議對比特幣等區(qū)塊鏈來說都不陌生。例如,1992年,Dwork 和 Naor 就是首批創(chuàng)建出“工作量證明”系統(tǒng)的人。在“工作量證明”系統(tǒng)中,在不需要依靠信任的情況下,就能為獲得資源所付出的計(jì)算力生成加密證明。該系統(tǒng)過去被用于抵制垃圾郵件。在1997年,Adam Back創(chuàng)建了一個(gè)叫作?Hashcash?的相似系統(tǒng)。之后在2003年,Vishnumurthy 人首次使用工作量證明來保護(hù)貨幣,在這個(gè)項(xiàng)目中,代幣沒有被用作通用貨幣,而是被用來維護(hù)端到端的文件交易系統(tǒng)。
5年后,中本聰橫空出世,他將工作量證明用作保護(hù)價(jià)值貨幣——比特幣——的機(jī)制。這種潛在的共識機(jī)制讓比特幣成為了第一個(gè)被廣泛采用的全球分布式交易賬本。
工作量證明共識
工作量證明是一種解題機(jī)制,題雖難解,但易于驗(yàn)證。礦工使用他們的計(jì)算力完成需消耗大量計(jì)算力的計(jì)算。對于提供解法的礦工,比特幣系統(tǒng)會獎(jiǎng)勵(lì)他們新的比特幣和交易費(fèi)。礦工擁有的計(jì)算力越多,他們對于共識的決定權(quán)所占的“權(quán)重”就越大。
工作量證明共識允許比特幣成為分布式數(shù)字貨幣的第一個(gè)真正被廣泛采用的分布式數(shù)字貨幣形式。它無需通過任何可信的第三方就解決了“雙重支付問題”。然而,工作量證明并非完美無缺,仍需通過大量研究和發(fā)展來構(gòu)建一個(gè)更可行的共識機(jī)制。
工作量證明存在哪些問題?
1. 專業(yè)化硬件優(yōu)勢帶來的問題
工作量證明的一個(gè)缺點(diǎn)在于使用專業(yè)化硬件。在2013,人們專為挖掘比特幣設(shè)計(jì)出了被稱為“應(yīng)用型專用集成電路(ASICs)”的設(shè)備,能夠提高10至50倍的效率。從那時(shí)起,使用普通計(jì)算機(jī)的CPU和GPU 挖礦已經(jīng)完全無利可圖了。挖礦的唯一方法是通過自己制造ASICs,或是向ASICs制造商購買。這偏離了區(qū)塊鏈的“分布式”特性。在區(qū)塊鏈中,所有人都應(yīng)該有機(jī)會促進(jìn)網(wǎng)絡(luò)的安全性。
為了緩解這一問題,以太坊選擇使它的工作量證明算法(Ethhash)變得memory-hard。這意味著該算法是經(jīng)過設(shè)計(jì)的,使得Nounce 需要大量內(nèi)存和帶寬。面對大量的內(nèi)存需求和較高的帶寬需求,即使是運(yùn)行速度超快的計(jì)算機(jī)也難以同時(shí)發(fā)現(xiàn)多個(gè)Nounce。這就降低了中心化的風(fēng)險(xiǎn),為正在進(jìn)行驗(yàn)證的節(jié)點(diǎn)創(chuàng)造了更公平的環(huán)境。
當(dāng)然,這并不是說未來也不會有專為以太坊設(shè)計(jì)的ASIC。專門化硬件對工作量算法來說仍是一個(gè)巨大的風(fēng)險(xiǎn)。
2. 礦池中心化
礦池的理念是不再讓每位客戶各自挖礦,只有很低的概率能獲得區(qū)塊獎(jiǎng)勵(lì),而是讓他們?yōu)榱说V池而挖礦,之后礦池會持續(xù)支付給他們適當(dāng)?shù)膱?bào)酬。有一個(gè)問題是,因?yàn)榈V池在網(wǎng)絡(luò)中的“權(quán)重”較高,大型礦池的收益變化少于單個(gè)用戶。隨著時(shí)間的推移,一些礦池開始控制大部分網(wǎng)絡(luò),集中型的礦池組則繼續(xù)獲得更多計(jì)算力。例如,前五大礦池現(xiàn)有的hashrate占據(jù)了總量的近70%。這可以說是相當(dāng)可怕了。
3. 能源浪費(fèi)
礦工花費(fèi)大量的計(jì)算力來進(jìn)行計(jì)算,從而解決工作量證明算法,然而可惜的是,所有這些計(jì)算工作對社會毫無價(jià)值。根據(jù)數(shù)字經(jīng)濟(jì)學(xué)家的比特幣能源消耗指數(shù)來看,比特幣目前的年度電力消耗量預(yù)計(jì)達(dá)29.05太瓦時(shí),占據(jù)了全球電力總消耗量的0.13%。說得直觀一點(diǎn)就是,比特幣挖礦目前使(lang)用(fei)的電力超出了159個(gè)國家所使用的電力。
隨著比特幣等使用工作量證明共識的公共區(qū)塊鏈繼續(xù)擴(kuò)張,越來越多的能源會被浪費(fèi)。如果公共區(qū)塊鏈的目標(biāo)是擴(kuò)展至數(shù)百萬的用戶和交易,由工作量證明造成的不可持續(xù)的能源浪費(fèi)和計(jì)算成本不利于該目標(biāo)的實(shí)現(xiàn)。
共識解決方案
有用的工作量證明
該能源浪費(fèi)問題的一個(gè)解決方案是讓工作量證明函數(shù)解決有用的問題。例如,想象這樣一個(gè)場景,礦工花費(fèi)他們的計(jì)算力求解很難的人工智能算法,而不是工作量證明需要解決的一個(gè)隨機(jī)的SHA256問題。
權(quán)益證明
解決挖礦中心化問題的一個(gè)方法是徹底取消挖礦,轉(zhuǎn)而采用其它機(jī)制來計(jì)算共識中每個(gè)節(jié)點(diǎn)的權(quán)重。這就是權(quán)益證明的目標(biāo)。
”在權(quán)益證明機(jī)制下,礦工花費(fèi)的是“權(quán)益”(即金錢),而非算力。正如Vitalik所言,不再是“每單位CPU算力為一票”,而是“每單位貨幣為一票。”
權(quán)益證明消除了硬件需求,因此無需擔(dān)心上述所討論的硬件中心化問題。而且,由于礦工不需要花費(fèi)大量能源來通過計(jì)算求解工作量證明算法,權(quán)益證明從本質(zhì)上來說更加節(jié)能。
然而,天下沒有白吃的午餐,使用任何技術(shù)都需代價(jià)。權(quán)益證明算法也有其根本挑戰(zhàn)。具體來說,這些挑戰(zhàn)包括:
無利害關(guān)系問題:有了權(quán)益證明,當(dāng)區(qū)塊鏈中出現(xiàn)分叉之時(shí),無論是該分叉是偶然的還是惡意的,對于任何正在驗(yàn)證交易的節(jié)點(diǎn)來說,最佳策略是在每條鏈上進(jìn)行”挖礦”。由于他們沒有花費(fèi)物質(zhì)上的算力,只用美元進(jìn)行投票。這意味著在權(quán)益證明機(jī)制下,不管哪條鏈贏了,礦工都會得到獎(jiǎng)勵(lì)(也就是說“無利害關(guān)系”防止他們在每條鏈上挖礦)。
遠(yuǎn)程攻擊(Long-range attack,也譯作“長程攻擊”):如果使用工作量證明的區(qū)塊鏈上出現(xiàn)了分叉,礦工將在當(dāng)前主鏈區(qū)塊頭后面的幾個(gè)區(qū)塊之處開始制造分叉鏈。礦工距離分叉鏈越遠(yuǎn),分叉鏈就越難趕上主鏈,因?yàn)檫@需要一半以上網(wǎng)絡(luò)的算力。但是,如果使用了權(quán)益證明,礦工可以在上千或上百萬個(gè)區(qū)塊之后制造分叉鏈,因?yàn)檫@需要的只是權(quán)益,即金錢。這意味著礦工輕易就能將數(shù)百萬個(gè)區(qū)塊添加到新鏈上,讓用戶難以辨別出哪條是正確的區(qū)塊鏈。
卡特爾的形成: 在一個(gè)以經(jīng)濟(jì)激勵(lì)為主導(dǎo)的分布式系統(tǒng)里,真正的風(fēng)險(xiǎn)在于聯(lián)合和寡頭的形成。以太坊研究員Vlad Zamfir指出:“加密貨幣是非常集中的。挖礦力也是如此。許多‘現(xiàn)實(shí)世界的'市場都以寡頭競爭為準(zhǔn)則。少數(shù)幾個(gè)較富有的驗(yàn)證者之間形成聯(lián)合要比大量較貧窮的驗(yàn)證者之間形成聯(lián)合容易得多。在區(qū)塊鏈領(lǐng)域,卡特爾的形成是完全可預(yù)期的。”
為了能使權(quán)益證明之類的新型共識機(jī)制代替工作量證明,我們需要一個(gè)既能解決無利害關(guān)系問題和遠(yuǎn)程攻擊問題又不會帶來新的聯(lián)合風(fēng)險(xiǎn)的算法。
Tendermint?和以太坊等團(tuán)隊(duì)在解決上述問題方面已經(jīng)取得了很大的進(jìn)展。Tendermint 是第一個(gè)通過為區(qū)塊鏈構(gòu)建可行的權(quán)益證明共識引擎而將傳統(tǒng)的拜占庭容錯(cuò)研究引入?yún)^(qū)塊鏈的。然而,Tendermint 也存在缺陷(詳見另一篇文章)。同樣地,以太坊在權(quán)益證明的執(zhí)行上也取得了長足的進(jìn)步,不過事實(shí)是如今在活躍的網(wǎng)絡(luò)上沒有任何東西在大規(guī)模運(yùn)行。
與工作量證明不同,權(quán)益證明還未被現(xiàn)實(shí)驗(yàn)證,而且知道的人也很少。要了解各類設(shè)計(jì)的不同利弊需要進(jìn)一步的研究和試驗(yàn)。同樣地,非常需要在這些早期成果的基礎(chǔ)上共同創(chuàng)造一個(gè)高效、快速又安全的共識系統(tǒng)。
6. 缺少治理和標(biāo)準(zhǔn)
顯然,公共的分布式區(qū)塊鏈?zhǔn)遣灰揽恐行臋C(jī)構(gòu)或組織進(jìn)行決策的。一方面,這可以實(shí)現(xiàn)我們的共同夢想——構(gòu)建一個(gè)完全不需要信任和許可的開發(fā)系統(tǒng),另一方面卻又缺少安全的協(xié)議升級途徑,也沒有人負(fù)責(zé)制定并維護(hù)標(biāo)準(zhǔn)。
雖然我們確實(shí)想要盡量維持區(qū)塊鏈技術(shù)發(fā)展的分布式特點(diǎn),我們?nèi)匀恍枰谶@個(gè)生態(tài)系統(tǒng)內(nèi)的開發(fā)者等人員之間建立起某個(gè)組織,在新的標(biāo)準(zhǔn)、特性和升級方面達(dá)成共識。如何能在完全沒有中心化組織(如以太坊基金會)的情況下實(shí)現(xiàn)這點(diǎn)尚未明確。
例如,以太坊的現(xiàn)狀向來是由一至兩個(gè)開發(fā)人員主要負(fù)責(zé)制定具體標(biāo)準(zhǔn)或特性。該模式目前雖然有效,但是存在缺陷。一方面,它的效率不高——如果負(fù)責(zé)制定標(biāo)準(zhǔn)的開發(fā)人員過于忙碌,或是在幾天或幾周之內(nèi)忘了回復(fù),不管該標(biāo)準(zhǔn)對于所有構(gòu)建公共區(qū)塊鏈的人來說是多么重要,制定標(biāo)準(zhǔn)的進(jìn)程就會停滯。在沒有明確領(lǐng)導(dǎo)力的情況下制定標(biāo)準(zhǔn)會造成一片混亂,也不可能在緊要問題上迅速達(dá)成共識,尤其是在社區(qū)日益擴(kuò)大的情況下。
另一個(gè)方法是讓以太坊變成徹底的開放式和分布式系統(tǒng)。然而,這種方法已經(jīng)被證明是無效的,造成了數(shù)年的失敗。
需要找到一個(gè)更好的方法。
Tezos 是公共區(qū)塊鏈的一則實(shí)例。它旨在通過使用鏈上治理實(shí)現(xiàn)協(xié)議內(nèi)部升級的能力,不過這仍然停留在概念階段,未經(jīng)踐行或證明。
總的來說,區(qū)塊鏈治理是一個(gè)非常棘手的問題,找到中心化和分布式管控之間的平衡將是步入正軌的關(guān)鍵。
7. 工具不足
工具充足對開發(fā)人員的工作來說至關(guān)重要,尤其是在開發(fā)人員想要有效且高效工作的情況下。糟糕的工具會造成可怕的后果。
當(dāng)前區(qū)塊鏈生態(tài)系統(tǒng)使用的開發(fā)人員工具顯然是不能接受的。在區(qū)塊鏈上開發(fā)功能協(xié)議或分布式應(yīng)用是一項(xiàng)艱巨的任務(wù),即使對于如今經(jīng)驗(yàn)最豐富的開發(fā)人員來說也是如此。
作為Solidity和區(qū)塊鏈開發(fā)者,我個(gè)人發(fā)現(xiàn)了工具生態(tài)系統(tǒng)的幾點(diǎn)缺失:
一個(gè)有良好的linter工具及一切必要插件的IDE,能夠?qū)崿F(xiàn)有效的合約發(fā)展和區(qū)塊鏈分析
一個(gè)有詳細(xì)文檔記錄又便于使用的構(gòu)建工具和編譯器
一個(gè)不難用的部署工具
實(shí)際存在或是對各種API和構(gòu)架來說尚未完全過時(shí)的技術(shù)文件
還說得過去的測試框架。一些像Truffle之類的以太坊工具尚能湊合,不過就測試框架方面而言極其需要更多的選擇和試驗(yàn)。我已經(jīng)看到太多未經(jīng)測試的智能合約了,涉及金額高達(dá)數(shù)百萬美元。在任何情況下都不能缺少測試,更何況涉及金額如此巨大。例如,BAT代幣銷售智能合同雖然沒有測試包,卻在24秒之內(nèi)就籌集到了3600萬美元。但凡有理智的人都知道,能募集到如此巨大金額的智能合約肯定會遭受攻擊。
調(diào)試工具。唉,調(diào)試Solidity代碼就像蒙著眼罩在漆黑的隧道里搜尋金礦。在我之前從事的工作中,我負(fù)責(zé)的是網(wǎng)站開發(fā),能夠使用調(diào)試器單步調(diào)試一行行代碼,真的是救命稻草。在開發(fā)Solidity之時(shí),沒有這樣的工具,甚至連類似的工具都沒有的話,那就太令人失望了,結(jié)果只會徒勞無功。我們非常需要能夠?qū)⒏綦x和診斷問題變得更容易的工具。
日志記錄工具。同上。
安全審計(jì)。這是一個(gè)大問題。我只聽說過Open Zepplin 這一個(gè)知名的以太坊安全審計(jì)服務(wù)。雖然他們的審計(jì)服務(wù)對于這個(gè)生態(tài)系統(tǒng)做出了很大的貢獻(xiàn),但是對于這樣一個(gè)使用智能合約募集數(shù)十億美元的行業(yè)來說,只有這一家提供安全審計(jì)服務(wù)的初創(chuàng)公司是不夠的。各公司和工程師需要開創(chuàng)更高級的工具和服務(wù),此外必須要有更多安全專家對智能合約進(jìn)行徹底的審核。 只在兩次?Parity?攻擊和?DAO?攻擊等被黑事件發(fā)生后,人們才對智能合約的安全性有了較高的關(guān)注。當(dāng)然,這責(zé)任被歸咎在了編寫這些智能合約的開發(fā)人員,甚至是以太坊的核心團(tuán)隊(duì)身上。我認(rèn)為這是不公平的。不知道如何對自己的代碼進(jìn)行安全審計(jì)并不應(yīng)該是開發(fā)人員的責(zé)任。這就好比說讓Stephen Curry 給自己計(jì)分一樣。這是行不通的。我們很需要安全工程師和研究人員的幫助和專業(yè)知識。我們需要投資者拿出實(shí)際行動來,資助那些致力于提高智能合約和區(qū)塊鏈安全性的工作。
區(qū)塊探測器和分析器。以太坊使用的區(qū)塊探測器名為Etherscan。比特幣使用的區(qū)塊探測器有Blockchain.info,Blockexplorer和?Blockcypher等。這些都是整個(gè)社區(qū)付出的巨大努力。實(shí)際上,我大量使用 Etherscan。但是在對區(qū)塊鏈進(jìn)行認(rèn)真分析方面,它還遠(yuǎn)遠(yuǎn)不夠。公共區(qū)塊鏈有很多有趣的數(shù)據(jù)可供我們進(jìn)行分析,這也是我們應(yīng)該做的。
8. 量子計(jì)算威脅
對于加密貨幣和密碼學(xué)的潛在威脅之一是量子計(jì)算機(jī)問題。
雖然如今的量子計(jì)算機(jī)能解決的問題類型依然有限,但未來不會一成不變。一個(gè)可怕的真相是,大多數(shù)流行的公鑰算法可以被足夠大的量子計(jì)算機(jī)有效破解。
重要的是,當(dāng)我們設(shè)計(jì)并構(gòu)建區(qū)塊鏈及其密碼基礎(chǔ)之時(shí),我們需要考慮如何讓這些性能實(shí)現(xiàn)量子防御。
量子防御解決方案
盡管我不是這方面的專家,但是跟據(jù)我非常有限的了解,后量子密碼研究目前重點(diǎn)采用以下6種方法:基于Lattice的密碼學(xué)、多變量密碼學(xué)、基于哈希函數(shù)的密碼學(xué)、基于代碼的密碼學(xué)、超奇異橢圓曲線同源密碼學(xué)以及 AES 和 SNOW 3G 等對稱密鑰量子防御系統(tǒng)。
不管最終采用何種方案,構(gòu)建量子防御的密碼學(xué)解決方案是首要考慮之事。
注:原文來自以太坊愛好者,本文根據(jù)自己理解壓縮,壓縮不了的內(nèi)容,或者原文太經(jīng)典,或者我還未完全吸收。