0

で書いてkey: value StorageMapsubstrateます。キーが存在しない場合でも存在する場合はキーが書き込まれるように、不変にしたい:

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ですか?はいの場合、そのコードをどこに配置すればよいですか?

注:私は下地と錆の両方が初めてです。

4

1 に答える 1