关于 walrus-overview
walrus-overview 是介绍 Walrus 的指南技能,涵盖其去中心化二进制数据存储架构、术语和工具选择,并将具体任务引导至相应技能。
主要功能
- 01介绍 Walrus 架构与术语
- 02提供工具选择指引
- 03导向专门任务技能
- 04解释 Blob ID 与生命周期
适用场景
- 01为应用选择 Walrus 接口
- 02了解 Blob ID 和存储期限
- 03查找上传或读取数据的方法
- 04寻找成本、安全或故障排查指南
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mystenlabs/ walrus-skills --skill walrus-overview安装后在 Claude Code 中输入/walrus-overview确认已加载。
附带文件evals/evals.json
详细介绍
Walrus 概览
来源限制: 本技能中的所有信息均来自 Walrus 文档和 Walrus 白皮书。 扩展本技能时,只能使用这些来源。
Walrus 是构建于 Sui 区块链之上的去中心化存储协议。它使用纠删码,将任意二进制数据(“blob”)存储在由独立存储节点组成的网络中。Sui 智能合约负责管理 blob 注册、认证、支付和元数据。
本技能是了解 Walrus 的入口,涵盖其架构、核心术语,以及如何根据使用场景选择合适的工具。若要了解特定工具的用法,请加载对应技能。
相关技能
| 主题 | 技能 | 在以下情况下加载 |
|---|---|---|
| CLI | walrus-cli | 使用 walrus 二进制文件 |
| HTTP API | walrus-http-api | 通过 REST 存储/读取 |
| TypeScript SDK | walrus-ts-sdk | 通过 TypeScript 进行编程访问 |
| Move 集成 | walrus-move-integration | 在 Move 合约中封装 blob |
| 存储成本 | walrus-storage-costs | 定价、估算、成本优化 |
| Blob 生命周期 | walrus-blob-lifecycle | 延长、删除、共享 blob |
| Sites | walrus-sites | 部署静态网站 |
| Quilts | walrus-quilts | 批量处理许多小型 blob |
| 保密性 | walrus-data-security | 存储前加密;Walrus 保证可用性和完整性,但不保证保密性 |
| 故障排查 | walrus-troubleshooting | 常见错误及修复方法 |
路由指南
| 任务 | 加载 |
|---|---|
| “什么是 Walrus?”/“它如何工作?” | 下方的技能内容 |
| “我应该使用哪个工具?” | 下方的决策树 |
| “什么是 blob / blob ID / object ID?” | 下方的术语说明 |
| 存储文件 | walrus-cli 或 walrus-http-api 或 walrus-ts-sdk |
| 估算成本 | walrus-storage-costs |
| 部署网站 | walrus-sites |
| 加密数据 | walrus-data-security |
| 修复错误 | walrus-troubleshooting |
技能内容
什么是 Walrus?
Walrus 是一种去中心化 blob 存储协议。你上传文件后,Walrus 会将其编码为片段,并分发到各个独立存储节点;Sui 区块链则会跟踪其所有权和可用性。这样一来,即使节点发生故障,存储仍可持续运行,不存在单点控制,并且能提供数据未遭篡改的加密证明。
主要特性:
- 默认公开。 任何拥有 blob ID 的人都可以读取所有 blob。如果需要隐私,请在上传前加密(参见
walrus-data-security)。 - 基于内容寻址。 相同的文件内容始终会生成相同的 blob ID。
- 有时限。 存储期限固定,以 epoch 为单位(最长约 2 年)。若要延长保存时间,必须延长 blob 的存储期限或重新上传。
- 容错。 即使多达 2/3 的存储节点发生故障,数据仍可用。
三层架构
-
客户端层。 你的代码(CLI、SDK 或 HTTP 请求)对 blob 进行编码,将片段分发到存储节点,并与 Sui 交互以完成注册和认证。
-
存储节点层。 独立运营方运行存储节点,保存经过纠删码编码的 blob 片段(“sliver”)。每个节点持有一个或多个分片。节点会验证 sliver、签署回执,并参与 epoch 转换。主网上有 60 多家运营方运行节点。
-
Sui 区块链层。 Sui 上的智能合约负责管理支付(WAL 代币)、存储资源分配、分片与节点的分配关系、blob 注册/认证以及元数据。区块链是协调层,而非数据层。
存储流程
- 客户端使用 RedStuff 纠删码对数据块进行编码,生成分布在所有分片上的碎片(存储开销约为 4.5 倍)。
- 客户端在 Sui 上注册数据块,并支付 WAL 作为存储费用、支付 SUI 作为 Gas 费用。
- 碎片并行发送到存储节点。每个节点都会验证并签署回执。
- 收到 2/3 节点的确认后,将签名聚合为可用性证书并提交到 Sui。
- **可用性时间点(PoA)**标记 Walrus 开始保证数据块在整个存储期限内可用的时间。
读取流程
- 客户端向存储节点请求碎片。
- 收集到超过 1/3 节点的碎片后,即可重建原始数据块。
- 或者,由聚合器代你完成这些操作,并通过 HTTP 提供数据块。
核心术语
| 术语 | 定义 |
|---|---|
| 数据块 | 存储在 Walrus 上的任意二进制数据(文件、图像、JSON、视频等)。最大约 13.6 GiB。 |
| 数据块 ID | 用于标识数据块内容的 URL 安全 Base64 字符串。按内容寻址:相同内容 = 相同 ID。用于读取。 |
| Sui 对象 ID | 用于标识链上 Blob Sui 对象的 0x... 十六进制字符串。每次上传都会不同,即使内容相同也是如此。用于生命周期操作(延长、删除、共享)。 |
| 纪元 | 一个时间段。主网上为 14 天。存储期限以纪元为单位计算。 |
| 碎片 | 经过纠删码编码的数据块中的一个片段,存储在单个分片上。 |
| 分片 | 存储空间的一个分区,每个纪元分配给一个存储节点。 |
| 发布器 | 接收数据块数据(PUT)的 HTTP 服务,使用其自行注资的钱包处理编码、分发和链上注册。Walrus 不会在主网上运行公开且无需身份验证的发布器,也无此计划;请自行运行并置于身份验证机制之后。公开的测试网发布器已存在。 |
| 聚合器 | 通过从存储节点获取碎片来读取数据块(GET)的 HTTP 服务。两个网络上都有许多可免费使用的公开聚合器。 |
| 上传中继 | 代表带宽受限的客户端(例如浏览器)处理编码和碎片分发的第三方服务。可能会收取小费。 |
| WAL | Walrus 代币,用于支付存储费用。 |
| SUI | Sui 代币,用于支付链上 Gas 费用。 |
| 可用性时间点(PoA) | 可用性证书发布到链上的时刻;此后 Walrus 会保证数据块可用。 |
| 可删除数据块 | 所有者可以在到期前删除的数据块(默认类型)。 |
| 永久数据块 | 即使是上传者,也无法在到期前删除的数据块。 |
| Quilt | 包含多个数据块的单个存储单元,可减少每个数据块的开销。 |
| 共享数据块 | 封装在 Sui 共享对象中的 Blob,任何人都可以为其充值并延长其期限。Walrus 合约提供 SharedBlob 作为参考实现;开发者也可以创建自定义共享封装。 |
| 存储池 | 预览功能:一笔预付存储预留供多个数据块共享,因此每次存储只需支付写入费用,池中的所有数据块会同时到期。仅支持 Rust SDK 和 Move;CLI、HTTP API 和 TypeScript SDK 暂不支持。 |
数据块 ID 与 Sui 对象 ID
这是新用户最常混淆的问题:
| 数据块 ID | Sui 对象 ID | |
|---|---|---|
| 格式 | URL 安全 Base64(例如 M4hsZGQ1oCk...) | 带 0x 前缀的十六进制字符串(例如 0xe91eee8c...) |
| 派生自 | 数据块内容(按内容寻址) | Sui 交易(每次上传都唯一) |
| 相同内容上传两次? | 数据块 ID 相同 | 对象 ID 不同 |
| 用途 | 读取数据块内容 | 生命周期操作(延长、删除、共享、销毁) |
| 获取位置 | 存储响应(blobId 字段) | 存储响应(blobObject.id 字段) |
决策树:使用哪种工具
| 你想要…… | 使用 | 技能 |
|---|---|---|
| 从终端上传文件 | walrus store CLI | walrus-cli |
| 在 CI/CD 流水线中编写上传脚本 | walrus json CLI(JSON 模式) | walrus-cli |
| 通过 HTTP 从任意语言存储/读取数据 | Publisher/aggregator REST API | walrus-http-api |
| 构建 TypeScript/JavaScript 应用 | @mysten/walrus SDK | walrus-ts-sdk |
| 从浏览器上传 | TypeScript SDK + 上传中继 | walrus-ts-sdk |
| 在 Move 合约中引用 blob | Walrus Move 依赖项 | walrus-move-integration |
| 部署静态网站 | site-builder CLI | walrus-sites |
| 以低成本存储大量小文件 | Quilts(CLI 或 HTTP) | walrus-quilts |
| 存储敏感/私有数据 | 在客户端加密(例如使用 Seal),然后存储 | walrus-data-security |
| 让用户上传而无需持有 SUI 或 WAL | 后端 publisher(赞助式、无需钱包)、上传中继,或搭配后端签名者的 SDK | walrus-http-api |
| 在依赖某个 blob 之前,确认它已持久存储 | walrus blob-status / getBlobObject | walrus-blob-lifecycle |
Walrus 与传统存储
| Walrus | AWS S3 / Cloud Storage | |
|---|---|---|
| 控制权 | 没有单一运营方控制数据 | 服务提供商控制一切 |
| 信任模型 | 加密验证 | 信任平台 |
| 容错能力 | 可承受 2/3 节点故障 | 服务提供商 SLA |
| 隐私 | 默认所有数据均为公开 | 默认私有 |
| 成本模型 | WAL + SUI 代币,按 epoch 计费 | 美元,按月计费 |
| 时长 | 每次购买最长约 2 年,可续期 | 无限期 |
| 结构 | 扁平 blob 存储(无目录) | 目录/存储桶 |
| 可验证性 | 加密 blob ID、链上证书 | 无 |
Walrus 最适合需要抗审查、可验证性、去中心化可用性或可编程访问控制的场景。它并非所有云存储的即插即用替代品,而只替代对象/blob 存储部分。
选择服务
根据你实际面临的限制进行选择:
- 调用方读取 blob:使用 aggregator。
- 调用方无法持有 SUI 或 WAL:使用 publisher;在 Mainnet 上运行时,请运行并验证你自己的 publisher。
- 调用方持有钱包,但运行环境是浏览器或移动设备:使用上传中继。
- 调用方在服务端运行并持有有资金的钱包:通过 TypeScript SDK 写入,它会直接与存储节点通信。
规则
- 所有 blob 均为公开数据。 如需隐私保护,请在上传前加密。
- 存储有时限。 请规划续期。最长为 53 个 epoch(主网约 2 年)。
- 你需要 WAL 和 SUI。 WAL 支付存储费用,SUI 支付 gas 费用。
- 没有公开的主网 publisher。 请使用上传中继、TypeScript SDK、CLI,或运行自己的 publisher。
- 单独存储小 blob 成本较高。 批量存储小文件时请使用 quilts。
- Blob ID 不等于 object ID。 前者是内容哈希(用于读取),后者是链上对象(用于管理)。请勿混淆。