Skip to main content
Version: 4.x

Reading Values from Storage

Reading from storage is where the fun begins!

Contract Functions

As you can see in the contract template, all of your contract functions are part of your contract module.

impl MyContract {
// Public and Private functions can go here
}

Public and Private Functions

In Rust, you can make as many implementations as you want. As a stylistic choice, we recommend breaking up your implementation definitions for your private and public functions:

impl MyContract {
/// Public function
#[ink(message)]
pub fn my_public_function(&self) {
/* --snip-- */
}

/// Private function
fn my_private_function(&self) {
/* --snip-- */
}

/* --snip-- */
}

You can also choose to split things up however is most clear for your project.

Note that all public functions must use the #[ink(message)] attribute.

Getting a Value

We already showed you how to initialize a storage value in the chapter Storing Values. Getting the value is just as simple:

impl MyContract {
#[ink(message)]
pub fn my_getter(&self) -> u32 {
self.number
}
}

In Rust, if the last expression in a function does not have a semicolon it will be the return value.