Lee y escribe

Explicación

Contrato inteligente que explica los conceptos básicos de lectura y escritura al estado en un contrato inteligente. El estado del contrato inteligente es el almacenamiento asignado para el contrato inteligente en la cadena de bloques. El estado generalmente se define en un archivo separado state.rs que importa y usa elementos y mapas y otros tipos de cw_storage_plus.

Estado

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
pub struct State {
    pub count: i32,
    pub owner: Addr,
}
pub const STATE: Item<State> = Item::new("state");
// Map is another type of storage that stores key-value pairs in storage.
pub const NAMES: Map<String, String> = Map::new("names");

Cada variable constante en el estado se almacena como un par clave-valor en la cadena de bloques y, por lo tanto, se puede leer o modificar.

Escribiendo al estado

// contract.rs
pub fn write(deps: DepsMut) -> Result<Response, ContractError> {
        /* This execute endpoint writes a new owner to state. */
        
        // First we need to load the current state from the blockchain from `deps.storage` as mutable.
        let mut state = STATE.load(deps.storage)?;
        state.count = 5;
        
        // Save the new state with the changed variables in storage.
        STATE.save(deps.storage, &state)?;
        // Now let us add a new key-value pair to the `NAMES` map in storage. 
        NAMES.save(deps.storage, "Georges".to_string(), &"Chouchani".to_string())?;
        
        Ok(Response::new().add_attribute("action", "write"))
    }
Structs can be stored as an Item in storage and key-value pairs are stored as Map.
Reading from State
Reading from Structs or constants
// contract.rs
pub fn count(deps: Deps) -> StdResult<GetCountResponse> {
        // Loads the state from storage and checks the count variable.
        let state = STATE.load(deps.storage)?;
        Ok(GetCountResponse { count: state.count })
    }

La constante se carga desde el almacenamiento y se puede acceder directamente a las variables dentro de la estructura (si es así).

Leer mapas

Los mapas generalmente se leen proporcionando una clave y verificando si existe un valor. También se pueden iterar claves y valores.

Ejemplo

Para leer y escribir en estado con CosmWasm, puede crear los siguientes archivos: lib.rs contract.rs msg.rs error.rs state.rs helpers.rs

lib.rs

contract.rs

error.rs

state.rs

helpers.rs

Last updated