Walrus 文件上传与读取流程详解

  • King
  • 更新于 2024-11-11 15:09
  • 阅读 247

在数据存储领域的变革浪潮中,去中心化存储成为备受瞩目的焦点。Walrus作为其中的佼佼者,以独特的架构和流程为用户提供安全高效的存储服务。本文将深入剖析Walrus文件上传与读取流程,详细解读每一个步骤,展现其精妙的设计和在保障数据安全方面的卓越能力。

引言

在当今数字化时代,数据的存储和管理方式发生了深刻的变革。去中心化存储作为一种新兴的技术,为解决传统存储方式面临的诸多问题,如数据安全性、隐私保护和单点故障等,提供了创新的解决方案。

Walrus 作为去中心化存储领域的重要代表,其独特的文件上传和读取流程体现了高度的安全性和高效性。深入了解这些流程对于理解 Walrus 系统的工作原理以及评估其在不同应用场景中的价值具有重要意义。

Walrus 系统概述

Walrus 是一个基于去中心化架构的安全 Blob 存储系统,它整合了先进的编码技术、区块链技术和经济激励模型,构建了一个可靠的数据存储环境。

其核心技术包括Red Stuff编码协议、基于区块链(如Sui)的控制平面以及相应的经济与激励机制。这些技术相互协作,使得Walrus能够在复杂的网络环境中实现高效的数据存储、恢复和访问,同时保障数据的完整性和用户的隐私。

文件上传流程

(一)客户端编码与准备阶段

1、Red Stuff编码操作

在文件上传的初始阶段,客户端承担着重要的数据处理任务。

首先,使用Red Stuff编码协议对要上传的文件(blob)进行编码。这一过程将blob分割为(f + 1)个primary slivers(纵向)和(2f + 1)个secondary slivers(横向),形成一个([f + 1, 2f + 1])的矩阵结构。这种二维编码结构是Walrus数据存储的基础,它在两个维度上对数据进行重新组织,为后续的数据存储和恢复提供了强大的支持。

在生成slivers的过程中,每个维度都有其独特的编码操作。对于列方向(primary sliver生成),对于(2f + 1)个列向量(每个列向量大小为(f + 1)),通过特定的编码操作将其扩展为(n)个符号((n = 3f + 1)),这些扩展后的列向量即作为节点的primary sliver。在行方向(secondary sliver生成),对初始的([f + 1, 2f + 1])矩阵的(f + 1)个行向量,从(2f + 1)个符号扩展为(n)个符号,生成的扩展行向量作为节点的secondary sliver。

这种编码方式使得数据在多个维度上被分散,增加了数据的冗余度。每个sliver都包含了原始数据的部分信息,并且这些信息在整个网络中以一种分布式的方式存储,大大降低了因部分节点故障而导致数据丢失的风险。

2、承诺计算与标识生成

在完成数据的编码后,客户端接着计算每个sliver的承诺。对于primary sliver,其承诺涵盖其扩展行中的所有符号,这意味着承诺值是通过对这些符号进行特定的哈希运算或其他数学运算得到的一个唯一标识。对于secondary sliver,其承诺涵盖其扩展列中的所有值,同样通过相应的计算方式生成承诺。

这些sliver承诺构成了数据完整性验证的重要依据。在此基础上,客户端创建一个包含所有sliver承诺列表的blob承诺。这个blob承诺是通过一种更为复杂的哈希算法生成的,例如基于Merkle树的结构。Merkle树是一种二叉树,其叶子节点为sliver承诺,通过层层哈希计算,最终得到根节点的哈希值,即blob承诺。

同时,客户端还会通过哈希blob承诺与元数据(如文件长度、编码类型等)生成唯一的(blobid)。这个(blobid)在整个Walrus系统中充当文件的唯一标识符,后续的所有操作都将围绕这个(blobid)展开,包括在区块链上的注册、存储节点之间的数据传输和验证等。

(二)区块链交互与资源预订阶段

1、向区块链提交交易

客户端在完成本地的数据编码和标识生成后,下一步是与区块链进行交互。客户端向区块链(如Sui)提交一个交易,这个交易包含了丰富的信息,其中(blobid)是最重要的元素之一,它用于在区块链上唯一标识要存储的文件。此外,文件大小等信息也被包含在交易中,这些信息有助于区块链了解存储需求的规模。

区块链在Walrus系统中扮演着控制平面的角色,它负责管理整个系统的资源分配和数据的元数据记录。当收到客户端的交易请求后,区块链首先会检查系统是否有足够的存储空间来容纳这个文件的编码后slivers。这涉及到对整个存储网络中各个节点的存储容量、当前负载等因素的综合评估。

2、资源预订与支付机制(如果适用)

根据Walrus的经济模型,资源的分配可能涉及到支付环节。在某些情况下,客户端可能需要支付一定的费用(以代币或其他形式)来确保获得足够的存储空间。这种支付机制是基于系统的经济激励模型设计的,它鼓励节点提供存储资源,同时也确保资源的合理利用。

支付的金额和方式可能会根据多种因素来确定,例如文件大小、存储时长、当前市场供需关系等。如果系统中有足够的空闲存储资源,客户端也可以直接利用这些资源而无需支付额外费用,但这种情况通常需要符合系统设定的一定规则和条件。

当区块链完成对交易的处理,确认有足够的资源并且客户端满足相关条件(如支付费用或符合免费存储规则)后,交易成功提交,文件在区块链上完成注册,这为后续的数据存储和管理奠定了基础。

(三)数据分发与节点存储阶段

1、通知存储节点

在区块链上的交易成功提交后,客户端开始将数据分发给存储节点。客户端将交易信息、sliver承诺、分配给各节点的primary和secondary sliver及其一致性证明发送给存储节点。这个过程涉及到复杂的网络通信和数据传输,客户端需要准确地将每个节点应接收的数据和相关验证信息发送到位。

交易信息包含了文件在区块链上的注册记录,使得存储节点能够确认该文件的合法性和存储要求。sliver承诺则为节点提供了验证数据完整性的依据,节点在接收到slivers后可以通过对比计算得到的承诺与接收到的承诺来判断数据是否在传输过程中被篡改。分配给节点的slivers是根据系统的存储策略确定的,确保数据在多个节点之间均匀分布且具有足够的冗余度。一致性证明则进一步保证了数据在传输和存储过程中的一致性和正确性。

2、节点验证与存储操作

存储节点在收到客户端发送的数据后,首先进行一系列严格的验证操作。节点会检查slivers与承诺是否一致,这涉及到对每个sliver的符号进行重新计算承诺并与接收到的承诺进行比对。同时,节点还会确认(blobid)是否已在区块链上正确注册,以防止非法数据的存储。

如果验证通过,节点将存储接收到的slivers。存储过程需要确保数据的安全性和可访问性,节点会将slivers存储在本地的存储设备中,并建立相应的索引和管理机制,以便后续在数据读取和恢复过程中能够快速定位和使用这些数据。在成功存储slivers后,节点会向客户端回复签名确认,表示已经顺利完成存储任务。

(四)写入完成与确认阶段

1、收集签名生成证书

客户端在发送数据给存储节点后,会等待来自存储节点的签名确认。这个过程是确保数据已经被足够数量的节点正确存储的关键步骤。客户端需要收集到(2f + 1)个签名确认,这个数量是根据Walrus系统的设计和数据可用性要求确定的。

当收集到足够的签名确认后,客户端构建写入证书(write certificate)。写入证书是一个重要的文件,它表明数据已经成功存储在足够数量的节点上,满足了系统对数据可用性的要求。写入证书中包含了与存储相关的关键信息,如参与存储的节点列表、存储的时间戳、数据的(blobid)等。

2、 发布证书完成上传

最后,客户端将写入证书发布到区块链上。这一操作标志着文件上传过程的正式完成。发布到区块链上的写入证书成为了数据存储的一个公开记录,其他节点可以通过查询区块链获取到文件存储的相关信息。

此时,客户端可以根据自身的策略选择是否删除本地存储的文件副本。由于数据已经安全地存储在Walrus网络中,并且有区块链和写入证书作为保障,客户端可以放心地释放本地资源。同时,其他节点在需要访问该文件时,可以通过区块链查询到文件的存储位置和相关信息,并按照规定的流程进行数据读取操作。

文件读取流程

(一)请求与获取数据阶段

1、向存储节点请求数据

当用户需要读取文件时,客户端首先向存储节点发起请求。客户端向任意存储节点请求blob的承诺和primary sliver。这个请求标志着读取流程的开始,存储节点在收到请求后,会根据自身存储的数据情况进行响应。

2、存储节点响应与数据传输

存储节点收到客户端的请求后,会查询本地存储的数据,找到与请求的(blobid)相关的blob承诺和primary sliver(如果有)。然后,存储节点将这些信息发送给客户端。由于数据在Walrus系统中是分布式存储的,客户端可能需要从多个存储节点获取数据,以获取足够数量的primary sliver用于后续的解码和重构操作。

在这个过程中,网络通信的效率和数据传输的准确性至关重要。存储节点需要确保发送的数据完整且正确,而客户端需要能够正确接收和处理来自多个节点的数据。

(二)数据验证与重构阶段

1、计算并对比承诺

客户端在收到存储节点发送的slivers后,会对数据进行一系列的处理。首先,客户端根据收到的slivers重新计算其承诺。这个计算过程与在文件上传阶段计算sliver承诺的方式相同,确保在不同阶段对数据完整性的验证标准一致。

然后,客户端将重新计算得到的承诺与最初获取的blob承诺进行对比。这一步是读取流程中的关键验证步骤,如果两者一致,说明数据在存储过程中没有被篡改,客户端可以继续进行后续的解码和重构操作。如果承诺不一致,则表明数据可能已经损坏或被恶意修改,客户端将停止读取操作,并可能采取相应的错误处理措施,如提示用户数据异常。

2、解码与输出数据

如果承诺对比通过,客户端将对收到的slivers进行解码。解码过程是Red Stuff编码的逆操作,客户端利用其内置的解码算法,根据slivers中的符号和编码信息,逐步还原出原始的blob文件。在解码完成后,客户端将重构出的文件输出给用户,完成文件的读取操作。

总结

Walrus的文件上传和读取流程是一个复杂而精妙的设计,它融合了先进的编码技术、区块链技术和分布式存储原理。

在文件上传过程中,从客户端的编码和准备,到与区块链的交互获取资源,再到数据在存储节点的分发和验证,以及最后的写入确认,每个环节都紧密相连,确保了数据的安全存储和系统的高效运行。

而文件读取流程则通过严格的数据验证和准确的解码重构操作,保证了用户能够获取到完整且正确的文件。

这种设计使得Walrus在去中心化存储领域具有显著的优势,能够满足不同用户在数据存储和访问方面的需求,为数字资产存储、数据溯源、去中心化应用分发等多种应用场景提供了可靠的支持,同时也为解决传统存储方式面临的问题提供了一种创新的思路和实践方法。

随着技术的不断发展和应用场景的进一步拓展,Walrus的文件存储和访问流程有望在去中心化存储领域发挥更加重要的作用,推动整个行业朝着更加安全、高效和去中心化的方向发展。

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
King
King
0x56af...a0dd
擅长Rust/Solidity/FunC/Move开发