Struct ink_storage::Lazy
source · pub struct Lazy<V, KeyType: StorageKey = AutoKey> { /* private fields */ }
Expand description
A simple wrapper around a type to store it in a separate storage cell under its own storage key.
If you want to update the value, first you need to get
it, update the
value, and then call set
with the new value.
Important
The wrapper requires its own pre-defined storage key in order to determine where it stores
value. 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.
Note
If the contract has two or more Lazy
with the same storage key, modifying the value of one
of them will modify others.
This is an example of how you can do this:
use ink::storage::{traits::ManualKey, Lazy};
#[ink(storage)]
#[derive(Default)]
pub struct MyContract {
owner: Lazy<AccountId>,
balance: Lazy<Balance, ManualKey<123>>,
}
impl MyContract {
#[ink(constructor)]
pub fn new() -> Self {
let mut instance = Self::default();
let caller = Self::env().caller();
instance.owner.set(&caller);
instance.balance.set(&123456);
instance
}
}
Implementations§
source§impl<V, KeyType> Lazy<V, KeyType>where
KeyType: StorageKey,
impl<V, KeyType> Lazy<V, KeyType>where
KeyType: StorageKey,
source§impl<V, KeyType> Lazy<V, KeyType>where
V: Storable,
KeyType: StorageKey,
impl<V, KeyType> Lazy<V, KeyType>where
V: Storable,
KeyType: StorageKey,
source§impl<V, KeyType> Lazy<V, KeyType>where
V: Storable + Default,
KeyType: StorageKey,
impl<V, KeyType> Lazy<V, KeyType>where
V: Storable + Default,
KeyType: StorageKey,
sourcepub fn get_or_default(&self) -> V
pub fn get_or_default(&self) -> V
Reads the value
from the contract storage.
Returns the default value for the storage type if no value
exists.
Trait Implementations§
source§impl<V, KeyType> Debug for Lazy<V, KeyType>where
KeyType: StorageKey,
impl<V, KeyType> Debug for Lazy<V, KeyType>where
KeyType: StorageKey,
source§impl<V, KeyType> Default for Lazy<V, KeyType>where
KeyType: StorageKey,
impl<V, KeyType> Default for Lazy<V, KeyType>where
KeyType: StorageKey,
We implement this manually because the derived implementation adds trait bounds.