From e4c7a1a8c4a8f604404b29995e7d10e8d8b8ad6a Mon Sep 17 00:00:00 2001 From: Lucas Meier Date: Tue, 28 Jan 2025 12:51:51 -0800 Subject: [PATCH] Add chain parameters for configuring LQT distributions Closes #5012. --- crates/core/app/src/params/change.rs | 2 ++ .../component/distributions/src/params.rs | 5 ++++ ...enumbra.core.component.distributions.v1.rs | 3 +++ ...a.core.component.distributions.v1.serde.rs | 22 ++++++++++++++++++ .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 643798 -> 646628 bytes .../distributions/v1/distributions.proto | 2 ++ 6 files changed, 34 insertions(+) diff --git a/crates/core/app/src/params/change.rs b/crates/core/app/src/params/change.rs index 6a88269091..d58b5c4b05 100644 --- a/crates/core/app/src/params/change.rs +++ b/crates/core/app/src/params/change.rs @@ -68,6 +68,7 @@ impl AppParameters { distributions_params: DistributionsParameters { staking_issuance_per_block: _, + liquidity_tournament_incentive_per_block: _, }, fee_params: FeeParameters { @@ -163,6 +164,7 @@ impl AppParameters { distributions_params: DistributionsParameters { staking_issuance_per_block: _, + liquidity_tournament_incentive_per_block: _, }, fee_params: FeeParameters { diff --git a/crates/core/component/distributions/src/params.rs b/crates/core/component/distributions/src/params.rs index 87c05730a7..62360e6a59 100644 --- a/crates/core/component/distributions/src/params.rs +++ b/crates/core/component/distributions/src/params.rs @@ -9,6 +9,7 @@ use serde::{Deserialize, Serialize}; )] pub struct DistributionsParameters { pub staking_issuance_per_block: u64, + pub liquidity_tournament_incentive_per_block: u64, } impl DomainType for DistributionsParameters { @@ -21,6 +22,7 @@ impl TryFrom for DistributionsParameters { fn try_from(msg: pb::DistributionsParameters) -> anyhow::Result { Ok(DistributionsParameters { staking_issuance_per_block: msg.staking_issuance_per_block, + liquidity_tournament_incentive_per_block: msg.liquidity_tournament_incentive_per_block, }) } } @@ -29,6 +31,8 @@ impl From for pb::DistributionsParameters { fn from(params: DistributionsParameters) -> Self { pb::DistributionsParameters { staking_issuance_per_block: params.staking_issuance_per_block, + liquidity_tournament_incentive_per_block: params + .liquidity_tournament_incentive_per_block, } } } @@ -37,6 +41,7 @@ impl Default for DistributionsParameters { fn default() -> Self { Self { staking_issuance_per_block: 1_000_000, + liquidity_tournament_incentive_per_block: 0, } } } diff --git a/crates/proto/src/gen/penumbra.core.component.distributions.v1.rs b/crates/proto/src/gen/penumbra.core.component.distributions.v1.rs index 8ad924095d..5c819c4835 100644 --- a/crates/proto/src/gen/penumbra.core.component.distributions.v1.rs +++ b/crates/proto/src/gen/penumbra.core.component.distributions.v1.rs @@ -5,6 +5,9 @@ pub struct DistributionsParameters { /// The amount of staking token issued per block. #[prost(uint64, tag = "1")] pub staking_issuance_per_block: u64, + /// The amount of staking token flowing from the community pool to the liquidity tournament each block. + #[prost(uint64, tag = "2")] + pub liquidity_tournament_incentive_per_block: u64, } impl ::prost::Name for DistributionsParameters { const NAME: &'static str = "DistributionsParameters"; diff --git a/crates/proto/src/gen/penumbra.core.component.distributions.v1.serde.rs b/crates/proto/src/gen/penumbra.core.component.distributions.v1.serde.rs index efe1238b66..228b37042a 100644 --- a/crates/proto/src/gen/penumbra.core.component.distributions.v1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.component.distributions.v1.serde.rs @@ -9,12 +9,20 @@ impl serde::Serialize for DistributionsParameters { if self.staking_issuance_per_block != 0 { len += 1; } + if self.liquidity_tournament_incentive_per_block != 0 { + len += 1; + } let mut struct_ser = serializer.serialize_struct("penumbra.core.component.distributions.v1.DistributionsParameters", len)?; if self.staking_issuance_per_block != 0 { #[allow(clippy::needless_borrow)] #[allow(clippy::needless_borrows_for_generic_args)] struct_ser.serialize_field("stakingIssuancePerBlock", ToString::to_string(&self.staking_issuance_per_block).as_str())?; } + if self.liquidity_tournament_incentive_per_block != 0 { + #[allow(clippy::needless_borrow)] + #[allow(clippy::needless_borrows_for_generic_args)] + struct_ser.serialize_field("liquidityTournamentIncentivePerBlock", ToString::to_string(&self.liquidity_tournament_incentive_per_block).as_str())?; + } struct_ser.end() } } @@ -27,11 +35,14 @@ impl<'de> serde::Deserialize<'de> for DistributionsParameters { const FIELDS: &[&str] = &[ "staking_issuance_per_block", "stakingIssuancePerBlock", + "liquidity_tournament_incentive_per_block", + "liquidityTournamentIncentivePerBlock", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { StakingIssuancePerBlock, + LiquidityTournamentIncentivePerBlock, __SkipField__, } impl<'de> serde::Deserialize<'de> for GeneratedField { @@ -55,6 +66,7 @@ impl<'de> serde::Deserialize<'de> for DistributionsParameters { { match value { "stakingIssuancePerBlock" | "staking_issuance_per_block" => Ok(GeneratedField::StakingIssuancePerBlock), + "liquidityTournamentIncentivePerBlock" | "liquidity_tournament_incentive_per_block" => Ok(GeneratedField::LiquidityTournamentIncentivePerBlock), _ => Ok(GeneratedField::__SkipField__), } } @@ -75,6 +87,7 @@ impl<'de> serde::Deserialize<'de> for DistributionsParameters { V: serde::de::MapAccess<'de>, { let mut staking_issuance_per_block__ = None; + let mut liquidity_tournament_incentive_per_block__ = None; while let Some(k) = map_.next_key()? { match k { GeneratedField::StakingIssuancePerBlock => { @@ -85,6 +98,14 @@ impl<'de> serde::Deserialize<'de> for DistributionsParameters { Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) ; } + GeneratedField::LiquidityTournamentIncentivePerBlock => { + if liquidity_tournament_incentive_per_block__.is_some() { + return Err(serde::de::Error::duplicate_field("liquidityTournamentIncentivePerBlock")); + } + liquidity_tournament_incentive_per_block__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } GeneratedField::__SkipField__ => { let _ = map_.next_value::()?; } @@ -92,6 +113,7 @@ impl<'de> serde::Deserialize<'de> for DistributionsParameters { } Ok(DistributionsParameters { staking_issuance_per_block: staking_issuance_per_block__.unwrap_or_default(), + liquidity_tournament_incentive_per_block: liquidity_tournament_incentive_per_block__.unwrap_or_default(), }) } } diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index f613403ab9be6e66c341fd681cd9f41366432053..0a7803f0131bf9119dd419a2b23c9fd94d7afaf5 100644 GIT binary patch delta 23622 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 diff --git a/proto/penumbra/penumbra/core/component/distributions/v1/distributions.proto b/proto/penumbra/penumbra/core/component/distributions/v1/distributions.proto index 035037e807..d91096d975 100644 --- a/proto/penumbra/penumbra/core/component/distributions/v1/distributions.proto +++ b/proto/penumbra/penumbra/core/component/distributions/v1/distributions.proto @@ -5,6 +5,8 @@ package penumbra.core.component.distributions.v1; message DistributionsParameters { // The amount of staking token issued per block. uint64 staking_issuance_per_block = 1; + // The amount of staking token flowing from the community pool to the liquidity tournament each block. + uint64 liquidity_tournament_incentive_per_block = 2; } // Genesis data for the distributions module.