From c23270bd3610f0b6b139d4c2e13c8a4a5bb16f07 Mon Sep 17 00:00:00 2001 From: Gabe Rodriguez Date: Wed, 23 Oct 2024 18:47:46 +0200 Subject: [PATCH] Add badges field to Metadata (#4900) ## Describe your changes Web apps are currently unable to visually distinguish certain IBC assets that represent rehypothecated tokens. Aka, Bitcoin from Osmosis or Nomic. Both of their metadata possess images of the plain Bitcoin logo. This proto change proposes to add a new field: `badges`. It gives entities like the [prax registry](https://github.com/prax-wallet/registry) the ability to add source chain icons to the metadata of assets. Frontends can then display these badges [on top of](https://github.com/penumbra-zone/web/issues/1864#issuecomment-2420669173) the asset icon. ## Issue ticket number and link https://github.com/penumbra-zone/web/issues/1864 https://github.com/prax-wallet/registry/issues/97 ## Checklist before requesting a review - [x] (not relevant) I have added guiding text to explain how a reviewer should test these changes. - [x] If this code contains consensus-breaking changes, I have added the "consensus-breaking" label. Otherwise, I declare my belief that there are not consensus-breaking changes, for the following reason: > Only a protobuf schema update --- .../src/gen/proto_descriptor.bin.no_lfs | Bin 102050 -> 82425 bytes crates/core/asset/src/asset/denom_metadata.rs | 6 ++++++ .../proto/src/gen/penumbra.core.asset.v1.rs | 4 ++++ .../src/gen/penumbra.core.asset.v1.serde.rs | 17 +++++++++++++++++ .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 646769 -> 627367 bytes .../penumbra/core/asset/v1/asset.proto | 4 ++++ 6 files changed, 31 insertions(+) diff --git a/crates/cnidarium/src/gen/proto_descriptor.bin.no_lfs b/crates/cnidarium/src/gen/proto_descriptor.bin.no_lfs index 383649ad97d9ab3daa8efd3942653231e8e3d5a5..09181ca63e0d92d8142235c3003f76694fd27e4c 100644 GIT binary patch delta 15330 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 LpJwA))qVd5oP!og delta 34850 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, + badges: Vec, priority_score: u64, /// Sorted by priority order. @@ -65,6 +66,7 @@ impl From<&Inner> for pb::Metadata { penumbra_asset_id: Some(inner.id.into()), denom_units: inner.units.clone().into_iter().map(|x| x.into()).collect(), images: inner.images.clone(), + badges: inner.badges.clone(), priority_score: inner.priority_score, } } @@ -131,6 +133,7 @@ impl TryFrom for Inner { name: value.name, symbol: value.symbol, images: value.images, + badges: value.badges, priority_score: value.priority_score, }) } @@ -253,6 +256,7 @@ impl Inner { name: String::new(), symbol: String::new(), images: Vec::new(), + badges: Vec::new(), priority_score: 0, } } @@ -429,6 +433,7 @@ impl Debug for Metadata { name, symbol, priority_score, + badges, } = inner.as_ref(); f.debug_struct("Metadata") @@ -436,6 +441,7 @@ impl Debug for Metadata { .field("base_denom", base_denom) .field("description", description) .field("images", images) + .field("badges", badges) .field("priority_score", priority_score) .field("units", units) .field("display_index", display_index) diff --git a/crates/proto/src/gen/penumbra.core.asset.v1.rs b/crates/proto/src/gen/penumbra.core.asset.v1.rs index 13edd5ca93..9ec732783c 100644 --- a/crates/proto/src/gen/penumbra.core.asset.v1.rs +++ b/crates/proto/src/gen/penumbra.core.asset.v1.rs @@ -89,6 +89,10 @@ pub struct Metadata { /// This is solely for use in client-side registries. #[prost(uint64, tag = "1986")] pub priority_score: u64, + /// Associated icons for asset. + /// For ibc assets, usually an image of the source chain. + #[prost(message, repeated, tag = "1987")] + pub badges: ::prost::alloc::vec::Vec, } impl ::prost::Name for Metadata { const NAME: &'static str = "Metadata"; diff --git a/crates/proto/src/gen/penumbra.core.asset.v1.serde.rs b/crates/proto/src/gen/penumbra.core.asset.v1.serde.rs index 0eff480e20..bf0faaf4d8 100644 --- a/crates/proto/src/gen/penumbra.core.asset.v1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.asset.v1.serde.rs @@ -1039,6 +1039,9 @@ impl serde::Serialize for Metadata { if self.priority_score != 0 { len += 1; } + if !self.badges.is_empty() { + len += 1; + } let mut struct_ser = serializer.serialize_struct("penumbra.core.asset.v1.Metadata", len)?; if !self.description.is_empty() { struct_ser.serialize_field("description", &self.description)?; @@ -1068,6 +1071,9 @@ impl serde::Serialize for Metadata { #[allow(clippy::needless_borrow)] struct_ser.serialize_field("priorityScore", ToString::to_string(&self.priority_score).as_str())?; } + if !self.badges.is_empty() { + struct_ser.serialize_field("badges", &self.badges)?; + } struct_ser.end() } } @@ -1090,6 +1096,7 @@ impl<'de> serde::Deserialize<'de> for Metadata { "images", "priority_score", "priorityScore", + "badges", ]; #[allow(clippy::enum_variant_names)] @@ -1103,6 +1110,7 @@ impl<'de> serde::Deserialize<'de> for Metadata { PenumbraAssetId, Images, PriorityScore, + Badges, __SkipField__, } impl<'de> serde::Deserialize<'de> for GeneratedField { @@ -1134,6 +1142,7 @@ impl<'de> serde::Deserialize<'de> for Metadata { "penumbraAssetId" | "penumbra_asset_id" => Ok(GeneratedField::PenumbraAssetId), "images" => Ok(GeneratedField::Images), "priorityScore" | "priority_score" => Ok(GeneratedField::PriorityScore), + "badges" => Ok(GeneratedField::Badges), _ => Ok(GeneratedField::__SkipField__), } } @@ -1162,6 +1171,7 @@ impl<'de> serde::Deserialize<'de> for Metadata { let mut penumbra_asset_id__ = None; let mut images__ = None; let mut priority_score__ = None; + let mut badges__ = None; while let Some(k) = map_.next_key()? { match k { GeneratedField::Description => { @@ -1220,6 +1230,12 @@ impl<'de> serde::Deserialize<'de> for Metadata { Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) ; } + GeneratedField::Badges => { + if badges__.is_some() { + return Err(serde::de::Error::duplicate_field("badges")); + } + badges__ = Some(map_.next_value()?); + } GeneratedField::__SkipField__ => { let _ = map_.next_value::()?; } @@ -1235,6 +1251,7 @@ impl<'de> serde::Deserialize<'de> for Metadata { penumbra_asset_id: penumbra_asset_id__, images: images__.unwrap_or_default(), priority_score: priority_score__.unwrap_or_default(), + badges: badges__.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 1b37ab32d8b5c5dc7cafc4dfe8c1efe6e9a36c26..f2452b1c4b474c5738ad69f0c7d1b1e5f47508b9 100644 GIT binary patch delta 18751 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 delta 37919 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 Cs0vX4 diff --git a/proto/penumbra/penumbra/core/asset/v1/asset.proto b/proto/penumbra/penumbra/core/asset/v1/asset.proto index 433e1c1a33..2b9bdbd9a6 100644 --- a/proto/penumbra/penumbra/core/asset/v1/asset.proto +++ b/proto/penumbra/penumbra/core/asset/v1/asset.proto @@ -67,6 +67,10 @@ message Metadata { // // This is solely for use in client-side registries. uint64 priority_score = 1986; + + // Associated icons for asset. + // For ibc assets, usually an image of the source chain. + repeated AssetImage badges = 1987; } // DenomUnit represents a struct that describes a given denomination unit of the basic token.