第 1 章 Walrus 是什么
学习目标
- 用开发者视角理解 Walrus、Sui、Blob、WAL、Epoch 的关系。
- 判断一个文件上传后应该保存哪些 ID。
- 明确本书默认使用 Testnet,何时才切到 Mainnet。
前置条件
- 你能使用 macOS、Linux 或 WSL 终端。
- 你知道普通对象存储里的“上传文件、获得 URL、下载文件”流程。
- 本章不要求已经安装 Walrus。
一分钟模型
Walrus 是面向大文件和非结构化数据的去中心化存储网络。你把文件交给 Walrus,Walrus 客户端把文件编码成多个 sliver,分发到存储节点;Sui 链上对象记录这个 Blob 的所有权、生命周期和可管理状态。
上传后至少要记录两个值:
Blob ID: 内容地址,用来 read、blob-status,也可从同一文件重新计算。
Sui object ID: 链上对象 ID,用来 extend、share、attributes、burn 等管理操作。
这两个 ID 不是同一个东西。Blob ID 由内容决定,同一个文件重复上传会得到同一个 Blob ID;Sui object ID 是链上对象,重复上传或 --force 可能得到新的对象。
网络选择
本书所有命令默认使用 Testnet:
walrus info --context testnet
sui client envs
sui client active-env
常见网络含义:
| 网络 | 用途 | 成本 | 持久性预期 |
|---|---|---|---|
| Testnet | 学习、开发、调试 | 测试 SUI/WAL | 可能重置,不承诺长期保存 |
| Mainnet | 生产数据、真实用户 | 真实 SUI/WAL | 按购买的 Epoch 和网络规则保存 |
| Devnet | 预发布验证 | 测试资产 | 变化更快,不适合本书主线 |
截至 2026-05-06,本书采用的版本事实是:Mainnet mainnet-v1.47.1,Testnet testnet-v1.47.1,Devnet devnet-v1.48.0 为预发布。除非你在验证预发布功能,否则不要把 Devnet 当作稳定教程环境。
最小工作流
下面是本书后续章节反复使用的闭环:
printf 'hello walrus\n' > hello.txt
walrus store hello.txt --epochs 2 --context testnet
walrus blob-status --file hello.txt --context testnet
walrus read <BLOB_ID> --out hello.downloaded.txt --context testnet
diff hello.txt hello.downloaded.txt
store 会消耗 SUI 交易 gas 和 WAL 存储费用。Testnet 可以从 faucet 获取测试 SUI,再用 walrus get-wal --context testnet 换取测试 WAL。
输出解读
典型上传输出会包含类似字段:
Blob ID: oehkoh0352bRGNPjuwcy0nye3OLKT649K62imdNAlXg
Sui object ID: 0x1c086e216c4d35bf4c1ea493aea701260ffa5b0070622b17271e4495a030fe83
保存规则:
- 要下载或公开引用数据,保存
Blob ID。 - 要延长、设置属性、共享、销毁链上对象,保存
Sui object ID。 - 要证明某个本地文件已经在 Walrus 上,优先用
walrus blob-status --file <FILE>。
常见坑
- 把 Blob ID 传给
extend:extend需要--blob-obj-id,也就是 Sui object ID。 - 误以为
delete等于隐私删除:Walrus Blob 是公开可发现的,缓存、历史节点、别人上传的同内容副本都不受你删除命令控制。 - 用 Testnet 数据做生产承诺:Testnet 会变,长期数据请用 Mainnet。
- 忘记 Epoch:Blob 到期后不可读,过期 Blob 不能再正常 extend。
下一步
下一章安装 suiup、sui 和 walrus,并把客户端连到 Testnet。