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§

Creates a new empty Mapping.

Insert the given value to the contract storage.

Returns the size in bytes of the pre-existing value at the specified key if any.

Get the value at key from the contract storage.

Returns None if no value exists at the given key.

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.

Get the size of a value stored at key in the contract storage.

Returns None if no value exists at the given key.

Checks if a value is stored at the given key in the contract storage.

Returns None if no value exists at the given key.

Clears the value at key from storage.

Trait Implementations§

Formats the value using the given formatter. Read more

We implement this manually because the derived implementation adds trait bounds.

Returns the “default value” for a type. Read more
Convert self to a slice and append it to the destination.
Attempt to deserialize the value from input.
Storable type with storage key inside.
The storage key that the type prefers. It can be overwritten by an auto-generated storage key.
Storage key of the type.
Returns the storage key.
Returns the static storage layout of Self. Read more
The type identifying for which type info is provided. Read more
Returns the static type identifier for Self.

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Storable type with storage key inside.
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Should always be Self
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.