neutron_sdk/interchain_queries/v045/
queries.rs

1use crate::{
2    bindings::query::NeutronQuery,
3    interchain_queries::{
4        queries::{check_query_type, get_registered_query, query_kv_result},
5        types::QueryType,
6        v045::types::{
7            Balances, Delegations, FeePool, GovernmentProposal, GovernmentProposalVotes,
8            SigningInfo, StakingValidator, StdDelegation, TotalSupply, UnbondingDelegations,
9        },
10    },
11    NeutronResult,
12};
13use cosmwasm_std::{Deps, Env};
14use schemars::JsonSchema;
15use serde::{Deserialize, Serialize};
16
17#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
18#[serde(rename_all = "snake_case")]
19pub struct BalanceResponse {
20    pub balances: Balances,
21    pub last_submitted_local_height: u64,
22}
23
24#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
25#[serde(rename_all = "snake_case")]
26pub struct TotalSupplyResponse {
27    pub supply: TotalSupply,
28    pub last_submitted_local_height: u64,
29}
30
31#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
32#[serde(rename_all = "snake_case")]
33pub struct FeePoolResponse {
34    pub pool: FeePool,
35    pub last_submitted_local_height: u64,
36}
37
38#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
39#[serde(rename_all = "snake_case")]
40pub struct ValidatorResponse {
41    pub validator: StakingValidator,
42    pub last_submitted_local_height: u64,
43}
44
45#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
46#[serde(rename_all = "snake_case")]
47pub struct ValidatorSigningInfoResponse {
48    pub signing_infos: SigningInfo,
49    pub last_submitted_local_height: u64,
50}
51
52#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
53#[serde(rename_all = "snake_case")]
54pub struct ProposalResponse {
55    pub proposals: GovernmentProposal,
56    pub last_submitted_local_height: u64,
57}
58
59#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
60#[serde(rename_all = "snake_case")]
61pub struct ProposalVotesResponse {
62    pub votes: GovernmentProposalVotes,
63    pub last_submitted_local_height: u64,
64}
65
66#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
67#[serde(rename_all = "snake_case")]
68pub struct DelegatorDelegationsResponse {
69    pub delegations: Vec<StdDelegation>,
70    pub last_submitted_local_height: u64,
71}
72
73#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
74#[serde(rename_all = "snake_case")]
75pub struct DelegatorUnbondingDelegationsResponse {
76    pub unbonding_delegations: UnbondingDelegations,
77    pub last_submitted_local_height: u64,
78}
79
80/// Returns balance of account on remote chain for particular denom
81/// * ***registered_query_id*** is an identifier of the corresponding registered interchain query
82pub fn query_balance(
83    deps: Deps<NeutronQuery>,
84    _env: Env,
85    registered_query_id: u64,
86) -> NeutronResult<BalanceResponse> {
87    let registered_query = get_registered_query(deps, registered_query_id)?;
88
89    check_query_type(registered_query.registered_query.query_type, QueryType::KV)?;
90
91    let balances: Balances = query_kv_result(deps, registered_query_id)?;
92
93    Ok(BalanceResponse {
94        last_submitted_local_height: registered_query
95            .registered_query
96            .last_submitted_result_local_height,
97        balances,
98    })
99}
100
101/// Returns bank total supply on remote chain for particular denom
102/// * ***registered_query_id*** is an identifier of the corresponding registered interchain query
103pub fn query_bank_total(
104    deps: Deps<NeutronQuery>,
105    _env: Env,
106    registered_query_id: u64,
107) -> NeutronResult<TotalSupplyResponse> {
108    let registered_query = get_registered_query(deps, registered_query_id)?;
109
110    check_query_type(registered_query.registered_query.query_type, QueryType::KV)?;
111
112    let total_supply: TotalSupply = query_kv_result(deps, registered_query_id)?;
113
114    Ok(TotalSupplyResponse {
115        last_submitted_local_height: registered_query
116            .registered_query
117            .last_submitted_result_local_height,
118        supply: total_supply,
119    })
120}
121
122/// Returns distribution fee pool on remote chain
123/// * ***registered_query_id*** is an identifier of the corresponding registered interchain query
124pub fn query_distribution_fee_pool(
125    deps: Deps<NeutronQuery>,
126    _env: Env,
127    registered_query_id: u64,
128) -> NeutronResult<FeePoolResponse> {
129    let registered_query = get_registered_query(deps, registered_query_id)?;
130
131    check_query_type(registered_query.registered_query.query_type, QueryType::KV)?;
132
133    let fee_pool: FeePool = query_kv_result(deps, registered_query_id)?;
134
135    Ok(FeePoolResponse {
136        last_submitted_local_height: registered_query
137            .registered_query
138            .last_submitted_result_local_height,
139        pool: fee_pool,
140    })
141}
142
143/// Returns staking validator from remote chain
144/// * ***registered_query_id*** is an identifier of the corresponding registered interchain query
145pub fn query_staking_validators(
146    deps: Deps<NeutronQuery>,
147    _env: Env,
148    registered_query_id: u64,
149) -> NeutronResult<ValidatorResponse> {
150    let registered_query = get_registered_query(deps, registered_query_id)?;
151
152    check_query_type(registered_query.registered_query.query_type, QueryType::KV)?;
153
154    let validator: StakingValidator = query_kv_result(deps, registered_query_id)?;
155
156    Ok(ValidatorResponse {
157        last_submitted_local_height: registered_query
158            .registered_query
159            .last_submitted_result_local_height,
160        validator,
161    })
162}
163
164/// Returns validators signing infos from remote chain
165/// * ***registered_query_id*** is an identifier of the corresponding registered interchain query
166pub fn query_validators_signing_infos(
167    deps: Deps<NeutronQuery>,
168    _env: Env,
169    registered_query_id: u64,
170) -> NeutronResult<ValidatorSigningInfoResponse> {
171    let registered_query = get_registered_query(deps, registered_query_id)?;
172
173    check_query_type(registered_query.registered_query.query_type, QueryType::KV)?;
174
175    let signing_infos: SigningInfo = query_kv_result(deps, registered_query_id)?;
176
177    Ok(ValidatorSigningInfoResponse {
178        last_submitted_local_height: registered_query
179            .registered_query
180            .last_submitted_result_local_height,
181        signing_infos,
182    })
183}
184
185/// Returns list of government proposals on the remote chain
186/// * ***registered_query_id*** is an identifier of the corresponding registered interchain query
187pub fn query_government_proposals(
188    deps: Deps<NeutronQuery>,
189    _env: Env,
190    registered_query_id: u64,
191) -> NeutronResult<ProposalResponse> {
192    let registered_query = get_registered_query(deps, registered_query_id)?;
193
194    check_query_type(registered_query.registered_query.query_type, QueryType::KV)?;
195
196    let proposals: GovernmentProposal = query_kv_result(deps, registered_query_id)?;
197
198    Ok(ProposalResponse {
199        last_submitted_local_height: registered_query
200            .registered_query
201            .last_submitted_result_local_height,
202        proposals,
203    })
204}
205
206/// Returns list of government proposal votes on the remote chain
207/// * ***registered_query_id*** is an identifier of the corresponding registered interchain query
208pub fn query_government_proposal_votes(
209    deps: Deps<NeutronQuery>,
210    _env: Env,
211    registered_query_id: u64,
212) -> NeutronResult<ProposalVotesResponse> {
213    let registered_query = get_registered_query(deps, registered_query_id)?;
214
215    check_query_type(registered_query.registered_query.query_type, QueryType::KV)?;
216
217    let votes: GovernmentProposalVotes = query_kv_result(deps, registered_query_id)?;
218
219    Ok(ProposalVotesResponse {
220        last_submitted_local_height: registered_query
221            .registered_query
222            .last_submitted_result_local_height,
223        votes,
224    })
225}
226
227/// Returns delegations of particular delegator on remote chain
228/// * ***registered_query_id*** is an identifier of the corresponding registered interchain query
229pub fn query_delegations(
230    deps: Deps<NeutronQuery>,
231    _env: Env,
232    registered_query_id: u64,
233) -> NeutronResult<DelegatorDelegationsResponse> {
234    let registered_query = get_registered_query(deps, registered_query_id)?;
235
236    check_query_type(registered_query.registered_query.query_type, QueryType::KV)?;
237
238    let delegations: Delegations = query_kv_result(deps, registered_query_id)?;
239
240    Ok(DelegatorDelegationsResponse {
241        delegations: delegations.delegations,
242        last_submitted_local_height: registered_query
243            .registered_query
244            .last_submitted_result_local_height,
245    })
246}
247
248/// Returns list of unbonding delegations of particular delegator on remote chain
249/// * ***registered_query_id*** is an identifier of the corresponding registered interchain query
250pub fn query_unbonding_delegations(
251    deps: Deps<NeutronQuery>,
252    _env: Env,
253    registered_query_id: u64,
254) -> NeutronResult<DelegatorUnbondingDelegationsResponse> {
255    let registered_query = get_registered_query(deps, registered_query_id)?;
256
257    check_query_type(registered_query.registered_query.query_type, QueryType::KV)?;
258
259    let unbonding_delegations: UnbondingDelegations = query_kv_result(deps, registered_query_id)?;
260
261    Ok(DelegatorUnbondingDelegationsResponse {
262        unbonding_delegations,
263        last_submitted_local_height: registered_query
264            .registered_query
265            .last_submitted_result_local_height,
266    })
267}