吳為龍:分散式儲存結合公鏈激勵的工程實踐 | 巴位元加速器技術公開課
11月28日-30日每天14:00,Geekhub 技術社群將舉行【Geekhub Global Online】技術公開課第三期的活動,主題為“ 分散式儲存,數字基石 ”。
帶來了題為“分散式儲存結合公鏈激勵的工程實踐”的線上分享。
Genaro Network 是首個結合去中心化儲存網路的圖靈完備公有鏈,它為區塊鏈開發人員提供了一站式解決方案,在部署智慧合約的同時,可以儲存使用者資料。同時,Genaro 也為每個人建立一個可靠的網際網路與共享小區。
以下為直播文字實錄,由巴位元整理髮布:
大家好,我是Genaro Network(GNX)創始人吳為龍,很高興來到這裡,我今天分享的主題是“ 分散式儲存結合公鏈激勵的工程實踐 ”。
分散式儲存
我先來介紹一下分散式儲存的概念。分散式儲存指的是 使用分散式節點儲存本地檔案的方式 。
與目前常見的集中式儲存技術不同,分散式儲存技術並不是將資料儲存在某個或多個特定的節點上,而是通過網路使用企業中的每臺機器上的磁碟空間,並將這些分散的儲存資源構成一個虛擬的儲存裝置,資料分散的儲存在企業的各個角落。
經典的分散式儲存專案有Sia、Storj、Maidsafe、IPFS。
Maidsafe是最早的分散式儲存專案,但是一直停留在α版本; Sia是一個基於POW的區塊鏈去中心化儲存的專案,以挖礦為主; Storj是一箇中心化的獎勵機制,即每個月storj官方根據各礦工每月的儲存量來發放獎勵; IPFS雖然也提供去中心化的雲端儲存服務,但在實現機理上是在基礎層而不是應用層去改變雲端儲存。
剛才我簡單解釋了分散式儲存的概念,現在講一講什麼是集中式儲存和雲端儲存。
雲端儲存本質上也是一種分散式儲存,傳統的雲端儲存公司購買或租用伺服器來儲存他們的客戶檔案,同時使用RAID方案或 多資料中心的方法來保護資料的安全性。
主要有三個理由:
1.無論是計算,還是儲存,分散式最大的特點就是低成本。分散式儲存讓最大化使用低成本的儲存; 2.用了分散式儲存之後,就可以用一些無伺服器的系統。下一代網際網路將以無伺服器為起點的; 3.區塊鏈本身儲存量很大,分散式儲存也可以用於鏈的部分。
分散式儲存方法也叫分散式雜湊表(Distributed Hash Table, DHT)。通俗的講就是,在 DHT 中,某些被標記的資訊,按照某種約定或協議被儲存在多個分散的節點上,可以有效地避免中心化伺服器宕機故障而帶來的整個網路癱瘓。
和中心化伺服器不同,DHT 網路中的各節點並不需要維護整個網路的資訊,而是隻在節點中儲存其臨近的後繼節點資訊,大幅減少了頻寬的佔用和資源的消耗。DHT網路還在與關鍵字最接近的節點上備份冗餘資訊,避免了單一節點失效問題。
接下來,我們來看一下 分散式儲存需要實現的四個目標 :
1.DHT來保證的部分節點部分資料,路由連線; 2.節點ID和Key值的關係確定了檔案存取的方向; 3.節點List按照時間順序儲存其它節點的資訊; 4.主要適用於Key精確查詢,很快迭代尋找。
分散式儲存有兩個現存的問題:
1.上述只保證了節點定址和對應的上傳下載,並沒有對其儲存過程進行保障; 2.需要特定共識保證系統中儲存的檔案都可以被下載,而不是跳轉幾次節點後都找不到value。
分散式儲存與共識機制結合
我們發現,儲存本身是有規律可循的,就是缺少共識來檢驗過程。這裡就要引入“ 分散式儲存共識 ”的概念,它指的是 能夠保證檔案儲存後能夠被下載的共識 。這個共識很可能只做一件事,就是保證這個檔案能被下載。
那麼這個共識能否用PoW呢?其實這並不是一回事兒,因為分散式儲存的共識不等於區塊鏈的共識。區塊鏈共識保障的是所有區塊鏈的節點是維護同一個表單的;分散式儲存共識裡是保障儲存節點能夠給予心跳,而不是保障所有節點維護同一個表單。
Genaro Network使用的是兩個共識,因為一個共識只能做一件事。共識的設計基礎:
共識設計基於分散式系統的CAP原理;鏈式共識主要保證了A(可用性)和P(分割槽容錯性),每個全節點儲存的是相同的東西;儲存共識不需要每一個節點儲存一樣的東西(DHT的設計),所以需要相對獨立的設計。
我們需要看在以往的工程經驗中,到底有沒有對儲存共識的相關設計。
可收回證明(PoR,Proof of Retrievability)共識演算法,是一種緊湊證明,表示檔案系統(證明者)中的目標檔案 F 對客戶端(驗證者)而言是完整的。由於使用 PoR 比傳輸檔案 F 本身而言具有更低的通訊複雜性,因此 PoR 對於構建高可靠的遠端儲存系統是一種頗具吸引力的構建模組。作為一種共識演算法,PoR 對於雲端儲存非常有用。
Genaro對共識做了一些改進,改進的方式是:
由於檔案不能被細分成特別小的shard(過多的驗證時間),所以存在重放攻擊隱患;
重放攻擊需要通過增加challenge來防止,需要由鏈部分的hash提供給輔助資訊,用指紋組來代替單一指紋;
Prover部分需要額外處理,本身Prover是中心化節點,需要來保證challenge可靠性。

這就是Genaro改進Prover的思路,如何將中心化的Prover變得更去中心化呢?如上圖。
在Genaro網路中,每個區塊由儲存活動產生,礦工被稱為收據製造者(Receipt Maker),他們被節點選中為儲存活動生成收據。收據見證人(Receipt Prover)為網路提供算力,證明儲存有效性以獲得獎勵。
Genaro儲存網路結構基礎:
分散式儲存與公鏈激勵結合
雖然分散式儲存的成本很低,但是如果儲存節點還是不願意用這麼低的成本去獲得收益,那該怎麼辦?Genaro這半年來就是嘗試將分散式儲存與公鏈激勵結合起來。
首先,儲存節點需要的是激勵; 然後, 激勵節點可以解決分散式儲存的,由於成本過低導致無法長期線上的問題; 最後, 公鏈本身的機制是激勵出塊節點(寫節點)。
公鏈激勵的設計實現如下:
公鏈共識分為寫節點競爭或者寫節點輪訓,無論在什麼情況下都是要提供時間屬性,否則輕易被分叉。比如PoS的long range attack; 儲存節點的驗證後,提供的心跳可以提供時間屬性; 公鏈可以使用時間屬性完成PoS中時間缺失的問題。

實現共識與激勵的Genaro公鏈整體結構
由剛才的VM設計出的不同的opcode以及狀態上的改動,這裡稱之為“特殊交易”或“結算方式”。把這些功能交給由RAFT組成的Tunnel,剩下的儲存部分不用改變原有的情況。
那麼每一次相關的心跳都是通過狀態交給鏈,這樣就能保證每一次有效儲存是在挖礦。
海報預覽: