1mod query;
2
3use {
10 self::query::AppQueryServer,
11 crate::PenumbraHost,
12 anyhow::Context,
13 cnidarium::{
14 proto::v1::query_service_server::QueryServiceServer as StorageQueryServiceServer,
15 rpc::Server as StorageServer,
16 },
17 ibc_proto::{
18 cosmos::bank::v1beta1::query_server::QueryServer as TransferQueryServer,
19 ibc::{
20 applications::transfer::v1::query_server::QueryServer as BankQueryServer,
21 core::{
22 channel::v1::query_server::QueryServer as ChannelQueryServer,
23 client::v1::query_server::QueryServer as ClientQueryServer,
24 connection::v1::query_server::QueryServer as ConnectionQueryServer,
25 },
26 },
27 },
28 penumbra_sdk_auction::component::rpc::Server as AuctionServer,
29 penumbra_sdk_community_pool::component::rpc::Server as CommunityPoolServer,
30 penumbra_sdk_compact_block::component::rpc::Server as CompactBlockServer,
31 penumbra_sdk_dex::component::rpc::Server as DexServer,
32 penumbra_sdk_fee::component::rpc::Server as FeeServer,
33 penumbra_sdk_funding::component::rpc::Server as FundingServer,
34 penumbra_sdk_governance::component::rpc::Server as GovernanceServer,
35 penumbra_sdk_proto::{
36 core::{
37 app::v1::query_service_server::QueryServiceServer as AppQueryServiceServer,
38 component::{
39 auction::v1::query_service_server::QueryServiceServer as AuctionQueryServiceServer,
40 community_pool::v1::query_service_server::QueryServiceServer as CommunityPoolQueryServiceServer,
41 compact_block::v1::query_service_server::QueryServiceServer as CompactBlockQueryServiceServer,
42 dex::v1::{
43 query_service_server::QueryServiceServer as DexQueryServiceServer,
44 simulation_service_server::SimulationServiceServer,
45 },
46 fee::v1::query_service_server::QueryServiceServer as FeeQueryServiceServer,
47 funding::v1::funding_service_server::FundingServiceServer as FundingQueryServiceServer,
48 governance::v1::query_service_server::QueryServiceServer as GovernanceQueryServiceServer,
49 sct::v1::query_service_server::QueryServiceServer as SctQueryServiceServer,
50 shielded_pool::v1::query_service_server::QueryServiceServer as ShieldedPoolQueryServiceServer,
51 stake::v1::query_service_server::QueryServiceServer as StakeQueryServiceServer,
52 },
53 },
54 util::tendermint_proxy::v1::tendermint_proxy_service_server::{
55 TendermintProxyService, TendermintProxyServiceServer,
56 },
57 },
58 penumbra_sdk_sct::component::rpc::Server as SctServer,
59 penumbra_sdk_shielded_pool::component::rpc::Server as ShieldedPoolServer,
60 penumbra_sdk_stake::component::rpc::Server as StakeServer,
61 tonic::service::Routes,
62 tonic_web::enable as we,
63};
64
65pub fn routes(
66 storage: &cnidarium::Storage,
67 tm_proxy: impl TendermintProxyService,
68 _enable_expensive_rpc: bool,
69) -> anyhow::Result<tonic::service::Routes> {
70 let ibc = penumbra_sdk_ibc::component::rpc::IbcQuery::<PenumbraHost>::new(storage.clone());
71
72 let mut builder = Routes::builder();
73 builder
74 .add_service(we(StorageQueryServiceServer::new(StorageServer::new(
83 storage.clone(),
84 ))))
85 .add_service(we(AuctionQueryServiceServer::new(AuctionServer::new(
86 storage.clone(),
87 ))))
88 .add_service(we(AppQueryServiceServer::new(AppQueryServer::new(
89 storage.clone(),
90 ))))
91 .add_service(we(CompactBlockQueryServiceServer::new(
92 CompactBlockServer::new(storage.clone()),
93 )))
94 .add_service(we(DexQueryServiceServer::new(DexServer::new(
95 storage.clone(),
96 ))))
97 .add_service(we(FeeQueryServiceServer::new(FeeServer::new(
98 storage.clone(),
99 ))))
100 .add_service(we(GovernanceQueryServiceServer::new(
101 GovernanceServer::new(storage.clone()),
102 )))
103 .add_service(we(SctQueryServiceServer::new(SctServer::new(
104 storage.clone(),
105 ))))
106 .add_service(we(ShieldedPoolQueryServiceServer::new(
107 ShieldedPoolServer::new(storage.clone()),
108 )))
109 .add_service(we(TransferQueryServer::new(ShieldedPoolServer::new(
110 storage.clone(),
111 ))))
112 .add_service(we(BankQueryServer::new(ShieldedPoolServer::new(
113 storage.clone(),
114 ))))
115 .add_service(we(CommunityPoolQueryServiceServer::new(
116 CommunityPoolServer::new(storage.clone()),
117 )))
118 .add_service(we(StakeQueryServiceServer::new(StakeServer::new(
119 storage.clone(),
120 ))))
121 .add_service(we(ClientQueryServer::new(ibc.clone())))
122 .add_service(we(ChannelQueryServer::new(ibc.clone())))
123 .add_service(we(ConnectionQueryServer::new(ibc.clone())))
124 .add_service(we(TendermintProxyServiceServer::new(tm_proxy)))
125 .add_service(we(SimulationServiceServer::new(DexServer::new(
126 storage.clone(),
127 ))))
128 .add_service(we(FundingQueryServiceServer::new(FundingServer::new(
129 storage.clone(),
130 ))))
131 .add_service(we(tonic_reflection::server::Builder::configure()
132 .register_encoded_file_descriptor_set(penumbra_sdk_proto::FILE_DESCRIPTOR_SET)
133 .build_v1()
134 .with_context(|| "could not configure grpc reflection service")?));
135 Ok(builder.routes().prepare())
136}