Skip to content

Commit

Permalink
remake interchain queries
Browse files Browse the repository at this point in the history
  • Loading branch information
NeverHappened committed Oct 10, 2024
1 parent 1be9ae7 commit 9cc816c
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 34 deletions.
39 changes: 17 additions & 22 deletions packages/neutron-sdk/src/interchain_queries/queries.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
use crate::bindings::query::{
NeutronQuery, QueryRegisteredQueryResponse, QueryRegisteredQueryResultResponse,
};
use crate::errors::error::NeutronResult;
use crate::interchain_queries::types::{KVReconstruct, QueryType};
use crate::NeutronError;
use cosmwasm_std::Deps;
use cosmwasm_std::{Deps, StdError};
use neutron_std::types::neutron::interchainqueries::{InterchainqueriesQuerier, QueryRegisteredQueryResultResponse, QueryRegisteredQueryResponse, RegisteredQuery, QueryResult};

/// Checks **actual** query type is **expected** query type
pub fn check_query_type(actual: QueryType, expected: QueryType) -> NeutronResult<()> {
if actual != expected {
pub fn check_query_type(actual: String, expected: QueryType) -> NeutronResult<()> {
if actual != expected.to_string() {
return Err(NeutronError::InvalidQueryType {
query_type: actual.into(),
});
Expand All @@ -18,38 +16,35 @@ pub fn check_query_type(actual: QueryType, expected: QueryType) -> NeutronResult

/// Queries registered query info
pub fn get_registered_query(
deps: Deps<NeutronQuery>,
deps: Deps,
interchain_query_id: u64,
) -> NeutronResult<QueryRegisteredQueryResponse> {
let query = NeutronQuery::RegisteredInterchainQuery {
query_id: interchain_query_id,
};

let res: QueryRegisteredQueryResponse = deps.querier.query(&query.into())?;
) -> NeutronResult<RegisteredQuery> {
let querier = InterchainqueriesQuerier::new(&deps.querier);
let query_res = querier.registered_query(interchain_query_id)?;
let res= query_res.registered_query.ok_or_else(|| StdError::generic_err("no registered query"))?;
Ok(res)
}

/// Reads submitted raw KV values for Interchain Query with **query_id** from the storage and reconstructs the result
pub fn query_kv_result<T: KVReconstruct>(
deps: Deps<NeutronQuery>,
deps: Deps,
query_id: u64,
) -> NeutronResult<T> {
let registered_query_result = get_raw_interchain_query_result(deps, query_id)?;

KVReconstruct::reconstruct(&registered_query_result.result.kv_results)
KVReconstruct::reconstruct(registered_query_result.clone().kv_results.into())
}

/// Queries raw interchain query result (raw KV storage values or transactions) from Interchain Queries Module.
/// Usually it is better to implement [KVReconstruct] for your own type and then use [query_kv_result],
/// but in cases when Rust forbids to implement foreign trait [KVReconstruct] for some foreign type,
/// it is possible to use [get_raw_interchain_query_result] and reconstruct query result manually.
pub fn get_raw_interchain_query_result(
deps: Deps<NeutronQuery>,
deps: Deps,
interchain_query_id: u64,
) -> NeutronResult<QueryRegisteredQueryResultResponse> {
let interchain_query = NeutronQuery::InterchainQueryResult {
query_id: interchain_query_id,
};
let res = deps.querier.query(&interchain_query.into())?;
) -> NeutronResult<&QueryResult> {
let querier = InterchainqueriesQuerier::new(&deps.querier);
let query_res = querier.query_result(interchain_query_id.into())?;
let res = &query_res.result.ok_or_else(|| StdError::generic_err("no result in registered query"))?;

Ok(res)
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ pub struct DelegatorUnbondingDelegationsResponse {
/// Returns balance of account on remote chain for particular denom
/// * ***registered_query_id*** is an identifier of the corresponding registered interchain query
pub fn query_balance(
deps: Deps<NeutronQuery>,
deps: Deps,
_env: Env,
registered_query_id: u64,
) -> NeutronResult<BalanceResponse> {
Expand Down
17 changes: 6 additions & 11 deletions packages/neutron-sdk/src/interchain_queries/v047/queries.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ pub use crate::interchain_queries::v045::queries::*;

use crate::interchain_queries::v047::types::Delegations;
use crate::{
bindings::query::NeutronQuery,
interchain_queries::{
queries::{check_query_type, get_registered_query, query_kv_result},
types::QueryType,
Expand All @@ -29,20 +28,18 @@ pub struct BalanceResponse {
/// Returns balance of account on remote chain for particular denom
/// * ***registered_query_id*** is an identifier of the corresponding registered interchain query
pub fn query_balance(
deps: Deps<NeutronQuery>,
deps: Deps,
_env: Env,
registered_query_id: u64,
) -> NeutronResult<BalanceResponse> {
let registered_query = get_registered_query(deps, registered_query_id)?;

check_query_type(registered_query.registered_query.query_type, QueryType::KV)?;
check_query_type(registered_query.query_type, QueryType::KV)?;

let balances: Balances = query_kv_result(deps, registered_query_id)?;

Ok(BalanceResponse {
last_submitted_local_height: registered_query
.registered_query
.last_submitted_result_local_height,
last_submitted_local_height: registered_query.last_submitted_result_local_height,
balances,
})
}
Expand All @@ -57,20 +54,18 @@ pub struct DelegatorDelegationsResponse {
/// Returns delegations of particular delegator on remote chain
/// * ***registered_query_id*** is an identifier of the corresponding registered interchain query
pub fn query_delegations(
deps: Deps<NeutronQuery>,
deps: Deps,
_env: Env,
registered_query_id: u64,
) -> NeutronResult<DelegatorDelegationsResponse> {
let registered_query = get_registered_query(deps, registered_query_id)?;

check_query_type(registered_query.registered_query.query_type, QueryType::KV)?;
check_query_type(registered_query.query_type, QueryType::KV)?;

let delegations: Delegations = query_kv_result(deps, registered_query_id)?;

Ok(DelegatorDelegationsResponse {
delegations: delegations.delegations,
last_submitted_local_height: registered_query
.registered_query
.last_submitted_result_local_height,
last_submitted_local_height: registered_query.last_submitted_result_local_height,
})
}

0 comments on commit 9cc816c

Please sign in to comment.