Skip to content

Commit

Permalink
app: create event for when app parameters change
Browse files Browse the repository at this point in the history
  • Loading branch information
cronokirby committed Feb 27, 2025
1 parent 4d683f5 commit 033b3af
Show file tree
Hide file tree
Showing 6 changed files with 158 additions and 0 deletions.
38 changes: 38 additions & 0 deletions crates/core/app/src/event.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
use anyhow::{anyhow, Context};
use penumbra_proto::{penumbra::core::app::v1 as pb, DomainType};
use prost::Name as _;

use crate::params::AppParameters;

#[derive(Clone, Debug)]
struct EventAppParametersChange {
new_parameters: AppParameters,
}

impl TryFrom<pb::EventAppParametersChange> for EventAppParametersChange {
type Error = anyhow::Error;

fn try_from(value: pb::EventAppParametersChange) -> Result<Self, Self::Error> {
fn inner(value: pb::EventAppParametersChange) -> anyhow::Result<EventAppParametersChange> {
Ok(EventAppParametersChange {
new_parameters: value
.new_parameters
.ok_or(anyhow!("missing `new_parameters`"))?
.try_into()?,
})
}
inner(value).context(format!("parsing {}", pb::EventAppParametersChange::NAME))
}
}

impl From<EventAppParametersChange> for pb::EventAppParametersChange {
fn from(value: EventAppParametersChange) -> Self {
Self {
new_parameters: Some(value.new_parameters.into()),
}
}
}

impl DomainType for EventAppParametersChange {
type Proto = pb::EventAppParametersChange;
}
1 change: 1 addition & 0 deletions crates/core/app/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ pub static COMETBFT_SUBSTORE_PREFIX: &'static str = "cometbft-data";
pub mod app_version;
pub use app_version::APP_VERSION;

pub mod event;
pub mod genesis;
pub mod params;

Expand Down
17 changes: 17 additions & 0 deletions crates/proto/src/gen/penumbra.core.app.v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,23 @@ impl ::prost::Name for GenesisContent {
"/penumbra.core.app.v1.GenesisContent".into()
}
}
/// An event triggering when the app parameters change.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct EventAppParametersChange {
/// The new parameters, in their entirety.
#[prost(message, optional, tag = "1")]
pub new_parameters: ::core::option::Option<AppParameters>,
}
impl ::prost::Name for EventAppParametersChange {
const NAME: &'static str = "EventAppParametersChange";
const PACKAGE: &'static str = "penumbra.core.app.v1";
fn full_name() -> ::prost::alloc::string::String {
"penumbra.core.app.v1.EventAppParametersChange".into()
}
fn type_url() -> ::prost::alloc::string::String {
"/penumbra.core.app.v1.EventAppParametersChange".into()
}
}
/// Generated client implementations.
#[cfg(feature = "rpc")]
pub mod query_service_client {
Expand Down
96 changes: 96 additions & 0 deletions crates/proto/src/gen/penumbra.core.app.v1.serde.rs
Original file line number Diff line number Diff line change
Expand Up @@ -460,6 +460,102 @@ impl<'de> serde::Deserialize<'de> for AppParametersResponse {
deserializer.deserialize_struct("penumbra.core.app.v1.AppParametersResponse", FIELDS, GeneratedVisitor)
}
}
impl serde::Serialize for EventAppParametersChange {
#[allow(deprecated)]
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
use serde::ser::SerializeStruct;
let mut len = 0;
if self.new_parameters.is_some() {
len += 1;
}
let mut struct_ser = serializer.serialize_struct("penumbra.core.app.v1.EventAppParametersChange", len)?;
if let Some(v) = self.new_parameters.as_ref() {
struct_ser.serialize_field("newParameters", v)?;
}
struct_ser.end()
}
}
impl<'de> serde::Deserialize<'de> for EventAppParametersChange {
#[allow(deprecated)]
fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
const FIELDS: &[&str] = &[
"new_parameters",
"newParameters",
];

#[allow(clippy::enum_variant_names)]
enum GeneratedField {
NewParameters,
__SkipField__,
}
impl<'de> serde::Deserialize<'de> for GeneratedField {
fn deserialize<D>(deserializer: D) -> std::result::Result<GeneratedField, D::Error>
where
D: serde::Deserializer<'de>,
{
struct GeneratedVisitor;

impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
type Value = GeneratedField;

fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(formatter, "expected one of: {:?}", &FIELDS)
}

#[allow(unused_variables)]
fn visit_str<E>(self, value: &str) -> std::result::Result<GeneratedField, E>
where
E: serde::de::Error,
{
match value {
"newParameters" | "new_parameters" => Ok(GeneratedField::NewParameters),
_ => Ok(GeneratedField::__SkipField__),
}
}
}
deserializer.deserialize_identifier(GeneratedVisitor)
}
}
struct GeneratedVisitor;
impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
type Value = EventAppParametersChange;

fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
formatter.write_str("struct penumbra.core.app.v1.EventAppParametersChange")
}

fn visit_map<V>(self, mut map_: V) -> std::result::Result<EventAppParametersChange, V::Error>
where
V: serde::de::MapAccess<'de>,
{
let mut new_parameters__ = None;
while let Some(k) = map_.next_key()? {
match k {
GeneratedField::NewParameters => {
if new_parameters__.is_some() {
return Err(serde::de::Error::duplicate_field("newParameters"));
}
new_parameters__ = map_.next_value()?;
}
GeneratedField::__SkipField__ => {
let _ = map_.next_value::<serde::de::IgnoredAny>()?;
}
}
}
Ok(EventAppParametersChange {
new_parameters: new_parameters__,
})
}
}
deserializer.deserialize_struct("penumbra.core.app.v1.EventAppParametersChange", FIELDS, GeneratedVisitor)
}
}
impl serde::Serialize for GenesisAppState {
#[allow(deprecated)]
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
Expand Down
Binary file modified crates/proto/src/gen/proto_descriptor.bin.no_lfs
Binary file not shown.
6 changes: 6 additions & 0 deletions proto/penumbra/penumbra/core/app/v1/app.proto
Original file line number Diff line number Diff line change
Expand Up @@ -103,3 +103,9 @@ message GenesisContent {
// Auction component genesis state.
core.component.auction.v1.GenesisContent auction_content = 12;
}

// An event triggering when the app parameters change.
message EventAppParametersChange {
// The new parameters, in their entirety.
AppParameters new_parameters = 1;
}

0 comments on commit 033b3af

Please sign in to comment.