Este tutorial lo guía a través de la obtención de precios de Oracle en un entorno WasmVM en Minitia utilizando la consulta Stargate. Siguiendo este tutorial, los desarrolladores pueden entender cómo integrar y recuperar datos financieros en tiempo real dentro de sus contratos inteligentes en la cadena de bloques Minitia.
Implementación de contrato de muestra
Utilizando el repositorio wasm-slinky-query , puede obtener precios de Oracle a través de un contrato CosmWasm.
En esta sección, proporcionaremos un contrato de ejemplo y mostraremos cómo implementarlo para que pueda llamar a Stargate Query o implementarlo directamente en su contrato.
Obtenga todos los pares de divisas
Función para recuperar todos los pares de divisas disponibles en Oracle.
fn get_all_currency_pairs(&self, deps: Deps, _env: Env) -> StdResult<GetAllCurrencyPairsResponse> {
let request = GetAllCurrencyPairsRequest {
special_fields: ::protobuf::SpecialFields::new()
};
let bytes = request.write_to_bytes().unwrap();
let data = Binary::from(bytes);
let request = QueryRequest::<Empty>::Stargate{path: "/slinky.oracle.v1.Query/GetAllCurrencyPairs".to_string(), data};
let res: GetAllCurrencyPairsResponse = deps.querier.query(&request)?;
Ok(res)
}
#[derive(Clone, Debug, PartialEq, serde::Deserialize, serde::Serialize)]
#[allow(non_snake_case)]
pub struct CurrencyPair {
pub Base: String,
pub Quote: String,
}
Obtener precio
Función para obtener el precio de un par de divisas específico. pair_idestá en un formato de {Base}/{Quote}.
Función para obtener precios de múltiples pares de divisas.
fn get_prices(&self, deps: Deps, _env: Env, pair_ids: Vec<String>) -> StdResult<GetPricesResponse> {
let request = GetPricesRequest {
currency_pair_ids: pair_ids,
special_fields: ::protobuf::SpecialFields::new()
};
let bytes = request.write_to_bytes().unwrap();
let data = Binary::from(bytes);
let request = QueryRequest::Stargate{path: "/slinky.oracle.v1.Query/GetPrices".to_string(), data};
let raw_res: GetPricesResponseRaw = deps.querier.query(&request)?;
let res = GetPricesResponse {
prices: raw_res.prices.into_iter().map(|raw| convert_raw_price_response(&raw)).collect()
};
Ok(res)
}
#[derive(Clone, Debug, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct GetPricesResponse {
pub prices: Vec<GetPriceResponse>
}
Conclusión
Este contrato proporciona una base para integrar datos de Oracle en tiempo real en sus aplicaciones blockchain, aprovechando los oráculos basados en Cosmos dentro de un contexto WasmVM. Es adecuado para aplicaciones financieras que requieren acceso a precios de divisas actualizados y puede ampliarse o modificarse para adaptarse a requisitos específicos o funcionalidades adicionales.