neutron_sdk/interchain_queries/v047/
queries.rs

1// import all queries from v045 package
2// to make it available from v047 package (kinda proxy) since they work with Cosmos SDK 0.47 as usual
3pub use crate::interchain_queries::v045::queries::*;
4
5// But at the same time we redefine some methods from v045 with methods below to create methods
6// compatible with Cosmos SDK 0.47
7
8use crate::interchain_queries::v047::types::Delegations;
9use crate::{
10    bindings::query::NeutronQuery,
11    interchain_queries::{
12        queries::{check_query_type, get_registered_query, query_kv_result},
13        types::QueryType,
14        v047::types::{Balances, StdDelegation},
15    },
16    NeutronResult,
17};
18use cosmwasm_std::{Deps, Env};
19use schemars::JsonSchema;
20use serde::{Deserialize, Serialize};
21
22#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
23#[serde(rename_all = "snake_case")]
24pub struct BalanceResponse {
25    pub balances: Balances,
26    pub last_submitted_local_height: u64,
27}
28
29/// Returns balance of account on remote chain for particular denom
30/// * ***registered_query_id*** is an identifier of the corresponding registered interchain query
31pub fn query_balance(
32    deps: Deps<NeutronQuery>,
33    _env: Env,
34    registered_query_id: u64,
35) -> NeutronResult<BalanceResponse> {
36    let registered_query = get_registered_query(deps, registered_query_id)?;
37
38    check_query_type(registered_query.registered_query.query_type, QueryType::KV)?;
39
40    let balances: Balances = query_kv_result(deps, registered_query_id)?;
41
42    Ok(BalanceResponse {
43        last_submitted_local_height: registered_query
44            .registered_query
45            .last_submitted_result_local_height,
46        balances,
47    })
48}
49
50#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
51#[serde(rename_all = "snake_case")]
52pub struct DelegatorDelegationsResponse {
53    pub delegations: Vec<StdDelegation>,
54    pub last_submitted_local_height: u64,
55}
56
57/// Returns delegations of particular delegator on remote chain
58/// * ***registered_query_id*** is an identifier of the corresponding registered interchain query
59pub fn query_delegations(
60    deps: Deps<NeutronQuery>,
61    _env: Env,
62    registered_query_id: u64,
63) -> NeutronResult<DelegatorDelegationsResponse> {
64    let registered_query = get_registered_query(deps, registered_query_id)?;
65
66    check_query_type(registered_query.registered_query.query_type, QueryType::KV)?;
67
68    let delegations: Delegations = query_kv_result(deps, registered_query_id)?;
69
70    Ok(DelegatorDelegationsResponse {
71        delegations: delegations.delegations,
72        last_submitted_local_height: registered_query
73            .registered_query
74            .last_submitted_result_local_height,
75    })
76}