Struct ink_storage::Mapping
source · pub struct Mapping<K, V: Packed, KeyType: StorageKey = AutoKey> { /* private fields */ }Expand description
A mapping of key-value pairs directly into contract storage.
Important
The mapping requires its own pre-defined storage key where to store values. By default,
the is automatically calculated using AutoKey during compilation.
However, anyone can specify a storage key using ManualKey.
Specifying the storage key can be helpful for upgradeable contracts or you want to be resistant
to future changes of storage key calculation strategy.
This is an example of how you can do this:
use ink::storage::{traits::ManualKey, Mapping};
#[ink(storage)]
#[derive(Default)]
pub struct MyContract {
balances: Mapping<AccountId, Balance, ManualKey<123>>,
}
impl MyContract {
#[ink(constructor)]
pub fn new() -> Self {
let mut instance = Self::default();
let caller = Self::env().caller();
let value: Balance = Default::default();
instance.balances.insert(&caller, &value);
instance
}
}More usage examples can be found in the ink! examples.
Implementations§
source§impl<K, V, KeyType> Mapping<K, V, KeyType>where
V: Packed,
KeyType: StorageKey,
impl<K, V, KeyType> Mapping<K, V, KeyType>where V: Packed, KeyType: StorageKey,
source§impl<K, V, KeyType> Mapping<K, V, KeyType>where
K: Encode,
V: Packed,
KeyType: StorageKey,
impl<K, V, KeyType> Mapping<K, V, KeyType>where K: Encode, V: Packed, KeyType: StorageKey,
sourcepub fn insert<Q, R>(&mut self, key: Q, value: &R) -> Option<u32>where
Q: EncodeLike<K>,
R: Storable + EncodeLike<V>,
pub fn insert<Q, R>(&mut self, key: Q, value: &R) -> Option<u32>where Q: EncodeLike<K>, R: Storable + EncodeLike<V>,
Insert the given value to the contract storage.
Returns the size in bytes of the pre-existing value at the specified key if any.
sourcepub fn get<Q>(&self, key: Q) -> Option<V>where
Q: EncodeLike<K>,
pub fn get<Q>(&self, key: Q) -> Option<V>where Q: EncodeLike<K>,
Get the value at key from the contract storage.
Returns None if no value exists at the given key.
sourcepub fn take<Q>(&self, key: Q) -> Option<V>where
Q: EncodeLike<K>,
pub fn take<Q>(&self, key: Q) -> Option<V>where Q: EncodeLike<K>,
Removes the value at key, returning the previous value at key from storage.
Returns None if no value exists at the given key.
WARNING: this method uses the unstable interface,
which is unsafe and normally is not available on production chains.
sourcepub fn size<Q>(&self, key: Q) -> Option<u32>where
Q: EncodeLike<K>,
pub fn size<Q>(&self, key: Q) -> Option<u32>where Q: EncodeLike<K>,
Get the size of a value stored at key in the contract storage.
Returns None if no value exists at the given key.
sourcepub fn contains<Q>(&self, key: Q) -> boolwhere
Q: EncodeLike<K>,
pub fn contains<Q>(&self, key: Q) -> boolwhere Q: EncodeLike<K>,
Checks if a value is stored at the given key in the contract storage.
Returns None if no value exists at the given key.
sourcepub fn remove<Q>(&self, key: Q)where
Q: EncodeLike<K>,
pub fn remove<Q>(&self, key: Q)where Q: EncodeLike<K>,
Clears the value at key from storage.
Trait Implementations§
source§impl<K, V, KeyType> Default for Mapping<K, V, KeyType>where
V: Packed,
KeyType: StorageKey,
impl<K, V, KeyType> Default for Mapping<K, V, KeyType>where V: Packed, KeyType: StorageKey,
We implement this manually because the derived implementation adds trait bounds.