以太坊 Swarm 教程,去中心化存储入门与实践指南
以太坊作为全球领先的智能合约平台,其生态系统日益庞大,以太坊主网本身并不适合存储大量数据,因为存储成本高昂且会影响网络性能,为了解决这个问题,以太坊社区开发了 Swarm(也常被称为 Bzz),一个去中心化的存储和

什么是 Swarm
Swarm 是一个由以太坊基金会主导开发的开源项目,它构建一个分布式的存储、带宽和计算系统,它的目标是:
- 去中心化存储:将数据分割成小块,并通过加密方式存储在网络中的多个节点上,确保数据的高可用性和抗审查性。
- 内容可寻址:每个数据块都通过其 SHA3 哈希值(称为“地址”)进行唯一标识,这意味着内容本身决定了其地址,任何微小的改动都会导致地址完全不同。
- 以太坊数据层:Swarm 旨在成为以太坊的“硬盘”,存储 DApp 的前端代码、用户数据、元数据等,使得智能合约能够与这些数据进行交互。
- 经济激励:通过内置的“邮票”(Stamp)机制,使用者需要支付少量以太坊来激励节点存储和提供服务,形成自给自足的经济系统。
Swarm 的核心概念
在开始使用 Swarm 之前,了解几个核心概念非常重要:
- Manifest (清单文件):类似于传统 Web 服务器上的
index.html,它告诉 Swarm 客户端哪个文件是默认的入口点,以及如何组织多个文件,清单文件本身也是一个 JSON 文件。 - Stamp (邮票):这是你发布数据到 Swarm 时支付的费用,它包含了你想要存储的数据的引用(通常是一个
enr地址,即 Ethereum Node Record),支付后,你会收到一个收据,证明你已经为数据付费并可以开始分发。 - ENR (Ethereum Node Record):Swarm 节点的身份标识,包含了节点的网络地址和公钥等信息,用于节点间的发现和通信。
swarm-cli或swarm-uploader:与 Swarm 网络交互的命令行工具或库,用于上传、下载和管理数据。
Swarm 环境搭建与安装
最常用的 Swarm 客户端是基于 Go 语言开发的 swarm,以下是安装和启动基本 Swarm 节点的步骤:
安装 Go 环境 (如果尚未安装) Swarm 是 Go 程序,需要先安装 Go,你可以从 Go 官方网站 下载并安装适合你操作系统的版本。
安装 Swarm
你可以通过 go get 命令来安装 Swarm:
go get github.com/ethersphere/bee
安装完成后,bee 可执行文件通常会位于你的 Go 安装目录的 bin 文件夹下。
初始化并启动 Swarm 节点 打开终端或命令行工具,执行以下命令初始化节点:
bee init --configpath /path/to/your/config/dir
这会在你指定的目录下生成配置文件 config.yaml。
然后启动节点:
bee start --configpath /path/to/your/config/dir
首次启动时,节点会下载一些必要的数据,并尝试连接到其他 Swarm 节点加入网络,启动成功后,你的节点就成了 Swarm 网络中的一个存储节点。
检查节点状态 你可以通过以下命令查看节点是否正常运行以及连接情况:
bee debug info
使用 Swarm:上传与下载数据
安装 Swarm CLI 工具
为了方便上传和下载文件,我们可以使用 swarm-cli,你可以从其 GitHub 仓库 下载或按照说明安装。
上传文件
假设你有一个名为 index.html 的文件,想要上传到 Swarm:
swarm-cli up index.html
上传成功后,你会得到一个文件的哈希地址(以 0x 开头,后面跟着 64 个字符),这就是你在 Swarm 上访问这个文件的唯一标识。
下载文件 如果你有文件的哈希地址,可以使用以下命令下载:
swarm-cli down <文件哈希地址> -o output.html
这会将文件下载到当前目录,并命名为 output.html。
上传目录
Swarm 也支持上传整个目录。swarm-cli 会自动为目录生成一个清单文件(manifest)。
swarm-cli up my_directory/
同样,你会得到一个指向该目录根目录清单文件的哈希地址。
通过 HTTP 网关访问 Swarm
Swarm 提供了公共的 HTTP 网关,你可以通过浏览器直接访问 Swarm 上的内容,格式为:
https://swarm-gateways.net/bzz/<文件哈希地址>
或者使用其他网关,如 https://gateway.swarm.cloud/bzz/<文件哈希地址>。
创建简单的去中心化网站 (DWeb)
利用 Swarm,你可以轻松创建一个简单的去中心化网站:
- 准备网站文件:创建一个
index.html文件,以及可能需要的 CSS 和 JavaScript 文件。 - 上传文件:将所有网站文件上传到 Swarm,确保
index.html是你上传的根目录或指定为入口点。 - 获取哈希地址:上传完成后,你会得到
index.html或清单文件的哈希地址。 - 访问网站:通过 Swarm HTTP 网关访问这个哈希地址,你的网站就会在浏览器中显示。
Swarm 的优势与挑战
优势:
- 去中心化:数据分布在多个节点上,单点故障风险低。
- 抗审查:没有中央机构可以轻易删除或篡改你的数据。
- 与以太坊集成:天然支持与智能合约交互,为 DApp 提供强大的存储能力。
- 成本效益:相较于传统的中心化云存储,长期来看可能更具成本优势(尤其是在数据量大时)。
挑战:
- 用户体验:目前对于普通用户来说,使用门槛相对较高,需要一定的技术背景。
- 性能:数据上传和下载速度可能依赖于网络中节点的数量和连接质量。
- 数据持久性:虽然数据被复制到多个节点,但如果节点下线且数据未被足够多节点复制,仍存在数据丢失风险,激励机制需要完善以确保节点长期提供服务。
- 成熟度:相较于 IPFS 等其他去中心化存储方案,Swarm 仍在快速发展中,生态系统和工具链有待完善。
总结与展望
Swarm 作为以太坊生态系统的重要组成部分,为去中心化应用提供了不可或缺的存储解决方案,通过本教程,你应该对 Swarm 有了初步的了解,并能够尝试上传和下载文件,甚至创建一个简单的去中心化网站。
随着以太坊 2.0 的发展以及去中心化 Web(Web3)概念的普及,Swarm 有望在数据存储和内容分发领域扮演更加重要的角色,我们可以期待更友好的用户界面、更完善的工具链以及更广泛的实际应用场景,如果你对构建真正去中心化的应用感兴趣,Swarm 绝对是一个值得深入学习和探索的技术。
希望这篇教程对你有帮助!如果你在学习过程中遇到问题,可以查阅 Swarm 的 官方文档 或加入社区寻求支持。