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}