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.