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
80pub 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
101pub 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
122pub 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
143pub 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
164pub 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
185pub 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
206pub 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
227pub 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
248pub 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}