在区块链上存储数据是昂贵的,所以如果你需要以“区块链风格”(以不可变、无许可和分布式的方式)存储大量数据,你必须使用外部存储解决方案。最常见的选择是使用IPFS ,但市场上还有其他一些播放器。其中之一是以太坊群。在本文中,我将向您介绍 Swarm 和 IPFS 之间的异同,以帮助您为您的下一个项目选择合适的存储解决方案。
IPFS(InterPlanetary File System 的首字母缩写)由 Protocol Labs 于 2014 年创立。它是一种分布式文件系统协议,使用内容寻址来唯一标识全局命名空间中的每个文件。 IPFS 没有真正的激励系统,这就是 Protocol Labs 在 2017 年制作FileCoin的原因,这是它自己的以存储为中心的区块链。
Ethereum Swarm 的想法来自以太坊创始人之一的 Gavin Wood。 2015 年,Viktor Trón 和 Daniel Nagy 在基金会的 Geth 团队中接管了该项目。在 ICO 成功后,他们作为以太坊基金会支持的自治项目开始了自己的旅程。如今(2022 年)Swarm 的功能或多或少是完整的,并且正在积极开发中。
这两个系统都提供了一个分布式、不可变和内容可寻址的系统,具有自己的激励系统和加密货币,而且它们都基于libp2p 。接下来,我将对这两个系统进行逐步比较。
IPFS基本上是一个存储提供商社区,其中节点发布由其内容哈希引用的内容。哈希的存储节点列表存储在DHT中。如果你想检索内容,第一步你必须通过内容哈希在 DHT 中找到对等列表。在第二步中, peer id必须转换为 IP 地址,在第三步中,您可以在 IP 地址上从给定的 peer 下载内容。
Ethereum Swarm有不同的逻辑,因为它将内容本身存储在 DHT 中。他们称这个系统为 DISC(Distributed Immutable Store for Chunks),整个系统的设计就是为了让这个 DHT 变得高效。例如,当一个节点选择其他节点进行连接时,它会根据每个邻近顺序(即与其自身地址的数量级距离)选择对等点。由于 Kademlia 的连通性,在这个系统中找到一个块非常快。当一个节点想要检索一个块时,它会询问它的对等节点。如果一个对等点有内容,它会返回它,如果没有,它会请求它的对等点,等等。内容总是由与它有一个小 Kademlia 距离的节点存储,并且由于 Kademlia 连接,它总是可以找到对数长度的路径。当存储节点收到检索请求时,它将内容返回给请求节点,请求节点又将其中继回请求它的节点,等等,直到它到达请求的来源。 Swarm 调用此方法转发 Kademlia,并提供匿名性。节点只知道内容的请求方,但没有人知道请求或内容的来源。这类似于Tor 网络对匿名请求所做的工作。但匿名只是转发 Kademlia 的优势之一。它还有助于分发内容,但我稍后会写到。
如果你想在IPFS上存储可变内容(例如经常更改的网页),你可以使用IPNS 。在 IPNS 上,可变内容的地址是公钥,底层不可变内容的地址由其私钥部分签名。公钥 -> 签名内容分配在 DHT 中发布。如果内容发生变化,内容所有者签署新的内容哈希并将其发布为公钥,以便检索者可以从中刷新内容分配。
在Ethereum Swarm上,有两种类型的块。一个是“通常”的内容寻址块,另一个是单一所有者块。单一所有者块的地址是所有者的哈希值和唯一 ID。这些单一所有者块也是不可变的,但您可以根据主题名称和序列号创建 ID。当你更改内容时,你必须简单地增加序列号并发布一个新的块。检索器可以轮询系统,如果有序列号更高的新块可用,则它们可以刷新其中的内容。 Swarm 将这些序列号结构称为提要。
如果你想将内容存储在IPFS上,你有更多的选择。您可以简单地选择像 Infura 或 Pinata 这样的中心化提供商,上传您的内容,并支付存储费用以使您的内容在 IPFS 上可用,或者您可以简单地在您的机器上运行 IPFS 节点并自行发布。
另一种方法是使用 FileCoin,它是 IPFS 的“官方”区块链(也是由自己开发 IPFS 的 Protocol Labs 开发的)。 FileCoin 基本上是存储提供商的市场,您可以在其中签订存储内容的合同。 FileCoin 网络的机制确保您的内容安全,并惩罚不保留您的内容或不提供内容的签约提供商。如果您检索内容,并且达到数据传输阈值,您必须支付费用。
Ethereum Swarm使用自己的支付系统而不是区块链,这类似于闪电网络等支付渠道,但有一点不同。当一个节点向另一个节点付款时,它通过支票进行。这些支票类似于现实世界的支票,可以用来从节点的支票簿合约中提取资金的签名文件。
在 Swarm 上,数据传输是收费的。如果一个节点向其对等节点发送数据,则会计算一小笔费用。每个对等连接都有一个余额,如果这个余额达到限制,该节点将检查另一个节点。一切都脱离了链。只有兑现支票需要区块链操作。
如果您想检索内容,您必须向提供内容的同行付费。如果它有内容,它可以保留全部费用,但如果没有,它必须为提供它的同行付费。此逻辑激励节点在本地存储流行内容,因此 Swarm 充当自适应 CDN。
在 Swarm 网络上,没有单独的提供商。内容始终存储在与其散列具有最小 Kademlia 距离的节点上(Swarm 将这些节点称为邻域)。保持 DHT 的有效可搜索性是 Swarm 的一个基本属性。您可以在任何节点上发布内容,这会将其推送到最近的对等节点,从而将其推送到最佳存储位置。该方法与内容检索非常相似,但方向相反。如果你想在网络中存储你的内容,你必须在上面贴上邮票。邮票就像一张支票,只有当你能证明你保留了内容时才能兑现。
以太坊互操作性是以太坊 Swarm 真正强大的领域。作为以太坊的“官方”存储,一切都是“以太坊兼容”的。
例如,节点地址来源于所有者的以太坊地址。因此,我们可以使用块转发系统将加密消息发送到给定节点。 Swarm 将这种技术称为 PSS,它是以太坊消息传递协议 Whisper 的继承者。
单一所有者块的所有者也是以太坊地址,签名方法与以太坊使用的相同,因此您可以简单地在智能合约上检查它或使用它在提要中分配元数据。当我构建MyETHMeta (一个类似 Gravatar 的以太坊账户元数据系统)时,我不得不使用智能合约来存储以太坊地址 -> 元数据 URL 映射。有了 Swarm,它可以通过一个没有区块链的简单提要来完成。
Swarm 块是Merkle 树。这意味着块地址是内容的 Merkle 根。如果您在智能合约中检查它们,这将很有用,因为您可以轻松地为内容创建包含证明。例如,如果你想存储一个长(>1000 个元素)的白名单,你可以将它存储在 Swarm 而不是区块链上,并使用 Merkle 证明通过智能合约检查成员资格。或者您可以在 Swarm 上创建完整汇总,其中状态根也是整个状态的内容地址。
如您所见,两种存储解决方案各有优缺点。
IPFS是较旧的系统(从某种意义上说)。它有很多用例,有据可查且被广泛使用。有很多中心化的 IPFS 提供商,您也可以使用 FileCoin 来存储您的内容。
Ethereum Swarm相对较新并且正在开发中,但它具有一些非常令人兴奋的特性。匿名的内容存储和检索、超高效的DHT管理、强大的以太坊兼容性是该解决方案的独特之处。