我正在写一个key: value
StorageMap
in substrate
。我想让它不可变,以便在不存在但存在时写入密钥:
i)如果值与存储的值相同,好的 ii)使交易无效。
我写了以下runtime
代码:
use support::{decl_module, decl_storage, dispatch::Result, StorageMap};
use system::ensure_signed;
pub trait Trait: balances::Trait {}
decl_storage! {
trait Store for Module<T: Trait> as KittyStorage {
Value: map u64 => T::AccountId;
}
}
decl_module! {
pub struct Module<T: Trait> for enum Call where origin: T::Origin {
fn set_value(origin, value: u64) -> Result {
let sender = ensure_signed(origin)?;
<Value<T>>::insert(value, sender);
Ok(())
}
}
}
官方教程讨论了以以下方式改变密钥:
/// Mutate the value under a key.
fn mutate<R, F: FnOnce(&mut Self::Query) -> R, S: Storage>(key: &K, f: F, storage: &S) -> R;
那么,如何使我的key:value
不可变?我应该自己写StorageMap
吗?如果是,我应该在哪里放置该代码?
注意:我对基材和生锈都不熟悉。