Saltar al contenido principal

Usar almacenamiento persistente en un contrato

El almacenamiento persistente puede ser muy útil para las entradas del ledger que no son comunes entre cada usuario de la instancia del contrato, pero que no son adecuadas para ser temporales (los saldos de usuario, por ejemplo). En esta guía, asumiremos que queremos almacenar un número aleatorio para un usuario y guardarlo en el almacenamiento persistente del contrato como si fuera su número favorito.

#[contracttype]
pub enum DataKey {
Favorite(Address),
}

#[contract]
pub struct FavoriteContract;

#[contractimpl]
impl FavoriteContract {
// This function generates, stores, and returns a random number for the user
pub fn generate_fave(env: Env, user: Address) -> u64 {
let key = DataKey::Favorite(user);
let fave: u64 = env.prng().gen();
env.storage().persistent().set(&key, &fave);
fave
}

// This function retrieves and returns the random number for the user
pub fn get_fave(env: Env, user: Address) -> u64 {
let key = DataKey::Favorite(user);
if let Some(fave) = env.storage().persistent().get(&key) {
fave
} else {
0
}
}
}