S5 网络

S5 是一个去中心化网络,让您掌控自己的数据和身份。

其核心是一个类似 IPFS 的内容寻址存储网络,并且还使用了 IPFS 项目创建的许多格式和标准。

该存储库包含使用 Dart 编程语言编写的 S5 节点概念证明实现。它已获得 MIT 许可证。

计划使用 Rust 实现。

如何运行实验性 S5-Dart 节点

  1. 请确保您使用的是 x86_64 Linux 系统
  2. 下载最新版本:https://github.com/redsolver/S5/releases
  3. 使其可执行
  4. 将此存储库中的 default_config.toml 文件复制到您的本地系统
  5. 使用 ./s5-dart-... path/to/config.toml 启动节点

功能

原始文件

原始文件是 S5 上存储的数据的基础。它们可以有任何大小,并以其自身的哈希(默认为 blake3)形式存储。为了尽可能有效地进行去重,没有添加文件名或内容类型等附加元数据。

元数据文件/CIDs

元数据文件以原始文件的形式存储,但通常非常小。它们引用一个或多个包含文件内容的原始文件,并具有附加元数据,如文件名、内容类型和引用的原始文件的特定块的哈希值,以实现可信流。

目录文件/CIDs

目录文件是特殊的元数据文件,指定了可以映射到原始文件或元数据文件的路径目录结构。它们还支持指定默认路由和 404 页面。可用于在 S5 上部署 Web 应用程序。

注册表

注册表是一个具有实时订阅的去中心化键值存储。键由一个公共 ed25519 密钥和一个 32 字节的任意数据键组成。值具有修订号,大小限制为 48 字节。对条目的所有写入都必须由作为键一部分的公钥签名。

解析器 CIDs

解析器 CIDs 只是编码为 CID 的注册表条目。解析器 CIDs 中使用的注册表条目必须具有一个空的、仅为零的数据键。它们引用另一个 CID,例如用于动态更新网站。

与 IPFS 的比较

与 IPFS 相比,S5 在下载文件方面通常会更快。主要原因是它没有最大块大小限制,这会将网络查找减少到对于几乎任何大小的文件只需要 2 次请求。

例如,一个 10 GB 的文件默认存储为一个原始块,并生成一个包含元数据(如文件名、内容类型和文件各个部分(默认 1MB)的哈希)的附加文件,以实现可信流。

另一个区别是,S5 协议从不跨节点传输文件数据,而是将交付本身外包给 HTTP 协议。这使得利用现有存储提供商高效地交付内容变得非常容易,而无需优化新协议(如 bitswap)的实现。

示例:您想下载一个 CID 为 z5W7Bf74oMS4JU4CvM6Vt3U7BfRY4rMi49MYrhtPVEe7CNLUG 的文件。首先,您的节点会检查它在本地缓存中是否有该 CID 哈希的下载 URL。如果没有,它会向所有连接的节点发送查询。另一个使用 S3 存储后端的连接节点会检查它是否在那里存储了该哈希。如果是,它会生成一个预签名的 S3 下载 URL 并将其发送回请求它的节点。此路由也适用于多个节点。一旦原始节点收到有效响应,它就会尝试直接从 S3 端点下载/流式传输文件,但仍会验证每个字节的完整性。通过这种方式,可以利用现有基础设施极高效地交付文件,同时仍不必信任过程中的任何实体。

来自节点的响应由其公钥签名,每个节点都维护其已知的其他节点的本地分数。当节点提供有效的 HTTP URL 且该 URL 与哈希匹配时,其分数会增加,否则会减少。如果多个节点提供相同的文件,则分数用于决定首先尝试哪个 URL。

由于 P2P 协议仅传输具有哈希和 HTTP URL 的轻量级请求,而不是传输完整文件数据,因此运行完整的 S5 节点非常轻量级,甚至可以在浏览器中进行。

S5 目前支持三种存储后端

  • S3(支持 S3 协议的任何云提供商,请参阅 https://s3.wiki
  • 本地文件系统(需要额外的配置才能将 HTTP 端口公开到互联网)
  • Arweave(昂贵,永久存储)
  • Sia(https://sia.tech/,计划中)

S5 目前支持一种建立节点间连接的协议

  • TCP
  • WebSocket(计划中)
  • QUIC(计划中)

与 IPFS 相比,S5 还使用了一些更现代的默认设置,例如 BLAKE3 哈希算法。这当然不是 IPFS 的设计限制,只是 S5 从头开始构建的一个不错的副作用。

GitHub

查看 Github