作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 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
关于rust - 为什么要在 Near 协议(protocol) Unordered_Map 中散列键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65248816/
我是一名优秀的程序员,十分优秀!