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
}
}
}
Guías en esta categoría:
📄️ Cómo elegir el tipo de almacenamiento adecuado para tu caso de uso
Esta guía te lleva a elegir el tipo de almacenamiento más adecuado para tu caso de uso y cómo implementarlo
📄️ Usar almacenamiento de instancia en un contrato
El almacenamiento de instancia tiene un TTL de archivo que está vinculado a la instancia del contrato en sí
📄️ Usar almacenamiento persistente en un contrato
El almacenamiento persistente puede ser útil para las entradas del ledger que no son comunes entre cada usuario de la instancia del contrato
📄️ Usar almacenamiento temporal en un contrato
El almacenamiento temporal es útil para un contrato para almacenar datos que pueden volverse irrelevantes o desactualizados rápidamente