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