用途:用 HTTP 方式读写 Walrus 上的 blob,是任何语言最简单的集成路径,无需安装 SDK。写入用 HTTP PUT 发到 publisher,读取用 HTTP GET 从 aggregator 获取。
主要能力:
- 存储(publisher):PUT /v1/blobs 上传字符串或文件。查询参数包括 epochs(存储轮数,默认 1)、deletable=true(默认,可删除)、permanent=true(到期前不可删,需显式指定)、send_object_to(把 Blob 对象发给其他地址,用于无钱包上传)、reuse_resources=true(复用已有存储或 blob 对象,默认 false)。
- 读取(aggregator):GET /v1/blobs/<BLOB_ID> 按 blob ID 读取;GET /v1/blobs/by-object-id/<OBJECT_ID> 按 Sui 对象 ID 读取,并返回属性 HTTP 头(content-type 等)。支持一致性检查参数 strict_consistency_check=true 或 skip_consistency_check=true。
- 字节范围:支持 HTTP Range 头返回 206,或用 /byte-range?start=&length= 查询形式,可用于视频音频播放。
- 系统信息:GET /v1/info 返回当前 epoch、存储成本与网络参数。
概念区别:blob ID 标识内容,Sui 对象 ID 标识链上 Blob 对象,两者均可读取;按对象 ID 读取才返回属性头。存储响应为 newlyCreated 或 alreadyCertified,两者都是成功。
使用要点:聚合器只读、可加 CDN、公共聚合器无需费用与钱包并设置 CORS,浏览器可直接读取。Mainnet 没有公开无鉴权 publisher,需自建鉴权 publisher、用上传中继或直接用 TypeScript SDK;公开 publisher 端点仅 Testnet。
限制与常见问题:新 blob 默认可删除,需永久保存要显式 permanent=true;上传后立即读取可能因 CDN 缓存短暂 404,需退避重试;默认 epochs 为 1,应显式设置;按 blob ID 读取无 content-type,应改按对象 ID 读取;小 blob 有约 64MB 固定元数据开销,小文件建议用 quilts;部分 publisher 限制上传大小;503 BLOB_UNAVAILABLE 为可重试。运行自建 publisher 时不要暴露无鉴权端点,避免单一钱包并发签名。
适用场景:后端接收原始字节并经鉴权后转发存储、浏览器/移动端通过上传中继写入、读取与流式播放媒体。