Operaciones matemáticas de Cosmowasm
Explicación
En esta sección, puede ver ejemplos de un contrato CosmWasm que implementa operaciones matemáticas simples como suma, resta, multiplicación, división, módulo y exponencial.
La siguiente función de ejecución toma una enumeración de ExecuteMsg que en realidad contiene todas las funciones del contrato y las relaciona con la función que llama el usuario:
pub fn execute(
deps: DepsMut,
_env: Env,
_info: MessageInfo,
msg: ExecuteMsg,
) -> Result<Response, ContractError> {
match msg {
ExecuteMsg::Operations { a, b } => execute_operations(deps,a,b),
}
}La función de ejecución toma una enumeración de ExecuteMsg que en realidad contiene todas las funciones del contrato y las relaciona con la función que el usuario está llamando, y luego llama a la función ejecutar_operaciones:
pub fn execute_operations(deps: DepsMut, a: u128, b: u128) -> Result<Response, ContractError> {
// Checking if numbers are not zero
if a == 0 && b == 0 {
return Err(ContractError::CanNotBeZero());
}
// Addition
let addition_result = a + b;
// Subtraction
let subtraction_result = a - b;
// Multiplication
let multiplication_result = a * b;
// Division
let division_result = a / b;
// Modulo
let modulo_result = a % b;
// Exponentiation
let exponent: u32 = 3;
let exponentiation_result: u128 = a.pow(exponent);
// Create the response
let response = OperationsResponse {
addition_result,
subtraction_result,
multiplication_result,
division_result,
modulo_result,
exponentiation_result,
};
// Fetching the state
RESULT.load(deps.storage).unwrap();
// Update the state
RESULT.save(deps.storage, &response).unwrap();
let res = Response::new().add_attributes(vec![
("action", "operations"),
("a", &a.to_string()),
("b", &b.to_string()),
("addition_res", &addition_result.to_string()),
("substraction_res", &subtraction_result.to_string()),
("multiplicationn_res", &multiplication_result.to_string()),
("division_res", &division_result.to_string()),
("modulo_res", &modulo_result.to_string()),
("exponential_res", &exponentiation_result.to_string()),
]);
Ok(res)
}La función execute_operations toma dos parámetros a y b para operaciones matemáticas y almacena el resultado en la variable de estado global RESULT almacenada en state.rs:
Puede utilizar el siguiente punto final de consulta para obtener el resultado de operaciones matemáticas: .
La función de consulta anterior toma una enumeración de QueryMsg que en realidad contiene todas las funciones de consulta del contrato y las relaciona con la función que llama el usuario. En nuestro caso GetResponse. Luego llama a la función get_response:
La función get_response anterior devuelve el resultado de la operación matemática.
Ejemplo
Para utilizar operaciones matemáticas con CosmWasm, puede crear los siguientes archivos: lib.rs contract.rs msg.rs error.rs state.rs
lib.rs
contract.rs
msg.rs
error.rs
state.rs
Last updated