gpt4 book ai didi

rust - 为什么要在 Near 协议(protocol) Unordered_Map 中散列键?

转载 作者:行者123 更新时间:2023-12-03 11:34:55 24 4
gpt4 key购买 nike

在 Near NFT 示例中,为什么 account_gives_access 中的键是UnorderedMap 散列?
https://github.com/near-examples/NFT/blame/master/contracts/rust/src/lib.rs

pub struct NonFungibleTokenBasic {
pub token_to_account: UnorderedMap<TokenId, AccountId>,
pub account_gives_access: UnorderedMap<AccountIdHash, UnorderedSet<AccountIdHash>>,
pub owner_id: AccountId,
}

最佳答案

UnorderedMap类型使用特里。攻击者可以通过以下方式使 trie 失衡
反复将键推到特里,插入一侧的深度
尝试深入。这会降低对下面名称的 trie 查找的性能
攻击者。
缓解攻击的方法是存储 key 的哈希值。哈希将是
平均分布在可能的值中。攻击者仍然可以执行
攻击,但生成特定的散列很难,所以一些协议(protocol)说。
另一个缓解攻击的方法是使用 LookupMap ,它使用 AVL
树,它会自动重新平衡其树。
这次袭击没有显着威胁。攻击者能做的最糟糕的事情是
通过重复支付存储成本来惩罚小范围的关键值
将极其有限的键值范围推到更远的位置。因此,大概
不值得支付散列 key 的成本。
但是,对于存储大量键的树,散列键或 LookupMap , 可能仍然是
值得考虑,因为很可能会导致不平衡的尝试。
回顾一下,我们回顾了以下之间的成本比较:

  • 在存储和检索到 UnorderedMap 之前对每个 key 进行哈希处理
  • 允许上述“攻击”
  • 使用 LookupMap而不是 UnorderedMap

  • 感谢@MikePurvis 的解释。

    关于rust - 为什么要在 Near 协议(protocol) Unordered_Map 中散列键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65248816/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com