で書いてkey: value
StorageMap
い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
ですか?はいの場合、そのコードをどこに配置すればよいですか?
注:私は下地と錆の両方が初めてです。