celestia_grpc/grpc/
node.rs

1use celestia_proto::cosmos::base::node::v1beta1::{
2    ConfigRequest, ConfigResponse as RawConfigResponse,
3};
4use celestia_types::state::BOND_DENOM;
5use serde::{Deserialize, Serialize};
6#[cfg(all(target_arch = "wasm32", feature = "wasm-bindgen"))]
7use wasm_bindgen::prelude::*;
8
9use crate::grpc::{FromGrpcResponse, make_empty_params};
10use crate::{Error, Result};
11
12/// Response holding consensus node configuration.
13#[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)]
14#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
15#[cfg_attr(all(target_arch = "wasm32", feature = "wasm-bindgen"), wasm_bindgen)]
16pub struct ConfigResponse {
17    /// Minimum gas price for the node to accept tx. Value is in `utia` denom.
18    pub minimum_gas_price: Option<f64>,
19
20    /// How many recent blocks are stored by the node.
21    pub pruning_keep_recent: u64,
22
23    /// Amount of blocks used as an interval to trigger prunning.
24    pub pruning_interval: u64,
25
26    /// A height at which the node should stop advancing state.
27    pub halt_height: u64,
28}
29
30impl FromGrpcResponse<ConfigResponse> for RawConfigResponse {
31    fn try_from_response(self) -> Result<ConfigResponse> {
32        let minimum_gas_price = if self.minimum_gas_price.is_empty() {
33            None
34        } else {
35            Some(
36                self.minimum_gas_price
37                    .strip_suffix(BOND_DENOM)
38                    .ok_or(Error::FailedToParseResponse)?
39                    .parse()
40                    .map_err(|_| Error::FailedToParseResponse)?,
41            )
42        };
43
44        Ok(ConfigResponse {
45            minimum_gas_price,
46            pruning_keep_recent: self
47                .pruning_keep_recent
48                .parse()
49                .map_err(|_| Error::FailedToParseResponse)?,
50            pruning_interval: self
51                .pruning_interval
52                .parse()
53                .map_err(|_| Error::FailedToParseResponse)?,
54            halt_height: self.halt_height,
55        })
56    }
57}
58
59make_empty_params!(ConfigRequest);