神譯局是36氪旗下編譯團隊,關注科技、商業、職場、生活等領域,重點介紹國外的新技術、新觀點、新風向。
編者按:Facebook最近發布Libra白皮書是最近幣圈最火的事件了。Libra是什麼?它是如何工作的?它的核心實現機制如何?它能不能真正實現大家的夢想?這個東西的前景如何?區塊鏈布道者Jameson Lopp在Medium上對此進行了詳細解密,原文標題是:How Will Facebook’s Libra 「Blockchain」 Really Work?。
那份技術文檔有26頁,裡面描述了用來作為Facebook的Libra幣平臺的協議,我仔細研究了一下。裡面的作者一共有53位之多!以下就是這份文檔的拆解:
Libra協議讓來自各方的一系列副本(又稱為驗證者,validator)共同維護一個可編程資源的資料庫。
這裡沒有任何的裝腔作勢——系統將以自上而下的方式為一系列機構所控制。但是,要注意的是裡面說資料庫是「可編程資源」的資料庫,而不僅僅是數字貨幣的資料庫。
這些資源由不同的用戶帳號所擁有,通過公鑰加密驗證,服從這些資源開發者規定的定製規則。
類似「資源」這樣的一般用語的使用讓我懷疑其用途遠不止穩定幣而已。
交易基於預定義的,以及在未來版本中用戶定義的智能合約,用一種新的程式語言來進行,名字叫做Move。我們用Move來定義區塊鏈的核心機制,比如貨幣和驗證器資格。
好吧,這開始有點有趣了。定製化的智能合約語言會帶來很多問題,比如語言的功能豐富程度如何?系統相對敵對合約的健壯性如何?關於開發者友好性方面,以及Libra將如何保護智能合約開發者避免搬起石頭砸自己的腳等方面也會有問題。
這些核心機制促進了一種獨特的治理機制的建立,這種機制建立在穩定性和早期原有機構信譽的基礎上,但是會慢慢過渡到一個完全開放的體系裡面。
似乎Libra Association會成為一個聯邦,可在投票系統及某種預先存在的信譽的幫助下演變。
關於開發者友好性方面,以及Libra將如何保護智能合約開發者避免搬起石頭砸自己的腳等方面也會有問題。
這個生態體系將會提供一種新的全球貨幣——Libra幣——這種貨幣會得到一籃子銀行存款以及來自高質量央行的國債的全面支持。
Libra是一種通用加密資產協議,而第一種資產將會是穩定幣。
隨著時間的推移,會員資格將轉為完全開放,並且僅基於會員所持有的Libra。
聽起來跟權益證明極其相像。顯然,其計劃是在5年後開放會員,希望屆時他們已經解決好權益證明了——不過我預計他們會遇到以太坊一樣的問題。
協會已經發布了報告,概要描述了朝著無需許可系統過渡的路線圖。
我相當肯定,分布式網絡從許可過渡到無需許可這將是第一次。也許這個網絡整體看切換到權益證明,但為了維護穩定幣錨定/籃子,部分實體需要向傳統金融體系保持開放。這會是通過Libra Association集中控制的一個持續點。
驗證者輪流推動接受交易的進程。當一位驗證者充當領導時,它會處理交易,包括客戶端直接提交給它的交易以及通過其他驗證者間接提交給其他驗證者的交易。所有驗證者均執行交易,並形成一個驗證數據結構,裡面會包含有新的帳本歷史。作為共識協議的一部分,驗證者投票選出這一數據結構的認證者。
聽起來像是實用拜佔庭容錯,這是個為人熟知的已有20年歷史的算法,儘管他們可能已經做出了一些調整。在白皮書的第五部分我們了解到它叫做LibraBFT,這是HotStuff共識協議的派生。
作為以版本i提交交易Ti的一部分,共識協議會在版本i處在該資料庫的完整狀態(含整個歷史)下輸出籤名來驗證對客戶端查詢的響應。
這一點值得注意,主要是因為這意味著新的驗證者應該能夠加入網絡,並且迅速同步不需要重放區塊鏈的整個歷史,而是假設他們信任現有的驗證者。
這種帳戶模型行得通是因為Facebook不大可能關心隱私,儘管它似乎的確對智能合約感興趣。
Libra協議使用基於帳戶的數據模型來對帳本狀態進行編碼。
就數據結構的角度而言,相對於比特幣,Libra跟以太幣或Ripple更像。UTXO模型有利有弊——比方說,由於以輸出為基礎的歷史的簡單性,它的隱私性更好和交易歷史更健壯——但是使用複雜的智能合約可能會更難。因此,帳戶模型行得通是因為Facebook不太可能關注隱私,即便該平臺似乎確實對智能合約感興趣。
Libra協議並未將帳戶與真實世界中的身份進行關聯。用戶可以通過生成多個密鑰對來自由地建立多個帳戶。由同一用戶控制的帳戶彼此之間沒有內在聯繫。這一方案效仿的是比特幣和以太坊的,因為它為用戶提供了假名。
這似乎好得令人驚訝,但我在想對於Libra幣這個資產來說情況是否也是如此。這個系統對於那些想要開發更注重隱私保護應用的開發者究竟有多開放呢?觀察看看將會非常有趣。
每種資源都有一個由模塊聲明的類型。資源類型屬於象徵性類型,定義包括類型名稱、聲明此資源的模塊名稱及地址。
似乎可以生成地址,且只要每個資產有唯一名稱,任意數量的資產均可指向該地址。
執行交易T i會產生新的帳本狀態S i以及執行狀態代碼、能耗情況與事件清單。
好吧,現在我們知道系統如何免受資源耗盡攻擊了,大概是利用了類似以太坊的能耗系統。
帳本歷史裡面沒有交易區塊的概念。
有趣。Libra協議裡面並沒有真正的區塊鏈數據結構 ——區塊更多是一種虛擬/邏輯構造,是驗證者用來協調系統狀態的已確認快照的。回想一下,本章的第一句話意義顯得更重要了:
Libra區塊鏈的所有數據均存儲在一個單一版本化的資料庫中。版本號是無符號型64位整數,與系統執行的交易數對應。
我所熟知的每種加密資產網絡在高級層面的工作機制都是一樣的:會有一個系統狀態,然後執行一筆交易(其實就是個狀態轉換函數),然後就有了一個新的系統狀態。
把一批交易放入容器,或者叫區塊的目的是為了對其進行排序以及加時間戳 。這對於無需許可的網絡來說非常重要。在這種網絡裡面,數據是通過動態成員多方籤名來進行身份驗證的,驗證者可以自由加入和離開網絡。由於Libra跑的是有許可系統,所以可以使用更高效的共識算法,而不需要批量處理交易,因為交易歷史重寫的可能性要低很多。
在Libra協議的最初版本裡面,用戶只能使用Move功能的有限子集。雖然Move用於定義核心的系統概念,比如Libra幣等,但用戶無法發布聲明自己資源類型的自定義模塊。根據實現核心系統組件的經驗可知,這種做法可讓Move語言和工具鏈在對用戶開放之前就走向成熟。這種做法還可以將通用智能合約平臺所面臨的、內在的交易執行和數據存儲的伸縮性挑戰延後。
似乎跟前面提到的「開放驗證者成員資格」計劃非常相似。Facebook好像還沒有解決以太坊多年來一直在努力解決的任何大規模問題。
為了管理對計算能力的需求,Libra協議會收取交易費用,以Libra幣計價。
Libra幣其實上是該協議的原生單位,就像ETH是以太坊的原生單位一樣。這導致了另一個問題,這個問題跟Libra的匿名屬性有關:沒有AML/KYC的情況下你可以獲得Libra幣嗎?如果不能,則似乎你無法在匿名情況下使用任何的系統功能。根據Calibra錢包方面的讀物來看,它是需要AML/KYC的。所以不知道它是否能逐步演進成一個不嚴格受控的系統。
系統在設計上只要容量足夠會讓正常運行期間的費用較低。
這種說法很含糊,會引發很多疑問:什麼叫低費用?什麼是正常運行?多少是足夠的容量?
包括礦工費(gas fee)扣除在內,區塊鏈核心邏輯的很多部分都是用Move來定義的。為了避免循環,VM在這些核心組件的執行期間禁用了gas的計量。
這聽起來相當危險,但文檔作者指出,核心組件必須以防禦性方式編寫來防止DoS攻擊。
Move的關鍵特性是可自定義資源類型...... Move的類型系統為資源提供了特殊的安全保障。資源永遠無法複製,只能遷移。這些保證由Move VM靜態強制執行。這使得我們可以將用Move語言的資源類型來表示Libra幣。
這個回答了較早前Libra幣是不是ETH或BTC這樣的原生資產的問題。我希望這些數字貨幣只是系統推出時允許的默認或者唯一的資源類型,其他資源晚點再推出。
相對於更高級的源語言,Move基於堆棧的字節碼指令更少。此外,每條指令都有簡單的語義,可通過甚至更少量的原子步驟來表示。這減少了Libra協議的規範足跡,令發現規範的實現錯誤更容易。
似乎他們已經進行了周翔的考慮;希望這意味著其腳本語言的安全性審查要比以太坊做得更好。
我們認為「Libra區塊鏈」其實不是區塊鏈
Libra協議用一顆Merkle樹為帳本歷史提供經驗證的數據結構......具體來說,帳本歷史用Merkle樹累加器法來形成Merkle樹,這同時也提供了有效的添加操作。
再次地,我們看到所謂的「Libra區塊鏈」 其實並不是區塊鏈。這個協議似乎設計得非常好, 但當帳本歷史的數據結構是一組經過籤名的帳本狀態時,他們仍然稱之為區塊鏈,這一點真的很奇怪 。驗證者為每個帳本狀態做出承諾,並且所有歷史帳本狀態也都在Merkle樹中得到承諾,但我還沒有真正看到形成一條鏈條的任何反向數據鍊表,更不用說區塊鏈了。
帳號的驗證者是該序列化表示的哈希
請注意,這種表示需要在對帳戶進行任何修改後對整個帳戶的驗證者進行重新計算。該操作的代價為O(n),其中n表示完整帳戶用字節表示的長度。
嗯,如果對給定帳戶的數據存儲量沒有限制的話,這似乎給DoS攻擊打開了方便之門。
我們預計,隨著系統的使用,最終與帳戶相關的存儲增長可能會成為一個問題。正如gas鼓勵負責任地使用計算資源一樣,我們預期存儲可能也需要一種類似租金式的機制。我們正在評估各種最適合本生態系統的基於租金的機制。
另一個未能得到解決的問題。我已經等不及想看到「租金太TM高了!」的表情包了。
投票權必須在創世期間以及創世之後的一段時間內依然保持誠實,以便客戶端同步到新配置上。離線時間超過該時間段的客戶端需要用某些外部信息源(source of truth)重新同步,以獲取其信任的檢查點。
哎喲喲。現在還不清楚這個「時間段」有多長,但如果一個創世不到一天,那我猜具體的「時間段」也不到一天。看起來該共識協議還沒有健壯到參與者可以隨意按照自己的意願離開和重新加入網絡的地步。
LibraBFT假設一組 3f + 1 選票在一組可能是誠實的驗證者(拜佔庭人)之間進行分配。當拜佔庭驗證者控制的選票最多為 f 票時,LibraBFT仍然是安全的,能防止雙花(double spends)和分叉等攻擊。
跟PBFT十分相似,這種共識算法可容忍1/3的驗證者不誠實。 HotStuff修改似乎挺合理:
通過讓驗證者對一個區塊的狀態而不僅僅是交易序列進行籤名來拒絕不確定性漏洞。
一個發出明確超時信號的 pacemaker,驗證者靠達到法定人數進入下一輪——這應該可以提高活躍度。
不可預測的的領導選舉機制來限制對領導者的DoS攻擊
聚合籤名保留籤署仲裁認證的身份驗證者以便對區塊的接受進行投票。
Libra 協議的每一個驗證者均維護該系統完整的成員關係視圖,並且直接連接到需要進行通信的任何驗證者。不能直接連接的驗證者被認為屬於系統可容忍的拜佔庭故障配額範圍之內。
這會需要大量工作才能讓系統擴充到幾百驗證者以上。
Libra 區塊鏈的安全性依賴於驗證者、Move 程序以及 Move VM 的正確實現。解決 Libra 核心的這些問題的工作正在進行當中。
差不多總結了本章的內容,儘管實現是用Rust來編寫的,這似乎是性能和安全性的良好開端。
我們預計Libra協議初次發布可支持1000支付交易/秒,每次交易從提交到完成之間有10秒鐘的最終化時間。
既然只有100左右的驗證者,而且互相全都是直接互連的,10秒鐘的區塊時間似乎可行。
最小節點要求:
40M的網際網路連接
1顆商品化CPU
16TB的SSD存儲
之前有一些參考文獻要求維繫驗證者從頭開始執行初始同步的能力,而不是信任來自其他驗證者的已籤名狀態。我的預期是如果 Libra 用得多的話,進行此類同步很快就會變得非常不切實際,因此節點安全模型會高度依賴於對驗證者的信任。
Libra幣儲備是實現保值的關鍵機制。通過儲備,每個幣都有一系列穩定且具備流動性的資產來充分支持。Libra幣合約允許協會在需求增加時鑄造新幣,並在需求萎縮時銷毀它們。協會本身不制定貨幣政策。它只能根據授權經銷商的要求鑄造和銷毀貨幣。用戶無需擔心協會將通脹引入本系統或者讓貨幣貶值:每鑄造一批新幣,儲備中都必須有等量的法幣存款。
好吧,可是我們現在談的是網絡外部的事件。正如白皮書前面所述,如果腳本使用了與網絡狀態無關的數據的輸入,網絡是不能執行這樣的腳本的。因此,上述文字中的修飾詞「能」和「必須」肯定是指網絡不知道的Libra協會的政策或合同義務。
共識算法依賴於驗證者組管理Move模塊來維護目前這組驗證者並且管理驗證者當中選票的分配。Libra Blockchain一開始只向創始會員授予選票。
假設驗證者要對該驗證者組的變動進行投票,似乎這會導致我們在權益證明系統當中看到的類似問題——長程攻擊(long range attacks)。如果受到連累的創始成員的私鑰達到一定閾值,攻擊者是否能從創世塊開始寫一個新的帳本歷史?如果是這樣的話,其他節點會接受嗎?目前尚不清楚共識協議是否允許重寫舊狀態,還是只允許添加。
我們計劃逐步過渡到權益證明
好吧,除非他們能解決尚未解決的那些問題。
如何進行治理?
這裡可以看出 Libra 協會是一個由成員組成的委員會,需要 2/3 的絕對多數人才能做出變更。這些人是唯一被允許鑄造或銷毀 Libra 幣的人,但如果達成足夠的共識,他們大概就可以做出任何自己想要的改變。
AML/KYC是否需要?
在協議層面顯然不需要,但 Calibra錢包聲明,所有用戶將通過政府發放的ID進行驗證。Calibra錢包似乎是至少一段時間內唯一可用的錢包,所以目前還不清楚開發人員和用戶能否在Libra網絡上面跑不遵循與Calibra相同標準的App。
什麼叫費用低?什麼是正常運行?怎麼才叫足夠容量?
Calibra錢包的FAQ 保證費用不高,但這似乎與底層協議在高負荷時的操作可能會相衝突。
交易費會很低廉且費用透明,尤其是如果進行國際匯款的話。Calibra會降低費用,以幫助大家多省點錢。
Libra真會對開發者開放嗎?
根據實現無需許可的共識的行動計劃:
Libra Blockchain會向所有人開放,包括任何的消費者、開發者或企業均可使用Libra網絡,在它的上面開發產品,並通過它們的服務來增值。開放訪問確保準入和創新的門檻不高,並鼓勵良性競爭,這對消費者是有益的。
我懷疑開發人員是不是真能在這個平臺上跑自己夢寐以求的任何在技術上有效的應用程式。我看到的東西裡面沒有一個能讓我相信這個系統會抵制審查,但時間會證明一切!
原文連結:https://onezero.medium.com/thoughts-on-libra-blockchain-49b8f6c26372
譯者:boxi。