基本架构和安全假设
Walrus架构中的关键角色如下:
-
用户通过客户端希望存储和读取由blob ID标识的blob。
这些角色在写入和非尽力而为的读取时准备支付服务费用。用户还希望向第三方证明blob的可用性,而无需发送或接收完整的blob。
用户可能会以各种方式进行恶意操作:他们可能不想支付服务费用,证明不可用的blob的可用性,未经授权修改/删除blob,试图耗尽存储节点的资源,等等。
-
存储节点在存储纪元内持有一个或多个分片。
每个blob都被擦除编码成多个切片。每个存储的blob的切片成为所有分片的一部分。在任何存储纪元中的一个分片都与一个存储节点相关联,该节点实际存储该分片的所有切片并准备提供服务。
Sui智能合约控制在存储纪元内将分片分配给存储节点,Walrus假设每个存储纪元内超过2/3的分片由正确的存储节点管理。这意味着Walrus必须容忍多达1/3的分片由拜占庭存储节点管理(大约1/3的存储节点是拜占庭节点),在每个存储纪元内和跨存储纪元。
-
所有客户端和存储节点都运行一个区块链客户端(特别是在Sui上),并通过区块链智能合约调解支付、资源(空间)、分片到存储节点的映射和元数据。用户与区块链交互以获取存储资源并上传存储的blob的证书。存储节点监听区块链事件以协调其操作。
Walrus支持任何数量的可选基础设施角色,这些角色可以在无需许可的情况下操作:
-
聚合器是从切片重建blob并通过传统的web2技术(如HTTP)将其提供给用户的客户端。它们是可选的,因为最终用户可以直接重建blob或运行本地聚合器以通过本地的web2技术执行Walrus读取。
-
缓存是具有额外缓存功能的聚合器,以减少延迟和减轻存储节点的负载。这种缓存基础设施还可以充当CDN,分摊多个请求的blob重建成本,连接更好,等等。客户端始终可以验证从这些基础设施读取的数据是否正确。
-
发布者是使用web2技术帮助最终用户存储blob的客户端,使用更少的带宽和自定义逻辑。
实际上,他们通过传统的web2协议(如HTTP)接收要发布的blob,并代表最终用户运行Walrus存储协议。这包括将blob编码成切片,将切片分发到存储节点,收集存储节点签名并将其聚合成证书,以及所有其他链上操作。
它们是可选的,因为用户可以直接与Sui和存储节点交互以存储blob。最终用户始终可以通过检查链上与blob的**可用性点**相关的事件来验证发布者是否正确履行了职责,然后执行读取以查看Walrus是否返回blob,或对blob进行编码并将结果与证书中的blob ID进行比较。
聚合器、发布者和最终用户不被视为系统的可信组件,它们可能会任意偏离协议。然而,Walrus的一些安全属性仅适用于使用诚实中介(缓存和发布者)的诚实最终用户。Walrus为最终用户提供了一种审计缓存和发布者正确操作的方法。