penumbra_sdk_app/
params.rs

1use penumbra_sdk_auction::params::AuctionParameters;
2use penumbra_sdk_community_pool::params::CommunityPoolParameters;
3use penumbra_sdk_dex::DexParameters;
4use penumbra_sdk_distributions::DistributionsParameters;
5use penumbra_sdk_fee::FeeParameters;
6use penumbra_sdk_funding::FundingParameters;
7use penumbra_sdk_governance::params::GovernanceParameters;
8use penumbra_sdk_ibc::params::IBCParameters;
9use penumbra_sdk_proto::core::app::v1 as pb;
10use penumbra_sdk_proto::view::v1 as pb_view;
11use penumbra_sdk_proto::DomainType;
12use penumbra_sdk_sct::params::SctParameters;
13use penumbra_sdk_shielded_pool::params::ShieldedPoolParameters;
14use penumbra_sdk_stake::params::StakeParameters;
15use serde::{Deserialize, Serialize};
16
17pub mod change;
18
19#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq, Eq)]
20#[serde(try_from = "pb::AppParameters", into = "pb::AppParameters")]
21pub struct AppParameters {
22    pub chain_id: String,
23    pub auction_params: AuctionParameters,
24    pub community_pool_params: CommunityPoolParameters,
25    pub distributions_params: DistributionsParameters,
26    pub dex_params: DexParameters,
27    pub fee_params: FeeParameters,
28    pub funding_params: FundingParameters,
29    pub governance_params: GovernanceParameters,
30    pub ibc_params: IBCParameters,
31    pub sct_params: SctParameters,
32    pub shielded_pool_params: ShieldedPoolParameters,
33    pub stake_params: StakeParameters,
34}
35
36impl DomainType for AppParameters {
37    type Proto = pb::AppParameters;
38}
39
40impl TryFrom<pb::AppParameters> for AppParameters {
41    type Error = anyhow::Error;
42
43    fn try_from(msg: pb::AppParameters) -> anyhow::Result<Self> {
44        Ok(AppParameters {
45            chain_id: msg.chain_id,
46            auction_params: msg
47                .auction_params
48                .ok_or_else(|| anyhow::anyhow!("proto response missing auction params"))?
49                .try_into()?,
50            community_pool_params: msg
51                .community_pool_params
52                .ok_or_else(|| anyhow::anyhow!("proto response missing community pool params"))?
53                .try_into()?,
54            distributions_params: msg
55                .distributions_params
56                .ok_or_else(|| anyhow::anyhow!("proto response missing distribution params"))?
57                .try_into()?,
58            fee_params: msg
59                .fee_params
60                .ok_or_else(|| anyhow::anyhow!("proto response missing fee params"))?
61                .try_into()?,
62            funding_params: msg
63                .funding_params
64                .ok_or_else(|| anyhow::anyhow!("proto response missing funding params"))?
65                .try_into()?,
66            governance_params: msg
67                .governance_params
68                .ok_or_else(|| anyhow::anyhow!("proto response missing governance params"))?
69                .try_into()?,
70            ibc_params: msg
71                .ibc_params
72                .ok_or_else(|| anyhow::anyhow!("proto response missing ibc params"))?
73                .try_into()?,
74            sct_params: msg
75                .sct_params
76                .ok_or_else(|| anyhow::anyhow!("proto response missing sct params"))?
77                .try_into()?,
78            shielded_pool_params: msg
79                .shielded_pool_params
80                .ok_or_else(|| anyhow::anyhow!("proto response missing shielded pool params"))?
81                .try_into()?,
82            stake_params: msg
83                .stake_params
84                .ok_or_else(|| anyhow::anyhow!("proto response missing stake params"))?
85                .try_into()?,
86            dex_params: msg
87                .dex_params
88                .ok_or_else(|| anyhow::anyhow!("proto response missing dex params"))?
89                .try_into()?,
90        })
91    }
92}
93
94impl From<AppParameters> for pb::AppParameters {
95    fn from(params: AppParameters) -> Self {
96        pb::AppParameters {
97            chain_id: params.chain_id,
98            auction_params: Some(params.auction_params.into()),
99            community_pool_params: Some(params.community_pool_params.into()),
100            distributions_params: Some(params.distributions_params.into()),
101            fee_params: Some(params.fee_params.into()),
102            funding_params: Some(params.funding_params.into()),
103            governance_params: Some(params.governance_params.into()),
104            ibc_params: Some(params.ibc_params.into()),
105            sct_params: Some(params.sct_params.into()),
106            shielded_pool_params: Some(params.shielded_pool_params.into()),
107            stake_params: Some(params.stake_params.into()),
108            dex_params: Some(params.dex_params.into()),
109        }
110    }
111}
112impl TryFrom<pb_view::AppParametersResponse> for AppParameters {
113    type Error = anyhow::Error;
114
115    fn try_from(response: pb_view::AppParametersResponse) -> Result<Self, Self::Error> {
116        response
117            .parameters
118            .ok_or_else(|| anyhow::anyhow!("empty AppParametersResponse message"))?
119            .try_into()
120    }
121}
122
123impl TryFrom<pb::AppParametersResponse> for AppParameters {
124    type Error = anyhow::Error;
125
126    fn try_from(response: pb::AppParametersResponse) -> Result<Self, Self::Error> {
127        response
128            .app_parameters
129            .ok_or_else(|| anyhow::anyhow!("empty AppParametersResponse message"))?
130            .try_into()
131    }
132}