Skip to content

Commit

Permalink
Revert gRPC client changes
Browse files Browse the repository at this point in the history
  • Loading branch information
keppel committed Nov 16, 2024
1 parent d525a4d commit 134dec7
Showing 1 changed file with 46 additions and 45 deletions.
91 changes: 46 additions & 45 deletions src/ibc/service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ impl From<crate::Error> for tonic::Status {
}

pub struct IbcClientService<C> {
pub ibc: C,
pub ibc: fn() -> C,
}

#[tonic::async_trait]
Expand All @@ -144,8 +144,9 @@ impl<C: Client<IbcContext> + 'static> ClientQuery for IbcClientService<C> {
&self,
_request: Request<QueryClientStatesRequest>,
) -> Result<Response<QueryClientStatesResponse>, Status> {
let ibc = (self.ibc)();
let res = QueryClientStatesResponse {
client_states: self.ibc.query(|ibc| ibc.query_client_states()).await?,
client_states: ibc.query(|ibc| ibc.query_client_states()).await?,
..Default::default()
};
Ok(Response::new(res))
Expand All @@ -161,8 +162,9 @@ impl<C: Client<IbcContext> + 'static> ClientQuery for IbcClientService<C> {
let revision_number = request.revision_number;
let revision_height = request.revision_height;

let consensus_state = self
.ibc
let ibc = (self.ibc)();

let consensus_state = ibc
.query(|ibc| {
ibc.query_consensus_state(
client_id.clone().into(),
Expand All @@ -185,15 +187,15 @@ impl<C: Client<IbcContext> + 'static> ClientQuery for IbcClientService<C> {
&self,
request: Request<QueryConsensusStatesRequest>,
) -> Result<Response<QueryConsensusStatesResponse>, Status> {
let ibc = (self.ibc)();
let client_id: ClientId = request
.into_inner()
.client_id
.parse()
.map_err(|_| Status::invalid_argument("Invalid client ID".to_string()))?;

let res = QueryConsensusStatesResponse {
consensus_states: self
.ibc
consensus_states: ibc
.query(|ibc| ibc.query_consensus_states(client_id.clone().into()))
.await?,
..Default::default()
Expand All @@ -215,9 +217,9 @@ impl<C: Client<IbcContext> + 'static> ClientQuery for IbcClientService<C> {
let request = request.into_inner();
let client_id = ClientId::from_str(&request.client_id)
.map_err(|_| Status::invalid_argument("Invalid client ID".to_string()))?;
let ibc = (self.ibc)();

let client_status = self
.ibc
let client_status = ibc
.query(|ibc| ibc.query_client_status(client_id.clone().into()))
.await?;

Expand Down Expand Up @@ -251,7 +253,7 @@ impl<C: Client<IbcContext> + 'static> ClientQuery for IbcClientService<C> {
}

pub struct IbcConnectionService<C> {
ibc: C,
ibc: fn() -> C,
}

#[tonic::async_trait]
Expand All @@ -260,12 +262,12 @@ impl<C: Client<IbcContext> + 'static> ConnectionQuery for IbcConnectionService<C
&self,
request: Request<QueryConnectionRequest>,
) -> Result<Response<QueryConnectionResponse>, Status> {
let ibc = (self.ibc)();
let conn_id = ConnectionId::from_str(&request.into_inner().connection_id)
.map_err(|_| Status::invalid_argument("Invalid connection ID".to_string()))?;

Ok(Response::new(QueryConnectionResponse {
connection: self
.ibc
connection: ibc
.query(|ibc| ibc.query_connection(conn_id.clone().into()))
.await?
.map(Into::into),
Expand All @@ -277,8 +279,9 @@ impl<C: Client<IbcContext> + 'static> ConnectionQuery for IbcConnectionService<C
&self,
_request: Request<QueryConnectionsRequest>,
) -> Result<Response<QueryConnectionsResponse>, Status> {
let ibc = (self.ibc)();
Ok(Response::new(QueryConnectionsResponse {
connections: self.ibc.query(|ibc| ibc.query_all_connections()).await?,
connections: ibc.query(|ibc| ibc.query_all_connections()).await?,
..Default::default()
}))
}
Expand All @@ -287,13 +290,13 @@ impl<C: Client<IbcContext> + 'static> ConnectionQuery for IbcConnectionService<C
&self,
request: Request<QueryClientConnectionsRequest>,
) -> Result<Response<QueryClientConnectionsResponse>, Status> {
let ibc = (self.ibc)();
let client_id: ClientId = request
.into_inner()
.client_id
.parse()
.map_err(|_| Status::invalid_argument("Invalid client ID".to_string()))?;
let connection_ids = self
.ibc
let connection_ids = ibc
.query(|ibc| ibc.query_client_connections(client_id.clone().into()))
.await?;

Expand Down Expand Up @@ -326,7 +329,7 @@ impl<C: Client<IbcContext> + 'static> ConnectionQuery for IbcConnectionService<C
}

pub struct IbcChannelService<C> {
ibc: C,
ibc: fn() -> C,
revision_number: u64,
}

Expand All @@ -336,6 +339,7 @@ impl<C: Client<IbcContext> + 'static> ChannelQuery for IbcChannelService<C> {
&self,
request: Request<QueryChannelRequest>,
) -> Result<Response<QueryChannelResponse>, Status> {
let ibc = (self.ibc)();
let request = request.into_inner();
let port_id = PortId::from_str(&request.port_id)
.map_err(|_| Status::invalid_argument("invalid port id"))?;
Expand All @@ -345,8 +349,7 @@ impl<C: Client<IbcContext> + 'static> ChannelQuery for IbcChannelService<C> {
let path = ChannelEndPath(port_id, channel_id);

Ok(Response::new(QueryChannelResponse {
channel: self
.ibc
channel: ibc
.query(|ibc| ibc.query_channel(path.clone().into()))
.await?,
..Default::default()
Expand All @@ -357,9 +360,9 @@ impl<C: Client<IbcContext> + 'static> ChannelQuery for IbcChannelService<C> {
&self,
_request: Request<QueryChannelsRequest>,
) -> Result<Response<QueryChannelsResponse>, Status> {
let ibc = (self.ibc)();
let revision_number = self.revision_number;
let (channels, height) = self
.ibc
let (channels, height) = ibc
.query(|ibc| Ok((ibc.query_all_channels()?, ibc.height)))
.await?;

Expand All @@ -377,12 +380,12 @@ impl<C: Client<IbcContext> + 'static> ChannelQuery for IbcChannelService<C> {
&self,
request: Request<QueryConnectionChannelsRequest>,
) -> Result<Response<QueryConnectionChannelsResponse>, Status> {
let ibc = (self.ibc)();
let revision_number = self.revision_number;
let conn_id = ConnectionId::from_str(&request.get_ref().connection)
.map_err(|_| Status::invalid_argument("invalid connection id"))?;

let (channels, height) = self
.ibc
let (channels, height) = ibc
.query(|ibc| {
Ok((
ibc.query_connection_channels(conn_id.clone().into())?,
Expand All @@ -404,32 +407,30 @@ impl<C: Client<IbcContext> + 'static> ChannelQuery for IbcChannelService<C> {
&self,
request: Request<QueryChannelClientStateRequest>,
) -> Result<Response<QueryChannelClientStateResponse>, Status> {
let ibc = (self.ibc)();
let request = request.into_inner();
let port_id = PortId::from_str(&request.port_id)
.map_err(|_| Status::invalid_argument("invalid port id"))?;
let channel_id = ChannelId::from_str(&request.channel_id)
.map_err(|_| Status::invalid_argument("invalid channel id"))?;

let path = ChannelEndPath(port_id, channel_id);
let channel: Channel = self
.ibc
let channel: Channel = ibc
.query(|ibc| Ok(ibc.query_channel(path.clone().into())))
.await??
.ok_or_else(|| Status::not_found("channel not found"))?;
let connection_id = channel
.connection_hops
.first()
.ok_or_else(|| Status::not_found("channel does not have a connection hop"))?;
let connection_end: ConnectionEnd = self
.ibc
let connection_end: ConnectionEnd = ibc
.query(|ibc| {
Ok(ibc.query_connection(ConnectionId::from_str(connection_id).unwrap().into()))
})
.await??
.ok_or_else(|| Status::not_found("connection not found"))?;
let client_id = connection_end.client_id();
let client_state = self
.ibc
let client_state = ibc
.query(|ibc| {
Ok(ibc
.clients
Expand Down Expand Up @@ -472,6 +473,7 @@ impl<C: Client<IbcContext> + 'static> ChannelQuery for IbcChannelService<C> {
&self,
request: Request<QueryPacketCommitmentsRequest>,
) -> Result<Response<QueryPacketCommitmentsResponse>, Status> {
let ibc = (self.ibc)();
let revision_number = self.revision_number;
let request = request.into_inner();
let port_id = PortId::from_str(&request.port_id)
Expand All @@ -481,8 +483,7 @@ impl<C: Client<IbcContext> + 'static> ChannelQuery for IbcChannelService<C> {

let path = PortChannel::new(port_id, channel_id);

let (commitments, height) = self
.ibc
let (commitments, height) = ibc
.query(|ibc| Ok((ibc.query_packet_commitments(path.clone())?, ibc.height)))
.await?;

Expand All @@ -507,10 +508,10 @@ impl<C: Client<IbcContext> + 'static> ChannelQuery for IbcChannelService<C> {
.map_err(|_| Status::invalid_argument("invalid channel id"))?;
let sequence = Sequence::from(request.sequence);

let ibc = (self.ibc)();
let receipt_path = ReceiptPath::new(&port_id, &channel_id, sequence);

let receipt = self
.ibc
let receipt = ibc
.query(|ibc| Ok(ibc.get_packet_receipt(&receipt_path.clone())?))
.await;

Expand All @@ -534,6 +535,7 @@ impl<C: Client<IbcContext> + 'static> ChannelQuery for IbcChannelService<C> {
&self,
request: Request<QueryPacketAcknowledgementsRequest>,
) -> Result<Response<QueryPacketAcknowledgementsResponse>, Status> {
let ibc = (self.ibc)();
let revision_number = self.revision_number;
let request = request.into_inner();
let port_id = PortId::from_str(&request.port_id)
Expand All @@ -543,8 +545,7 @@ impl<C: Client<IbcContext> + 'static> ChannelQuery for IbcChannelService<C> {
let sequences = request.packet_commitment_sequences;

let path = PortChannel::new(port_id, channel_id);
let (acknowledgements, height) = self
.ibc
let (acknowledgements, height) = ibc
.query(|ibc| {
Ok((
ibc.query_packet_acks(sequences.clone().try_into().unwrap(), path.clone())?,
Expand All @@ -567,6 +568,7 @@ impl<C: Client<IbcContext> + 'static> ChannelQuery for IbcChannelService<C> {
&self,
request: Request<QueryUnreceivedPacketsRequest>,
) -> Result<Response<QueryUnreceivedPacketsResponse>, Status> {
let ibc = (self.ibc)();
let revision_number = self.revision_number;
let request = request.into_inner();
let port_id = PortId::from_str(&request.port_id)
Expand All @@ -576,8 +578,7 @@ impl<C: Client<IbcContext> + 'static> ChannelQuery for IbcChannelService<C> {
let sequences_to_check: Vec<u64> = request.packet_commitment_sequences;
let path = PortChannel::new(port_id, channel_id);

let (sequences, height) = self
.ibc
let (sequences, height) = ibc
.query(|ibc| {
Ok((
ibc.query_unreceived_packets(
Expand All @@ -602,6 +603,7 @@ impl<C: Client<IbcContext> + 'static> ChannelQuery for IbcChannelService<C> {
&self,
request: Request<QueryUnreceivedAcksRequest>,
) -> Result<Response<QueryUnreceivedAcksResponse>, Status> {
let ibc = (self.ibc)();
let revision_number = self.revision_number;
let request = request.into_inner();
let port_id = PortId::from_str(&request.port_id)
Expand All @@ -611,8 +613,7 @@ impl<C: Client<IbcContext> + 'static> ChannelQuery for IbcChannelService<C> {
let sequences_to_check: Vec<u64> = request.packet_ack_sequences;
let path = PortChannel::new(port_id, channel_id);

let (sequences, height) = self
.ibc
let (sequences, height) = ibc
.query(|ibc| {
Ok((
ibc.query_unreceived_acks(
Expand All @@ -637,14 +638,14 @@ impl<C: Client<IbcContext> + 'static> ChannelQuery for IbcChannelService<C> {
&self,
request: Request<QueryNextSequenceReceiveRequest>,
) -> Result<Response<QueryNextSequenceReceiveResponse>, Status> {
let ibc_client = (self.ibc)();
let request_inner = request.into_inner();
let port_id = PortId::from_str(&request_inner.port_id)
.map_err(|_| Status::invalid_argument("invalid port id"))?;
let channel_id = ChannelId::from_str(&request_inner.channel_id)
.map_err(|_| Status::invalid_argument("invalid channel id"))?;
let res = QueryNextSequenceReceiveResponse {
next_sequence_receive: self
.ibc
next_sequence_receive: ibc_client
.query(|ibc| {
ibc.query_next_sequence_receive(PortChannel::new(
port_id.clone(),
Expand All @@ -661,14 +662,14 @@ impl<C: Client<IbcContext> + 'static> ChannelQuery for IbcChannelService<C> {
&self,
request: Request<QueryNextSequenceSendRequest>,
) -> Result<Response<QueryNextSequenceSendResponse>, Status> {
let ibc_client = (self.ibc)();
let request_inner = request.into_inner();
let port_id = PortId::from_str(&request_inner.port_id)
.map_err(|_| Status::invalid_argument("invalid port id"))?;
let channel_id = ChannelId::from_str(&request_inner.channel_id)
.map_err(|_| Status::invalid_argument("invalid channel id"))?;
let res = QueryNextSequenceSendResponse {
next_sequence_send: self
.ibc
next_sequence_send: ibc_client
.query(|ibc| {
ibc.query_next_sequence_send(PortChannel::new(
port_id.clone(),
Expand Down Expand Up @@ -1156,20 +1157,20 @@ pub struct GrpcOpts {
}

/// Start the gRPC server.
pub async fn start_grpc<C: Client<IbcContext> + 'static, F: Fn() -> C>(client: F, opts: &GrpcOpts) {
pub async fn start_grpc<C: Client<IbcContext> + 'static>(client: fn() -> C, opts: &GrpcOpts) {
use tonic::transport::Server;
let auth_service = AuthQueryServer::new(AuthService {});
let bank_service = BankQueryServer::new(BankService {});
let staking_service = StakingQueryServer::new(StakingService {});
let ibc_client_service = ClientQueryServer::new(IbcClientService { ibc: client() });
let ibc_connection_service = ConnectionQueryServer::new(IbcConnectionService { ibc: client() });
let ibc_client_service = ClientQueryServer::new(IbcClientService { ibc: client });
let ibc_connection_service = ConnectionQueryServer::new(IbcConnectionService { ibc: client });
let revision_number = opts
.chain_id
.rsplit_once('-')
.map(|(_, n)| n.parse::<u64>().unwrap_or(0))
.unwrap_or(0);
let ibc_channel_service = ChannelQueryServer::new(IbcChannelService {
ibc: client(),
ibc: client,
revision_number,
});
let health_service = HealthServer::new(AppHealthService {});
Expand Down

0 comments on commit 134dec7

Please sign in to comment.