Walrus 为数据存储带来可编程性
本文将详述 Walrus 上的 blob 存储从写入、读取、存储到管理是如何处理。
要点总结
- Walrus 是下一代去中心化存储协议,旨在突破传统中心化云存储的局限,如高昂成本、单点故障、审查和隐私风险等,同时相较于其他去中心化存储系统也做出了诸多创新,尤其是在可编程性与性能上的提升。
- “blob” 即 Binary Large Object(二进制大型对象),可用于存储传统上难以处理的非结构化数据。blob 存储系统针对非结构化数据进行了优化,以实现高持久性、可用性和可扩展性。
- 在 Walrus 上,blob 和存储资源可以表示为对象,使其能够立即作为资源在 Sui 上的 MoveVM 智能合约中使用。作为一项核心创新,Walrus 对数据和存储空间的代币化使开发者能够自动续订、构建以数据为中心的去中心化应用程序,并利用可访问的链上数据进行创新。
- Walrus 上 blob 的生命周期(写入、存储、读取和管理)已针对去中心化和高弹性进行了优化。此过程使用 Sui 作为元数据的安全协调层,并发布链上可用性证明 (Proof-of-Availability ,PoA) 证书,确保 blob 成功存储。
- 对于开发者而言,Walrus 是跨链的,他们可以使用一系列开发者工具和 SDK 从 Solana 和以太坊等其他区块链生态导入数据。开发者可以浏览精选的工具和基础设施项目列表,立即开始使用 Walrus 进行构建。
Walrus 是一款新一代去中心化存储协议,通过高性能、高韧性和低成本的设计,解决了中心化云存储和现有去中心化存储系统的诸多局限。作为一套二进制大型对象(blob)存储协议,Walrus 允许开发者存储、读取、管理和编程操作大型数据与多媒体文件,如视频、图像和 PDF 等,同时其去中心化架构确保了数据的安全性、可用性和可扩展性。
Walrus 的核心创新之一在于将数据和存储容量作为可编程的链上资源进行管理。一个 blob 在 Walrus 上的完整生命周期——从初始注册与空间获取,到编码分发、节点存储再到链上生成可用性证明(PoA)证书——均通过与 Sui 的交互来完成。Sui 作为安全控制平面,使 Walrus 在高效安全的 blob 数据存储与读取方面保持专业性。
这种集成打造出一个强大的可编程数据平台。blob 和存储资源可以表示为对象,在 Sui 的 MoveVM 智能合约中即刻作为资源使用。这项创新将数据存储从单一的服务工具转变为可编程资产,使开发者能够:
- 将存储空间视为可拥有、可转移、可交易的资产,并通过智能合约操作
- 自动化存储管理,例如设置周期性自动续期
- 构建全新的数据驱动型应用,并实现链上与链下数据的动态交互
除了依托 Sui 作为控制平面,Walrus 本身对开发者而言是可兼容任何区块链。开发者可借助各种工具和 SDK,将来自 Solana、Ethereum 等其他区块链的数据接入 Walrus 进行存储,并可结合自己偏好的开发环境与智能合约语言,打造个性化的去中心化数据栈。开发者还可探索 Walrus 生态中不断扩展的集成服务,例如 Seal,为 Walrus 的 blob 存储带来去中心化加密与机密管理功能。
**🌟 各种工具和 SDK:**https://github.com/MystenLabs/awesome-walrus
1. 了解 blob 存储
在数据领域,“blob” 是 Binary Large Object(大型二进制对象)的缩写,用于存储二进制数据(例如包含不可打印字符或任意位模式的数据)。在 blob 存储中,每条数据以“对象”的形式存在,包含数据本身、元数据以及唯一标识符。此类系统通常专为处理非结构化数据的高耐久性、高可用性和可扩展性而设计。
与需要固定模式(如表)或半结构化数据格式(如 JSON)的结构化数据系统不同,blob 存储不强制使用固定的组织格式。相反,blob 通常被视为字节集合,这使得它们适用于存储各种数据类型,即使是传统上难以容纳的非结构化数据,例如 Word 文档、图像或音频和视频文件。blob 的适应性进一步扩展到典型的结构化和非结构化数据之外,并扩展到特殊用途,包括区块链数据可用性、零知识证明、加密制品,甚至应用程序源代码。
互联网上非结构化数字信息的海量激增,推动了对 blob 存储日益增长的需求。blob 存储为存储非结构化数据提供了关键优势,例如可扩展性、效率和可访问性。与此同时,对 blob 存储的需求也推动了大规模中心化 blob 存储解决方案的广泛采用——这些解决方案通常由 Amazon S3 等云服务提供商提供——这使得互联网数据容易受到中心化中断和检索失败的影响。
对更高数据主权和弹性的渴望是去中心化 blob 存储的主要驱动力。作为一种去中心化 blob 存储协议,Walrus 可以在信任最小化、抗审查的框架内提供 blob 存储,从而解决中心化控制的固有局限性,例如单点故障和数据被删除的可能性。
2. 客户端负责协调数据流
客户端是用户或应用程序与 Walrus 网络交互的主要接口。客户端软件负责通过与存储数据分片的存储节点以及处理关键元数据和存储合约方面的 Sui 进行通信来启动 blob 生命周期。
除了核心的客户端-节点-Sui 交互之外,Walrus 还可以与更广泛的服务集成,以增强数据的可访问性和性能。发布者或应用程序可以利用内容分发网络 (Content Delivery Networks,CDN) 或缓存层,它们与 Walrus 和客户端协同工作,提供读/写服务并将数据发布到网络。
在 Walrus 上,blob 的生命周期由客户端软件管理,并在 Sui 上验证。除了此生命周期之外,进一步的基础设施支持 Walrus 的实际效用和性能。
了解 blob 的基本生命周期(由客户端管理,并在 Sui 上验证)有助于更深入地理解 Walrus 的核心价值和可编程性。但需要注意的是,Walrus 的实际效用和性能可以通过周边基础设施得到增强,而所有这些最终都依赖于 Walrus 协议提供的核心保障。
3. blob 的生命周期
Walrus 协议中 blob 的生命周期是一个与 Sui 集成的结构化流程。虽然 Walrus 协议专注于高效安全地存储和检索 blob 数据,但它与 Sui 协同工作,作为其安全控制平面。Sui 管理 Walrus 的元数据、可用性证明,并实现存储数据的可编程性。
blob 的生命周期大致可分为四个主要阶段:写入、存储/维护、读取/检索和管理。
1 .第一阶段:写入 blob
将新数据引入 Walrus 的过程由客户端软件协调,并与 Walrus 的去中心化存储节点委员会和 Sui 协调。
存储节点负责 blob 数据的物理存储。但是,它们并不直接存储整个 blob。相反,blob 被编码成更小、冗余的碎片,称为“分片”。委员会中的每个存储节点都保存着来自各个 blob 的这些分片的集合。
在 Sui 上获取空间:
- 客户端软件通过与公共 Sui Walrus 合约交互来启动该过程,以获取“存储资源”,即在规定时间内预留一定数量的存储空间。这些存储资源在 Sui 上以对象的形式表示,这使得存储资源可以通过智能合约访问,并使构建者能够将存储空间视为可编程、可拥有、可转让和可交易的东西。
- 客户端提交一系列交易来保护此存储资源并注册 blob,提供 blob 的大小并注册其内容的承诺哈希。
使用 RedStuff 编码并生成分片:
- 一旦存储资源得到保障,客户端软件就会使用 Walrus 的 RedStuff 算法(一项基于高级纠删码的关键技术创新)对 blob 进行编码。
- 此过程将原始 blob 转换为一组主分片和次分片,从而引入必要的冗余,以确保容错能力和高效恢复。
分发到存储节点:
- 然后,客户端将这些生成的分片对分发到 Walrus 委员会中当前活跃的存储节点。每个节点都会收到该 blob 的唯一主分片和次分片对。
获取并发布可用性证明 (PoA) 证书:
- 分发分片后,客户端会监听来自存储节点的确认。每个确认都是来自存储节点的签名消息,确认已收到并接受其分配的分片。
- 客户端必须从基准 2/3 法定节点(此法定节点数在协议层定义,基于网络的拜占庭容错性)收集这些确认。签名确认的集合构成“写入证书”。
- 然后,客户端在 Sui 上发布此写入证书。此链上发布将作为该 blob 的官方可用性证明 (PoA) 证书,以不可篡改的方式记录该 blob 已成功存储,并表明参与存储节点有合约义务在存储资源指定的期限内维护这些分片。一旦 PoA 在 Sui 上得到完全确认,此过程即正式完成。
2 第二阶段:存储和维护 blob
建立 PoA 证书后,blob 的责任将转移到 Walrus 存储网络。
存储节点职责:
- 每个确认 blob 分片的存储节点都有义务维护其可用性。这包括确保分片可检索,并在 blob 编码数据的其他部分丢失或对等节点需要重建其自身的分片时,使用 RedStuff 的自愈功能参与恢复过程。
- 每个存储节点被分配存储的分片数量与其从代币持有者那里委托的权益数量成正比。存储节点被分配存储的分片越多,其存储数据的费用就越多。委托人将根据其质押的 WAL 比例获得一定比例的存储费用。
周期转换和委员会重组:
- 活跃存储节点委员会在每次周期转换时,如果其权益超过或低于保持活跃委员会所需的权益量,委员会就会发生变化。
- 该协议包含一个多阶段周期转换机制,用于平稳管理这些转换,确保即使个别节点加入或退出网络活跃委员会,所有存储的 blob 仍然持续可用。
3 读取和检索 blob
当客户端软件需要访问存储在 Walrus 上的 blob 时,将执行以下步骤。
客户端请求和元数据检索:
- 客户端使用其唯一的 blob ID 发起 blob 请求。第一步是从 Sui 检索 blob 的元数据。元数据作为 blob 的 Sui 对象的一部分存储,包含重要信息,例如 blob 每个分片的承诺(哈希值)。
从存储节点获取分片:
- 获得分片承诺后,客户端软件会向委员会中的存储节点请求实际的数据分片。
- 客户端会从多个节点收集响应,并根据元数据中对应的承诺哈希值验证收到的每个分片,以确保数据的完整性。
- 客户端会等待,直到达到 1/3 的正确辅助分片法定人数。与写入所需的 2/3 节点法定人数相比,较低的读取法定人数使 Walrus 上的读取操作极具弹性。即使最多三分之一的存储节点不可用,所有情况下都可以恢复 blob;即使最多三分之二的存储节点不可用,同步完成后也可以恢复 blob。
使用 RedStuff 重建 blob:
- 一旦客户端软件收到所需数量的有效分片,它就会使用 RedStuff 解码算法重建原始 blob。 RedStuff 检查是否已满足足够的法定人数来创建分片。
- 作为最后的验证步骤,客户端通常会重新编码重建的 blob,并计算其 blob ID 哈希值。如果重新计算的 ID 与原始请求的 blob ID 匹配,则认为该 blob 一致且有效。否则,将标记不一致。
4 管理存储的 blob
blob 存储完成后,可以续订或删除其生命周期。
blob 续订和付款(延长存储):
- 用户可以通过支付所需存储时间的存储费用来延长 blob 的存储期限,最长可达系统定义的最长期限(目前为两年)。
- 该交易会更新 Sui 上关联的存储资源对象,从而延长节点存储数据的义务。
- 这允许通过定期续订实现无限期的存储生命周期,续订可以通过智能合约进行编程。
删除 blob/解除关联:
- 可以删除代表已存储 blob 的 Sui 对象。虽然数据存储的哈希值不可变,但从功能上来说,可以通过解除 blob ID 与其底层 Sui 存储资源对象的关联来实现 blob 的删除。
- 一旦解除关联,存储资源将变为空闲,并且该存储空间可以与新的 blob 重新关联或在二级市场上交易。
- 如果客户端上传了编码不一致的分片(由一定数量的节点在链上证明),网络可能会拒绝提供该 blob 的分片,从而有效地将该 blob 的数据视为不可访问或“已删除”。
4. 开启 Walrus blob 之旅
Walrus 提供了一种去中心化的传统云存储替代方案,能够为大规模 blob 提供高可用性和完整性。它还改进了去中心化的存储方式,引入了可编程性,增强了经济激励机制,降低了成本,为动态数据提供了灵活性,并提供了一个通用的 blob 存储系统。
将 Walrus 存储的 blob 表示为 Sui 上的对象,使开发者能够使用 Move 智能合约以新颖的方式与其数据进行交互和管理,例如自动化 blob 生命周期管理、开发链上和链下数据之间的动态交互以及允许链上数据验证。
Walrus 上的 blob 生命周期是这些优势的核心,它确保流程的每一步都针对去中心化、弹性、可用性和灵活性进行了优化。
了解 Walrus 并查看 Walrus 文档,立即开始使用 Walrus 进行构建!探索 Awesome Walrus 代码库,获取 Walrus 生态中精选的开发者工具和基础设施项目列表。
**🌟 Walrus 文档:**https://docs.wal.app/