关于 walrus-storage-costs
walrus-storage-costs 是面向 Walrus 用户的成本说明技能,介绍 WAL 存储费用、SUI gas、epoch 定价和小文件的元数据开销。它提供估算方法与优化建议,帮助规划存储预算。
主要功能
- 01说明 WAL 与 SUI 的费用组成
- 02解释编码体积和单 blob 元数据开销
- 03按存储时长估算费用
- 04介绍 dry-run 与定价信息查询
- 05提供 quilt 等成本优化方法
适用场景
- 01上传前估算数据存储成本
- 02规划 WAL 和 SUI 预算
- 03比较单独存储与 quilt 批量存储的费用
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mystenlabs/ walrus-skills --skill walrus-storage-costs安装后在 Claude Code 中输入/walrus-storage-costs确认已加载。
附带文件evals/evals.json
详细介绍
Walrus 存储成本
来源限制: 本技能中的所有信息均来自 Walrus 存储成本文档 和 Walrus 成本计算器。 扩展本技能时,只能使用这些来源。
存储定价是关于 Walrus 最常被问到的问题。成本模型包含两种代币(WAL 和 SUI)、以单个 blob 计的元数据开销(对小文件的成本影响最大),以及按 epoch 计费的存储时长。本技能将说明成本的计算方式,以及如何估算成本。
本技能中的所有模式均源自:
- https://docs.wal.app/docs/system-overview/storage-costs
- https://docs.wal.app/docs/walrus-client/storing-blobs
- https://docs.wal.app/docs/large-uploads
如果不确定当前价格,请运行 walrus info 或查看成本计算器。
相关技能
| 主题 | 技能 | 在以下情况下加载 |
|---|---|---|
| 存储 blob | walrus-cli | 使用 CLI 存储命令 |
| HTTP API | walrus-http-api | 通过 REST 存储 |
| TypeScript SDK | walrus-ts-sdk | 以编程方式估算成本 |
| Quilts | walrus-quilts | 优化多个小 blob 的成本 |
| Blob 生命周期 | walrus-blob-lifecycle | 扩展存储时长、通过删除回收 |
| 概览 | walrus-overview | 了解 Walrus 的整体架构 |
技能内容
双代币成本模型
每次存储 blob 的操作都包含两项成本:
| 代币 | 支付内容 | 收费时机 |
|---|---|---|
| WAL | Walrus 存储:在存储节点上为编码后的 blob 预留空间 | 每次存储和扩展操作 |
| SUI | Sui 区块链 Gas:在链上注册、认证和管理 blob 对象 | 每笔交易(每次存储最多 3 笔交易) |
你需要在钱包中同时持有 WAL 和 SUI 才能存储 blob。在测试网上,可通过 sui client faucet 获取 SUI,并从 Walrus 测试网水龙头获取 WAL。
WAL 成本明细
存储 blob 的 WAL 成本分为两部分:
-
存储成本 =
encoded_size × price_per_unit × epochsencoded_size= 经过擦除编码后的原始 blob 大小(约为原大小的 4.5 倍),再加上每个 blob 固定约 64 MB 的元数据price_per_unit= 每个 epoch 的编码存储单位价格(运行walrus info查看)epochs= 存储 epoch 数量
-
写入费 = 每次上传收取的一次性固定费用,与 blob 大小或 epoch 数量无关
运行 walrus info 查看当前值:
walrus info
# Shows: price per encoded storage unit, write fee, current epoch, epoch duration
单个 blob 的元数据开销
无论 blob 的实际大小如何,每个 blob 都会产生约 64 MB 的元数据开销。这些元数据属于编码存储的一部分,并计入成本计算。
| Blob 大小 | 编码后大小(约) | 元数据占成本比例 |
|---|---|---|
| 1 KB | ~64 MB | ~99.99% |
| 1 MB | ~68.5 MB | ~93% |
| 10 MB | ~109 MB | ~59% |
| 100 MB | ~514 MB | ~12% |
| 1 GB | ~4.6 GB | ~1.4% |
这就是为什么单独存储小 blob 的成本很高。 一个 1 KB 的 JSON 文档,其成本大致相当于一个 64 MB 的文件。对于大量小文件,可使用 quilts 将它们批量打包成一个存储单元,从而将元数据开销分摊到所有文件上。
SUI Gas 成本
每次存储操作最多涉及 3 笔链上 Sui 交易:
reserve_space— 获取存储资源- 注册 blob
- 认证 blob(提交可用性证书)
每笔交易都会产生 SUI Gas 费用。此外,blob 的 Sui 对象还会向 Sui 存储基金存入 SUI。删除 blob 对象时(通过 walrus delete 或 walrus burn-blobs),这笔存款中的大部分会退还。
Epoch 时长
| 网络 | Epoch 时长 |
|---|---|
| 主网 | 14 天 |
| 测试网 | 不定(比主网短) |
最长存储时长为 53 个 epoch(主网上约为 2 年)。将 epoch 换算为月数:months = epochs × 14 / 30(主网)。规划存储预算时,务必按月计算,而不是按 epoch 计算。
估算成本
成本计算器(网页)
使用 Walrus 成本计算器进行交互式估算。输入文件大小和存储时长,即可查看 WAL 成本。
手动计算
文档提供了以美元计价的两步估算方法(存储按固定美元费率定价,并以 WAL 支付,因此 WAL 数量会随 WAL 价格波动):
encoded_size_GB = 4.5 * original_size_GB + 0.064
monthly_cost_USD = encoded_size_GB * 0.023
将 600 个 10 KiB 的文件分别存储:每个文件约产生 0.064 GB 的开销,合计 38.4 GB;存储 6 MB 数据每月约需 0.88 美元。将这些文件存储为一个 quilt:4.5 × 0.006 + 0.064 ≈ 0.09 GB,每月约需 0.002 美元。文档中的实测对比记录显示,在这种情况下可节省 409 倍,文件大小为 1 MiB 时可节省 13 倍;文件大小超过约 1 MiB 后,存储成本的节省会迅速减少。
CLI 试运行#### CLI 试运行
# Estimate cost without actually uploading
walrus store --dry-run myfile.dat --epochs 10
返回编码后的大小和估算成本,不会提交交易或花费代币。
CLI 信息
# Show current pricing parameters
walrus info --json
返回每个编码存储单位的价格、写入费用、当前 epoch 和最多可提前的 epoch 数。
TypeScript SDK
WalrusClient 提供 storageCost 方法;使用前请在 TypeDocs 中查看其签名。
成本优化策略
| 策略 | 节省幅度 | 适用场景 |
|---|---|---|
| 小文件使用 quilts | 对许多小型 blob,最高可节省 99% | 存储许多每个小于 10 MB 的文件 |
| 重复使用存储资源 | 无需购买新的存储资源 | 钱包中有合适资源时,CLI 会自动执行 |
| 删除已过期的 blob 对象 | 收回 SUI 存储基金存款 | blob 过期后,使用 walrus burn-blobs --all-expired 销毁它们 |
| 延长存储时长,而非重新上传 | 避免写入费用和编码成本 | blob 需要存储更长时间时 |
| 用于频繁增删的存储池(预览版) | 每次存储只需支付写入费用 | 仅适用于 Rust SDK / Move;在稳定的存储占用下持续写入和删除,并使用统一的到期时间 |
| 仅在需要时使用永久 blob | 可删除的 blob 可以收回存储资源 | 默认情况下 blob 可删除,因此你可以收回存储资源 |
规则
- 大批量上传前务必先检查
walrus info。 定价可能会在不同 epoch 之间发生变化。 - 批量存储小文件时使用 quilts。 每个 blob 64 MB 的开销会让单独存储小文件的效率非常低。
- 同时为 WAL 和 SUI 预留预算。 WAL 用于支付存储费用,SUI 用于支付 gas。任一代币不足都会导致操作无法进行。
- 按月而非按 epoch 估算。 epoch 时长可能有所不同。使用
walrus info检查当前时长。 - 使用
burn-blobs --all-expired收回 SUI。 过期的 blob 对象仍会占用存储基金中的 SUI。销毁它们即可收回这些存款。 - 生产环境上传前先使用
--dry-run。 在提交代币前核实成本,尤其是上传大型数据集时。
常见错误
- 不明白为什么一个很小的 JSON blob 和一个 64 MB 的文件成本相同。 每个 blob 约 64 MB 的元数据开销对小文件影响很大。请改用 quilts。
- 忘记写入费用。 每次上传都会收取写入费用,与大小或 epoch 数无关。该费用独立于按单位计算的存储成本。
- 混淆 WAL 和 SUI 成本。 WAL = 在 Walrus 节点上的存储费用。SUI = Sui 交易的 gas 费用。它们是用途不同的两种代币。
- 未考虑纠删码开销。 编码后的大小约为原始 blob 大小的 4.5 倍,再加上固定的元数据。成本根据编码后的大小计算,而非原始大小。
- 误以为存储期限没有限制。 最长为 53 个 epoch(约 2 年)。如果数据需要保留更久,请使用
walrus extend规划续期。 - 未使用
--dry-run估算成本。 此标志会显示成本,但不会花费任何代币。大批量上传前务必使用。 - 为相同内容重复付费存储。 如果已存在内容相同且剩余存储期限足够的永久 blob,CLI 会自动跳过重新上传(返回
alreadyCertified)。这是预期行为,可以节省费用。