cosmos_client/client/
upgrade.rs1use crate::error::CosmosClient;
2use crate::error::CosmosClient::{ProstDecodeError, RpcError};
3use cosmos_sdk_proto::cosmos::upgrade::v1beta1::{
4 QueryAppliedPlanResponse, QueryCurrentPlanRequest, QueryCurrentPlanResponse,
5 QueryModuleVersionsRequest, QueryModuleVersionsResponse, QueryUpgradedConsensusStateRequest,
6 QueryUpgradedConsensusStateResponse,
7};
8use prost::Message;
9use std::rc::Rc;
10use tendermint::abci::Code;
11use tendermint_rpc::{Client, HttpClient};
12
13pub struct Module {
14 rpc: Rc<HttpClient>,
15}
16
17impl Module {
18 pub fn new(rpc: Rc<HttpClient>) -> Self {
19 Module { rpc }
20 }
21
22 pub async fn current_plan(&self) -> Result<QueryCurrentPlanResponse, CosmosClient> {
29 let query = QueryCurrentPlanRequest {};
30 let query = self
31 .rpc
32 .abci_query(
33 Some("/cosmos.upgrade.v1beta1.Query/CurrentPlan".to_string()),
34 query.encode_to_vec(),
35 None,
36 false,
37 )
38 .await?;
39
40 if query.code != Code::Ok {
41 return Err(RpcError(query.log));
42 }
43 QueryCurrentPlanResponse::decode(query.value.as_slice()).map_err(ProstDecodeError)
44 }
45
46 pub async fn applied_plan(
53 &self,
54 height: i64,
55 ) -> Result<QueryAppliedPlanResponse, CosmosClient> {
56 let query = QueryAppliedPlanResponse { height };
57 let query = self
58 .rpc
59 .abci_query(
60 Some("/cosmos.upgrade.v1beta1.Query/AppliedPlan".to_string()),
61 query.encode_to_vec(),
62 None,
63 false,
64 )
65 .await?;
66
67 if query.code != Code::Ok {
68 return Err(RpcError(query.log));
69 }
70 QueryAppliedPlanResponse::decode(query.value.as_slice()).map_err(ProstDecodeError)
71 }
72
73 pub async fn upgrade_consensus_state(
80 &self,
81 last_height: i64,
82 ) -> Result<QueryUpgradedConsensusStateResponse, CosmosClient> {
83 let query = QueryUpgradedConsensusStateRequest { last_height };
84 let query = self
85 .rpc
86 .abci_query(
87 Some("/cosmos.upgrade.v1beta1.Query/UpgradedConsensusState".to_string()),
88 query.encode_to_vec(),
89 None,
90 false,
91 )
92 .await?;
93
94 if query.code != Code::Ok {
95 return Err(RpcError(query.log));
96 }
97 QueryUpgradedConsensusStateResponse::decode(query.value.as_slice())
98 .map_err(ProstDecodeError)
99 }
100
101 pub async fn module_versions(
108 &self,
109 module_name: &str,
110 ) -> Result<QueryModuleVersionsResponse, CosmosClient> {
111 let query = QueryModuleVersionsRequest {
112 module_name: module_name.to_string(),
113 };
114 let query = self
115 .rpc
116 .abci_query(
117 Some("/cosmos.upgrade.v1beta1.Query/ModuleVersions".to_string()),
118 query.encode_to_vec(),
119 None,
120 false,
121 )
122 .await?;
123
124 if query.code != Code::Ok {
125 return Err(RpcError(query.log));
126 }
127 QueryModuleVersionsResponse::decode(query.value.as_slice()).map_err(ProstDecodeError)
128 }
129}