【问题标题】:How to reset a variable in rust smart contract?如何重置 rust 智能合约中的变量?
【发布时间】:2021-03-09 01:41:42
【问题描述】:

我有一个lookupMap

pub struct App {
   update_user_ids: LookupMap<u128, u128>,
}

我想重置 update_user_ids,我该怎么做?

如果我在 #[init] pub fn new() 中将 key_prefix id "f657bf68" 与初始化 update_user_ids 中使用的相同,则以下函数不起作用。

pub fn reset (&mut self) {
        self.update_user_ids = LookupMap::new(b"f657bf68".to_vec());
    }

【问题讨论】:

    标签: nearprotocol


    【解决方案1】:

    好吧,按照设计,LookupMap 无法删除所有条目,因为它不知道密钥。您只能通过已知键插入和删除条目。如果您知道密钥,则可以循环调用self.update_user_ids.remove()。如果您打算从头开始,我建议您重新创建一个帐户以完全擦除状态;否则,请使用具有 clear() 实现的 UnorderedMapTreeMap

    【讨论】:

    • clear() 似乎不是一个好主意,因为它会循环遍历所有元素,并且元素的数量可以在 10000 中很大。docs.rs/near-sdk/2.0.0/src/near_sdk/collections/… 可以使用新的 key_prefix 代替吗?跨度>
    • 您可以使用新的前缀,但这会将旧条目留在存储中,因此您将无法取回为存储保留的余额。目前没有办法有效地擦除存储。你可以支持新经济政策来改善这种情况
    • 是的,有问题。谢谢。
    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 2021-08-28
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    相关资源
    最近更新 更多