为什么在使用 decl_storage 时在 StorageMap 中使用 blake2_256 以外的散列算法

Luk*_*oen 2 hash rust substrate

它说decl_storage!是一个“程序宏”,用于存储数据以使其在后续块中可用。

它说,如果用户能够设置密钥对,那么我们就不能信任密钥对,因此我们必须使用诸如 blake2_256 之类的加密哈希器来防止“存储中的其他值受到损害”。

为什么你会使用散列算法($hash)不是默认blake2_256StorageMap(即,为什么会有人使用twox,而不是默认的blake2_256)?

另外,为什么说它只是为了防止“存储中的其他值受到损害”?不是blake2_256也用来防止密钥对本身被泄露吗?

apo*_*iak 5

blake2_256散列器是一个不透明的加密散列器这将产生两项费用/有两个缺点:

  • 计算成本高
  • 不允许迭代存储

因此,对于您关心它们的情况,有一些替代散列器可以改进这些:

  • twox散列器是廉价的计算,所以你可以,如果blockchain控件使用它的输入StorageMap,例如,使用一个计数器来索引它的时候。
  • blake2_128_concat散列器串接输入到散列器到所述哈希的端部,以允许遍历地图的键(和值)。

在更新的文档中查找更多信息decl_storage