Respuestas y atributos en Cosmwasm
Explicación
Respuestas
Una respuesta es el punto final de un punto final de Cosmwasm (por ejemplo, creación de instancias y ejecución) y tiene varios usos. Es responsable de devolver los metadatos cuando se llama a un determinado punto final. Una respuesta contiene atributos que son pares clave-valor que se adjuntan cuando se ejecuta un mensaje y que se puede consultar. Activa eventos que luego se pueden consultar en un Tendermint o en un nivel bajo. Puede contener mensajes que el contrato debe ejecutar cuando se complete la función. Puede devolver datos al usuario, lo cual es importante en las consultas.
Atributos
Los atributos son metadatos que se utilizan para registrar información sobre un determinado punto final para ayudar con el filtrado y la indexación de datos. El atributo de método normalmente se agrega para representar que se ha ejecutado una instanciación en el contrato y se puede usar para filtrar el mensaje de instanciación.
#[cfg_attr(not(feature = "library"), entry_point)]
pub fn instantiate(
deps: DepsMut,
_env: Env,
info: MessageInfo,
msg: InstantiateMsg,
) -> Result<Response, ContractError> {
let state = State {
count: msg.count,
owner: info.sender.clone(),
};
set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?;
STATE.save(deps.storage, &state)?;
Ok(Response::new()
.add_attribute("method", "instantiate")
.add_attribute("owner", info.sender)
.add_attribute("count", msg.count.to_string()))
}Mensajes
Las respuestas pueden contener mensajes que el contrato ejecuta después de que todo el código dentro de una función se completa con éxito. Estos mensajes son sincrónicos y el mensaje es parte de la transacción misma. Si la transacción o el mensaje no se ejecuta, toda la ejecución falla y se revierte. De manera similar al ejemplo de Enviar tokens, el mensaje podría ser cualquier CosmosMsg que incluya mensajes bancarios (envío de fondos nativos), mensajes de Stake o mensajes Wasm (creación de instancias y ejecución).
Submensajes
Se puede utilizar un submensaje en lugar de un mensaje cuando se espera una respuesta como devolución de llamada al llamar a una determinada función en otro contrato o cualquier otro mensaje. Un submensaje es asincrónico, lo que significa que incluso si el mensaje falla en el contrato del destinatario, toda la transacción no falla, pero se podría enviar una respuesta para manejar el error respectivamente. Esto es extremadamente importante en los casos de uso de IBC donde, si el paquete es rechazado, no deberíamos querer que toda la transacción falle, sino solo obtener una respuesta de reconocimiento de falla del otro contrato.
Ejemplo
Para manejar respuestas 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