Swarm最新官方白皮書
1 簡介
Swarm的使命,是通過為去中心化的互聯網提供可擴展的底層基礎設施,去塑造自我主權的全球化社會和無需許可的开放市場。Swarm的愿景,是通過點對點的存儲和通信系統來延展區塊鏈,從而讓“世界計算機”成為現實,這臺“世界計算機”將可以作為去中心化應用程序的操作系統和部署環境。
Swarm可以提供不間斷的服務,更有效地抵御網絡中斷或有針對性的DoS攻擊。Swarm作為一個無需許可的發布平臺,有效促進了信息自由。Swarm以其獨特的隱私特性,如匿名瀏覽、可拒存儲(deniable storage)、不可追蹤的消息傳遞和不泄漏元數據的文件格式等,響應了日益增長的網絡安全需求。
Swarm內置的激勵措施旨在優化帶寬和存儲資源的分配,使其在經濟上能夠自我維持。Swarm節點在與每個節點的連接中追蹤它們的相應帶寬貢獻,並且通過BZZ來解決由於不平等消耗而產生的額外債務。Swarm中的發布者必須花費BZZ去購买向Swarm寫入數據的權利,並對一些長期的存儲預付租金。
Swarm的模塊化設計由清晰可分的層(layer)組成(見圖1)。從技術上講,層2“不可變存儲的覆蓋網絡”和層3“通過API的高等級數據存取”構成了Swarm的核心。
圖1
2 DISC: 塊的分布式不可變存儲
DISC(Distributed Immutable Storage of Chunks)是Swarm的底層存儲模型。它由存儲和提供數據的節點組成,在這些節點之間的協作中,假設每個節點追求使其運營者利潤最大化的策略,那么網絡作為一個整體,其行為將顯現出以下特性:
隱私保護和無需許可的上傳和下載
強大的防御措施,內容一經發布便很難再對其進行屏蔽或更改訪問權限
隨着需求的增加可自動擴展
得到完整性保護的內容
無需再保存的內容最終會被遺忘
任何擁有多余存儲空間及帶寬的人,都可以以節點運營者的身份參與DISC,並由此獲得獎勵。當運營者安裝並運行Swarm客戶端軟件時,會創建一個新節點並成為Swarm網絡的一部分,基本上相當於負責照管Swarm這一全球硬盤的一小部分。
接下來,我們將進一步定義DISC,並解釋它為何會產生上述特性。
2.1 連接、拓撲和路由
DISC的最初職責是建立和維護一個節點網絡,使得所有節點都可以在彼此之間發送消息。這種消息交換是通過使用p2p網絡協議(libp2p)的節點之間存在的持久而安全的通信信道進行的。Swarm期望節點建立Kademlia連接:連接到其他特定的節點集時,節點對發送地址作出的本地決定,最終會讓消息的傳導找到全局最優路由。
Kademlia假設每個節點都分配了一個與其網絡地址不同的Swarm地址。通過計算前綴位(prefix bits)的數值中兩個Swarm地址的共同值,我們可以定義它們的接近度。彼此最接近的節點們將形成一個完全連通的鄰域(neighbourhood)。此外,每個節點連接到來自每個離散鄰近類(discrete proximity class)的多個對等節點(見圖2)。
圖2
(注1:Libp2p 是一個便於使用者开發去中心化點對點應用的網絡框架。)
(注2:Kademlia 是由 Petar Maymounkov 與 David Mazières 所設計的P2P 重疊網絡傳輸協議,以構建分布式的P2P電腦網絡。是一種基於異或運算的P2P信息系統。它制定了網絡的結構及規範了節點間通訊和交換資訊的方式。)
由此產生的拓撲結構保證了中繼(relaying)在每次信息躍遷中至少將消息向其預期目的地移近一步(見圖3)。這種技術使消息能夠在任意兩個節點之間路由,即使這兩個節點之間不保持直接連接。傳遞消息所需的躍遷數上限是節點總數的對數,這樣即便在一個極其龐大的網絡中,也能確保任意兩個節點始終能夠相互聯系。
圖3
2.2 塊和存儲
Swarm中的標准存儲單元稱為塊(chunk)。塊最多由4千字節的數據組成,並且附有一個地址。由於塊的地址與節點的地址來自同一地址空間,因此可以計算它們的接近度。Swarm的存儲方案聲明每個塊都由節點存儲,其地址接近塊本身的地址。
為了方便數據的保密性,塊可以在填充到4千字節後進行加密,使得沒有密鑰的人無法將其與其它隨機數據進行區分。即使對於未加密的塊,節點運營者也無法輕易確定每個塊來自於哪些內容。由於Swarm節點無法自己選擇存儲、加密哪些數據塊,這種來源的模糊性以及元數據的無法泄露都為它們提供了有效的保護,使它們免於承擔與其所存儲內容相關的責任。
為了將塊插入到Swarm中,節點通過同步推送協議(push-sync protocol)將區塊進行轉送,直到到達它所屬的鄰域。然後,塊的存儲確認函將沿着相同的路徑被傳回。想要檢索一個塊,只需使用檢索協議,將具有塊地址的請求路由到相關鄰域。如果途中的任何節點在其本地存有相應的塊,則會將其以響應的形式發回。
圖4
節點們使用同步回送協議(pull-sync protocol)持續同步其塊存儲。這保證了每個鄰域都冗余地存儲屬於其鄰域的全部塊。這種冗余增加了數據傳輸的彈性,在某鄰域中的一些節點無法訪問的情況下也能維持塊的可用性。同步協議還確保鄰域的存儲內容在節點離线和新節點加入網絡時能夠保持一致。
2.3 轉發、隱私和緩存
在Swarm中,消息的路由通過將其遞歸地轉發到更接近其目的地的位置,然後沿着相同的路由傳回一個響應來實現。此路由算法具備兩個重要屬性:
提出請求的人是模糊的。
隨着需求的增加自動擴展。
發起請求的節點發送的消息,與僅轉發請求的節點發送的消息,從任何層面來看都相同。這種模糊性使得請求的發起人能夠確保他們的隱私不受侵犯,從而促進無需許可的內容發布和私密瀏覽。
由於參與路由檢索請求的節點也許會選擇存儲由它們所轉發出去的塊,因此便要啓用可自動擴展式分發系統。下面討論的帶寬激勵機制為這種投機緩存(opportunistic caching)提供了經濟動力。
2.4 Swarm記帳協議
Swarm記账協議(Swarm Accounting Protocol,SWAP)確保節點運營者在對消息進行路由時會去協作,同時保護網絡免於胡亂使用帶寬。
當節點轉發請求和響應時,它們會跟蹤它們與每個節點之間的相對帶寬消耗。在一定限度內,節點間以服務換服務。然而,一旦達到限度外,負債方既可以選擇等待,直到其債務隨着時間的推移被攤銷,或者也可以通過發送支票來進行支付,這些支票可在區塊鏈上兌現為BZZ(見圖5)。
圖5
這個協議能夠確保那些下載或上傳少量內容的人免費使用Swarm,還有那些愿意等待的人,在與各節點進行互惠服務直到獲得足夠的信用(credit)後,也可以免費使用Swarm。與此同時,當上傳或下載更大的內容量時,為那些希望付費的人提供了一種更迅捷的體驗。
在幫助每個節點轉發消息時,節點存在經濟動機,因為每個成功地將請求路由到更靠近目的地的節點,在該請求成功被送達時都可以獲得BZZ。如果該節點本身沒有存儲數據,那么它只需支付少量的費用就可以從更近的節點請求數據塊。通過這樣的交易,節點在處理請求時可以獲得一點利潤。這意味着節點存在對塊進行緩存的動機,因為在從較近的節點購入一次塊之後,對同一塊的任何後續請求都將獲得純利潤。
2.5 容量不足和垃圾收集
隨着Swarm中新內容的添加,每個節點的有限存儲容量遲早會被耗盡。此時,節點需要一個策略來決定應該刪除哪些塊,以便為新的塊讓路。
每個Swarm節點的本地存儲內置兩個子系統,即“儲備(reserve)”和“緩存(cache)”。
“儲備”是一個固定大小的存儲空間,專門用於存儲屬於節點鄰域的塊。一個塊是否保留在“儲備”內,取決於它所附的“郵戳(postage stamp)”。區塊鏈上的合約允許通過BZZ購买“郵批(postage batch)”。“批(batch)”的所有者有權發行數量有限的郵戳。然後,這些郵戳充當某種信托標志,向用戶指明在Swarm中保存某相關內容的具體價值。通過使用這個值的大小來確定哪些在“儲備”中的塊要被優先刪除,這樣一來存儲者的節點便能最大限度地提高DISC的效用(見圖6)。每個郵戳的價值會隨着時間的推移而減少,就好像儲存租金是定期從“批”的余額中扣除的一樣;一旦郵戳的價值不足,相關的塊就會被逐出“儲備”並置入“緩存”。
“緩存”的作用是保留由於“批”值不足或距離節點地址太遠而不受“儲備”保護的塊。當容量達到限度,緩存就會被定期修剪,最長時間未被請求的塊將被刪除。塊的受歡迎程度可以通過最後一次收到請求的時間來預測,更多SWAP收入的塊將優先得到保留。與投機緩存相結合,這種垃圾收集(garbage collecting)策略使運營者從帶寬激勵中獲得的利潤最大化,而在網絡層面上,實現了受歡迎內容的自動擴展。
圖6
2.6 塊類型
在上面我們將塊定義為DISC中數據的標准單位。Swarm中存在兩種基本的塊類型:內容尋址塊(content-addressed chunks)和單一所有者塊(single-owner chunks)。
內容尋址塊的地址基於其數據的哈希摘要(hash digest)(見圖7)。使用哈希作為塊的地址可以驗證塊數據的完整性。Swarm在塊數據的小部分上使用基於默克爾樹(Merkle tree)的BMT(Binary Merkle Tree)哈希算法。
圖7
單一所有者塊的地址通過所有者地址和一個identifier進行哈希計算而得。單一所有者塊數據的完整性由所有者的加密籤名來保證,該籤名證明任意塊的數據與identifier之間的關聯(見圖8)。換句話說,每個identity都擁有Swarm地址空間的一部分,他們可以在其中自由地將內容分配給一個地址。
圖8
3 Swarm API的功能
除了塊,Swarm還公开了用於應對實現更高等級概念的API,例如文件、具有各種元數據的文件的分層集合,甚至是inter-node消息傳遞等。這些API試圖鏡像那些已經在web上使用的API。更新穎的構想和數據結構可以繪制在這些更高的層級之上,從而為希望從DISC提供的隱私和去中心化的核心產品中獲益的所有人帶來豐富多樣的可能性。
3.1 文件和集合
大於單個塊中允許的4千字節的數據會被拆分為多個塊。一組同屬的塊由一個Swarm哈希樹(hash-tree)表示,該哈希樹對文件在上傳過程中分割成塊的方式進行編碼。這棵樹由一組葉節點塊(leaf node chunks)組成,包含數據本身,由一層或幾層中間塊引用,每個中間塊包含對其子塊的引用(見圖9)。
然後,整個文件的內容地址由根塊的哈希摘要確定,即橫跨整個文件的哈希樹的默克爾根(Merkle root)。這樣,文件的地址就變成了它的校驗和(checksum),從而可以驗證內容的完整性。將文件表示為塊的平衡默克爾樹,還提供了對文件的高效隨機訪問,結果上可以高效地進行範圍查詢。
Swarm使用“清單(manifests)”來表示集合。清單編碼一個通用的字符串引用映射,允許它對目錄樹(directory tree)、鍵值存儲(key-value store)或路由表(routing table)進行模型構建。這些分別使Swarm能夠實現文件系統,充當數據庫,甚至為網站和dapp提供虛擬主機。
如果我們將URL的host部分解釋為對清單的引用,那么清單提供基於URL的尋址,URL路徑用作在由清單表示的映射中進行查找的鍵(key),只被用於抵達文件引用。
圖9
清單以緊湊默克爾前綴樹(compacted Merkle trie)的形式對它們所表示的映射進行編碼,塊將前綴樹的節點序列化(見圖10)。當查找路徑時,我們只需要沿着我們遍歷的分支的節點相應的塊進行檢索。這樣便可以確保高效查找文件/記錄,其延遲和帶寬為集合大小的對數。
圖10
文件中哈希樹中間塊中的子節點引用,和集合中清單前綴樹節點,在位置上與BMT哈希段是對齊的。結果上,Swarm支持緊湊證明特定數據段是在位於給定URL的給定偏移量(offset)處的文件的一部分,這是可公开證明的數據庫索引和去信任化聚合的基礎。
3.2 跟蹤更新:feeds和域解析
feed是一種允許可變資源顯示(impression of a mutable resource)的單一所有者塊示例。feed能夠表示可變資源的版本化修訂、對主題的順序更新或一方在通信信道中發布的連續消息。
feed的工作方式是將單一所有者塊的identifier定義為從主題和索引派生而來。當發布者和內容使用者就索引的更新方式和更新時間達成一致時,就可以構造和查找對該feed更新的特定引用。
類似於DNS將域解析為主機服務器的IP地址,Swarm通過使用以太坊域名解析服務ENS(Ehereum-Name Service)——區塊鏈上的一組智能合約,將其解析為引用以支持人類可讀的域名(例如Swarm.eth)。
每當web應用程序或其所代表的網站由於更新而獲得新的Swarm引用時,就可以對在ENS中注冊的引用進行更新。或者,當域名引用feed時,用戶可以受益於人類可讀的域名,同時也可以更新其內容,而無需在每次進行更改時與區塊鏈交互並支付相關交易成本。
3.3 消息傳遞
PSS(Postal Service on Swarm)是Swarm中的一種直接節點間消息傳遞協議。它是通過加密目標收件人的消息,並在內容尋址塊中用主題將其包裝來實現的。由於塊的創建方式令其內容地址落在接收者的鄰域中,所以傳遞自然由同步推送協議來處理。
此外,對於任何第三方來說,消息都無法與隨機加密的塊進行區分,因此它也被稱為“特洛伊木馬(Trojan)”塊。一個期望接收PSS消息的節點將嘗試解密和打开到達其鄰域的所有塊。在成功地將特洛伊木馬塊解密和解包為合法收件人之後,客戶端節點可以將消息明文發送給使用PSS API訂閱該主題的應用程序。
PSS還提供異步傳遞,因為塊會持續存在並最終同步到所有鄰域節點,即使這些節點在之後才上线。
由於PSS允許用戶從迄今為止未知的個體處接收消息,因此它是一種理想的通信原語(communication primitive),用於向公共個體(例如注冊)發送匿名消息,或通過feeds來設置安全通信信道來向聯系人發起信息流。由於PSS不需要收件人執行任何操作(例如輪詢polling),因此它可以作為推送通知的推薦原語。
3.4 釘住和恢復
DISC最終會忘記很少被訪問和未被付費的內容。通過對塊進行“釘住(pinning)”這一操作,節點可以確保它們在本地保留特定內容。同時,這種“在本地保存被釘住的內容的人(pinner)”可以參與內容的被動或主動恢復,以造福所有用戶。
被動恢復涉及一個恢復協議,當檢索失敗時,通過使用PSS發送恢復請求,以通知pinner丟失的塊。Pinners會聽取恢復請求,並通過重新上傳丟失的塊進行響應,下載者便可以在重試時找到這些丟失的塊。此應對恢復功能還允許直接從發布者節點對原始內容做種,類似於某些現有文件共享解決方(BitTorrent、IPFS)中的主要操作模式。
相反,Swarm也提供了主動恢復或數據維護(data stewardship),因此當Pinner主動檢查網絡中內容的可用性並發現某些塊丟失時,就可以主動重新部署這些丟失的塊。
4 結論
Swarm作為一個點對點網絡,其所有節點共同提供去中心化的存儲和通信服務。無需許可且隱私的Swarm滿足了言論自由、數據主權和網絡开放市場的需求,同時通過完整性保護、抗審查和防攻擊來確保其安全。本文介紹了Bee1.0的初始主網上线中所包含的功能。
這是個裏程碑,而旅程才剛剛开始:加入Swarm,一起完成賦予數字自由的使命。
Swarm官方白皮書
翻譯:藍貝殼雲儲
本文為Swarm官方最新發布的白皮書全文,由藍貝殼雲儲整理翻譯,內容僅供參考,最終請以官方白皮書中內容為准。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
藍貝殼雲儲
文章數量
4粉絲數
0