编码、开销和验证
以下列表总结了Walrus中使用的基本编码和加密技术:
-
一个擦除编码编码算法将一个blob分成若干个符号,并将其编码成符号,以便这些符号的一个子集可以用来重建blob。
-
Walrus使用高效的擦除编码,并选择,使得解码算法可以使用三分之一的符号来重建blob。
-
编码是_系统化_的,这意味着一些存储节点持有原始blob的一部分,从而允许快速随机访问读取。
-
所有编码和解码操作都是确定性的,编码器对此没有自由裁量权。
-
对于每个blob,多个符号被组合成一个切片,然后分配给一个分片。
-
存储节点管理一个或多个分片,每个blob的相应切片分布到所有存储分片。
详细的编码设置导致blob大小扩展了倍。这与分片数量和存储节点数量无关。
每个blob还与一些元数据相关联,包括一个blob ID以允许验证:
-
blob ID被计算为所有分片数据和元数据(字节大小、编码、blob哈希)集合的认证器。
Walrus对每个分片中的切片表示进行哈希处理,并将生成的哈希添加到Merkle树中。然后,Merkle树的根是用于派生系统中标识blob的blob哈希。
-
每个存储节点可以使用blob ID检查某些分片数据是否属于一个blob,使用与blob哈希(Merkle树)对应的认证结构。成功的检查意味着数据确实是由blob的编写者所预期的。
-
由于blob的编写者可能错误地编码了一个blob(无论是错误还是故意),任何从分片切片重建blob ID的方都必须检查它是否编码为正确的blob ID。在接受任何声称是特定blob ID的blob时也是如此。
此过程涉及使用擦除编码重新编码blob,并再次派生blob ID以检查blob是否匹配。这防止了格式错误的blob(错误擦除编码)在任何正确的接收者处被读取为有效的blob。
-
一组等于重建阈值的切片属于一个blob ID,这些切片要么不一致,要么导致重建不同的ID,代表了不正确的编码。这只有在编码blob的用户有故障或恶意并且错误编码时才会发生。
Walrus可以从每个切片中提取一个符号以形成不一致证明。存储节点可以删除属于不一致编码blob的切片,并在请求时返回不一致证明或链上发布的不一致证书。