Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第 6 章 管理 Blob 生命周期

学习目标

  • extend 延长 Blob 存储时间。
  • delete 删除 deletable Blob。
  • 理解 burn-blobsshare、共享 Blob 资助和属性命令。

前置条件

  • 已有一个普通 Blob 的 BLOB_IDBLOB_OBJECT_ID
  • 当前钱包拥有该 Blob 对象。
  • 本章命令默认 Testnet,但仍可能改变链上对象状态,先读完再执行。

延长 Blob

extend 使用 Sui object ID,不使用 Blob ID:

walrus extend \
  --blob-obj-id "$BLOB_OBJECT_ID" \
  --epochs-extended 3 \
  --context testnet

延长后检查:

walrus blob-status --blob-id "$BLOB_ID" --context testnet

共享 Blob 延长时加 --shared

walrus extend \
  --blob-obj-id <SHARED_BLOB_OBJECT_ID> \
  --epochs-extended 3 \
  --shared \
  --context testnet

删除 Blob

只有 deletable Blob 才能提前删除。命令会询问确认:

walrus delete --blob-id "$BLOB_ID" --context testnet

脚本化时显式确认:

walrus delete --blob-id "$BLOB_ID" --yes --context testnet

也可以按文件或对象删除:

walrus delete --file files/hello.txt --context testnet
walrus delete --object-id "$BLOB_OBJECT_ID" --context testnet

删除后再次查询:

walrus blob-status --blob-id "$BLOB_ID" --context testnet

注意:删除不会清除缓存、历史节点、别人已经下载的副本,也不会删除别人上传的同内容 Blob。

Burn Blob 对象

burn-blobs 会销毁当前钱包拥有的 Blob 对应 Sui 对象,不删除 Walrus 数据,也不退还存储。Burn 后你会失去对该对象的控制。

walrus burn-blobs --object-ids "$BLOB_OBJECT_ID" --context testnet

批量 burn 前先谨慎列对象,不要对生产钱包运行不理解的批处理。官方还支持按条件 burn:

walrus burn-blobs --all-expired --context testnet

--all 会 burn 当前钱包拥有的所有 Blob 对象,除非你正在清理专用测试钱包,否则不要使用。

Share Blob

共享 Blob 是包装普通 Blob 的共享 Sui 对象,任何人都可以为它继续付费延长。共享 Blob 只能包含 permanent Blob,不能提前删除。

从已有 permanent Blob 创建共享对象:

walrus share --blob-obj-id "$BLOB_OBJECT_ID" --context testnet

上传时直接共享:

walrus store files/hello.txt \
  --epochs 2 \
  --permanent \
  --share \
  --context testnet

创建时资助共享 Blob:

walrus share \
  --blob-obj-id "$BLOB_OBJECT_ID" \
  --amount <AMOUNT_IN_WAL_OR_FROST_AS_CLI_EXPECTS> \
  --context testnet

资助已有共享 Blob:

walrus fund-shared-blob \
  --blob-obj-id <SHARED_BLOB_OBJECT_ID> \
  --amount <AMOUNT_IN_WAL_OR_FROST_AS_CLI_EXPECTS> \
  --context testnet

不同版本对金额单位和格式的帮助文本可能更细,执行前用:

walrus share --help
walrus fund-shared-blob --help

设置和读取属性

属性是挂在 Blob Sui 对象上的 key-value 元数据。设置:

walrus set-blob-attribute "$BLOB_OBJECT_ID" \
  --attr "content-type" "text/plain" \
  --attr "cache-control" "public, max-age=31536000" \
  --context testnet

读取:

walrus get-blob-attribute "$BLOB_OBJECT_ID" --context testnet

删除指定 key:

walrus remove-blob-attribute-fields "$BLOB_OBJECT_ID" \
  --keys "cache-control" \
  --context testnet

删除全部属性:

walrus remove-blob-attribute "$BLOB_OBJECT_ID" --context testnet

输出解读

  • extend 成功后,blob-status 的 end epoch 应增加。
  • delete 成功后,该对象对应的 deletable 存储资源会回收给钱包复用。
  • burn-blobs 成功后,sui client object <BLOB_OBJECT_ID> 不应再显示可用对象。
  • get-blob-attribute 应显示刚设置的 key-value。

常见坑

  • 用 Blob ID 执行 extendshare、属性命令:这些命令要 Sui object ID。
  • 对 permanent Blob 执行 delete:permanent 到期前不可提前删除。
  • Burn 当成 Delete:Burn 只销毁链上对象,不删除 Walrus 数据。
  • Share 普通 deletable Blob:共享 Blob 要求 permanent。
  • 属性不是访问控制;不要把 secret 写进属性。

下一步

下一章学习 Quilt,把大量小文件打包成一个 Walrus 存储单元,并按 identifier 或 tag 读取其中部分文件。