BTC
ETH
HTX
SOL
BNB
查看行情
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

一覽Swarm最新發布的官方白皮書

蓝贝壳云储
特邀专栏作者
2021-06-16 05:40
本文約6408字,閱讀全文需要約10分鐘
本文為Swarm官方於6月13日最新發布的白皮書中文版
AI總結
展開
本文為Swarm官方於6月13日最新發布的白皮書中文版

二級標題

1 簡介

世界計算機世界計算機二級標題

二級標題1 簡介”成為現實,這台“世界計算機”將可以作為去中心化應用程序的操作系統和部署環境。Swarm 可以提供不間斷的服務,更有效地抵禦網絡中斷或有針對性的DoS 攻擊。 Swarm 作為一個無需許可的發布平台,有效促進了信息自由。 Swarm 以其獨特的隱私特性,如匿名瀏覽

可拒存儲(deniable storage)

Swarm 內置的激勵措施旨在優化帶寬和存儲資源的分配,使其在經濟上能夠自我維持。 Swarm 節點在與每個節點的連接中追踪它們的相應帶寬貢獻,並且通過BZZ 來解決由於不平等消耗而產生的額外債務。 Swarm 中的發布者必須花費BZZ 去購買向Swarm 寫入數據的權利,並對一些長期的存儲預付租金。組成(見圖1)。從技術上講,二級標題

DISC (Distributed Immutable Storage of Chunks)

層3“通過API 的高等級數據存取”
二級標題
二級標題
2 DISC: 塊的分佈式不可變存儲
是Swarm 的底層存儲模型。它由存儲和提供數據的節點組成,在這些節點之間的協作中,假設每個節點追求使其運營者利潤最大化的策略,那麼網絡作為一個整體,其行為將顯現出以下特性:

•隱私保護和無需許可的上傳和下載

•強大的防禦措施,內容一經發布便很難再對其進行屏蔽或更改訪問權限


•隨著需求的增加可自動擴展

•得到完整性保護的內容

•無需再保存的內容最終會被遺忘任何擁有多餘存儲空間及帶寬的人,都可以以節點運營者的身份參與DISC,並由此獲得獎勵。當運營者安裝並運行Swarm 客戶端軟件時,會創建一個新節點並成為Swarm 網絡的一部分,基本上相當於負責照管Swarm 這一全球硬盤的一小部分。接下來,我們將進一步定義DISC,並解釋它為何會產生上述特性。

2.1 連接、拓撲和路由

DISC 的最初職責是建立和維護一個節點網絡,使得所有節點都可以在彼此之間發送消息。這種消息交換是通過使用p2p 網絡協議(libp2p)的節點之間存在的持久而安全的通信信道進行的。 Swarm 期望節點建立Kademlia 連接:連接到其他特定的節點集時,節點對發送地址作出的本地決定,最終會讓消息的傳導找到全局最優路由。

Kademlia 假設每個節點都分配了一個與其網絡地址不同的Swarm 地址。通過計算前綴位(prefix bits)的數值中兩個Swarm 地址的共同值,我們可以定義它們的接近度。彼此最接近的節點們將形成一個完全連通的鄰域(neighbourhood)


。此外,每個節點連接到來自每個離散鄰近類(discrete proximity class)的多個對等節點(見圖2)。

(注1:Libp2p 是一個便於使用者開發去中心化點對點應用的網絡框架。)(注2:Kademlia 是由Petar Maymounkov 與David Mazières 所設計的P2P 重疊網絡傳輸協議,以構建分佈式的P2P 電腦網絡。是一種基於異或運算的P2P 信息系統。它制定了網絡的結構及規範了節點間通訊和交換資訊的方式。)由此產生的拓撲結構保證了中繼(relaying)在每次信息躍遷中至少將消息向其預期目的地移近一步(見圖3)。這種技術使消息能夠在任意兩個節點之間路由,即使這兩個節點之間不保持直接連接。傳遞消息所需的躍遷數上限是節點總數的對數,這樣即便在一個極其龐大的網絡中,也能確保任意兩個節點始終能夠相互聯繫。2.2 塊和存儲

Swarm 中的標準存儲單元稱為

塊(chunk)。塊最多由4 千字節的數據組成

,並且附有一個地址。由於塊的地址與節點的地址來自同一地址空間,因此可以計算它們的接近度。 Swarm 的存儲方案聲明每個塊都由節點存儲,其地址接近塊本身的地址。為了方便數據的保密性,塊可以在填充到4 千字節後進行加密,使得沒有密鑰的人無法將其與其它隨機數據進行區分。即使對於未加密的塊,節點運營者也無法輕易確定每個塊來自於哪些內容。由於Swarm 節點無法自己選擇存儲、加密哪些數據塊,這種來源的模糊性以及元數據的無法洩露都為它們提供了有效的保護,使它們免於承擔與其所存儲內容相關的責任。為了將塊插入到Swarm 中,節點通過


同步推送協議(push-sync protocol)

將區塊進行轉送,直到到達它所屬的鄰域。然後,塊的存儲確認函將沿著相同的路徑被傳回。想要檢索一個塊,只需使用檢索協議,將具有塊地址的請求路由到相關鄰域。如果途中的任何節點在其本地存有相應的塊,則會將其以響應的形式發回。

節點們使用

同步回送協議(pull-sync protocol)

持續同步其塊存儲。這保證了每個鄰域都冗餘地存儲屬於其鄰域的全部塊。這種冗餘增加了數據傳輸的彈性,在某鄰域中的一些節點無法訪問的情況下也能維持塊的可用性。同步協議還確保鄰域的存儲內容在節點離線和新節點加入網絡時能夠保持一致。

2.3 轉發、隱私和緩存在Swarm 中,消息的路由通過將其遞歸地轉發到更接近其目的地的位置,然後沿著相同的路由傳回一個響應來實現。此路由算法具備兩個重要屬性:•提出請求的人是模糊的。


•隨著需求的增加自動擴展。

發起請求的節點發送的消息,與僅轉發請求的節點發送的消息,從任何層面來看都相同。這種模糊性使得請求的發起人能夠確保他們的隱私不受侵犯,從而促進無需許可的內容髮布和私密瀏覽。由於參與路由檢索請求的節點也許會選擇存儲由它們所轉發出去的塊,因此便要啟用可自動擴展式分發系統。下面討論的帶寬激勵機制為這種

投機緩存(opportunistic caching)

2.4 Swarm 記帳協議信用(credit)Swarm 記賬協議(Swarm Accounting Protocol,SWAP)

確保節點運營者在對消息進行路由時會去協作,同時保護網絡免於胡亂使用帶寬。這個協議能夠確保那些下載或上傳少量內容的人免費使用Swarm,還有那些願意等待的人,在與各節點進行互惠服務直到獲得足夠的


2.5 容量不足和垃圾收集

信用(credit)

在從較近的節點購入一次塊之後,對同一塊的任何後續請求都將獲得純利潤。”和“”和“2.5 容量不足和垃圾收集”。

隨著Swarm 中新內容的添加,每個節點的有限存儲容量遲早會被耗盡。此時,節點需要一個策略來決定應該刪除哪些塊,以便為新的塊讓路。每個Swarm 節點的本地存儲內置兩個子系統,即“”和“”和“緩存(cache)

郵戳(postage stamp)垃圾收集(garbage collecting)”。區塊鏈上的合約允許通過BZZ 購買“


郵批(postage batch)

垃圾收集(garbage collecting)策略使運營者從帶寬激勵中獲得的利潤最大化,而在網絡層面上,實現了受歡迎內容的自動擴展。

在上面我們將塊定義為DISC 中數據的標準單位。 Swarm 中存在兩種基本的塊類型:哈希摘要(hash digest)BMT (Binary Merkle Tree)哈希算法。

二級標題


3 Swarm API 的功能

算法。


3.1 文件和集合

二級標題二級標題3 Swarm API 的功能除了塊,Swarm 還公開了用於應對實現更高等級概念的API,例如文件、具有各種元數據的文件的分層集合,甚至是inter-node 消息傳遞等。這些API 試圖鏡像那些已經在web 上使用的API。更新穎的構想和數據結構可以繪製在這些更高的層級之上,從而為希望從DISC 提供的隱私和去中心化的核心產品中獲益的所有人帶來豐富多樣的可能性。3.1 文件和集合

大於單個塊中允許的4 千字節的數據會被拆分為多個塊。一組同屬的塊由一個Swarm哈希樹(hash-tree)表示,該哈希樹對文件在上傳過程中分割成塊的方式進行編碼。這棵樹由一組葉節點塊(leaf node chunks)然後,整個文件的內容地址由根塊的哈希摘要確定,即橫跨整個文件的哈希樹的

Swarm 使用“默克爾根(Merkle root)。這樣,文件的地址就變成了它的清單(manifests)路由表(routing table)”來表示集合。清單編碼一個通用的字符串引用映射,允許它對

目錄樹(directory tree)

路由表(routing table)


3.2 跟踪更新:feeds 和域解析

進行模型構建。這些分別使Swarm 能夠實現文件系統,充當數據庫,甚至為網站和dapp 提供虛擬主機。如果我們將URL 的host 部分解釋為對清單的引用,那麼清單提供基於URL 的尋址,URL 路徑用作在由清單表示的映射中進行查找的鍵(key),只被用於抵達文件引用。清單以緊湊默克爾前綴樹(compacted Merkle trie)的形式對它們所表示的映射進行編碼,塊將前綴樹的節點序列化(見圖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 最終會忘記很少被訪問和未被付費的內容。通過對塊進行“”這一操作,節點可以確保它們在本地保留特定內容。同時,這種“

相反,Swarm 也提供了被動恢復二級標題

涉及一個恢復協議,當檢索失敗時,通過使用PSS 發送恢復請求,以通知pinner 丟失的塊。 Pinners 會聽取恢復請求,並通過重新上傳丟失的塊進行響應,下載者便可以在重試時找到這些丟失的塊。此應對恢復功能還允許直接從發布者節點對原始內容做種,類似於某些現有文件共享解決方(BitTorrent、IPFS)中的主要操作模式。

相反,Swarm 也提供了

主動恢復

ETH
開發者
智能合約
歡迎加入Odaily官方社群