penumbra_sdk_distributions/
params.rs

1use penumbra_sdk_proto::core::component::distributions::v1 as pb;
2use penumbra_sdk_proto::DomainType;
3use serde::{Deserialize, Serialize};
4use std::num::NonZeroU64;
5
6#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
7#[serde(
8    try_from = "pb::DistributionsParameters",
9    into = "pb::DistributionsParameters"
10)]
11pub struct DistributionsParameters {
12    pub staking_issuance_per_block: u64,
13    pub liquidity_tournament_incentive_per_block: u64,
14    pub liquidity_tournament_end_block: Option<NonZeroU64>,
15}
16
17impl DomainType for DistributionsParameters {
18    type Proto = pb::DistributionsParameters;
19}
20
21impl TryFrom<pb::DistributionsParameters> for DistributionsParameters {
22    type Error = anyhow::Error;
23
24    fn try_from(msg: pb::DistributionsParameters) -> anyhow::Result<Self> {
25        Ok(DistributionsParameters {
26            staking_issuance_per_block: msg.staking_issuance_per_block,
27            liquidity_tournament_incentive_per_block: msg.liquidity_tournament_incentive_per_block,
28            liquidity_tournament_end_block: NonZeroU64::new(msg.liquidity_tournament_end_block),
29        })
30    }
31}
32
33impl From<DistributionsParameters> for pb::DistributionsParameters {
34    fn from(params: DistributionsParameters) -> Self {
35        pb::DistributionsParameters {
36            staking_issuance_per_block: params.staking_issuance_per_block,
37            liquidity_tournament_incentive_per_block: params
38                .liquidity_tournament_incentive_per_block,
39            liquidity_tournament_end_block: params
40                .liquidity_tournament_end_block
41                .map_or(0, NonZeroU64::get),
42        }
43    }
44}
45
46impl Default for DistributionsParameters {
47    fn default() -> Self {
48        Self {
49            staking_issuance_per_block: 1_000_000,
50            liquidity_tournament_incentive_per_block: 0,
51            liquidity_tournament_end_block: None,
52        }
53    }
54}