From 59b5356613998560546e8a68f8a0e576761e19a9 Mon Sep 17 00:00:00 2001 From: Uncle Stinky Date: Thu, 10 Sep 2026 21:40:06 +0300 Subject: [PATCH] make decimals part of network data Signed-off-by: Uncle Stinky --- Cargo.lock | 4 ++-- pallets/helpers/Cargo.toml | 2 +- pallets/helpers/src/networks.rs | 8 ++++++++ pallets/networks/src/benchmarking.rs | 12 ++++++++++++ pallets/networks/src/lib.rs | 29 ++++++++++++++++++++++++++++ pallets/networks/src/weights.rs | 2 ++ 6 files changed, 54 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6c18e90..bdd51f0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3757,7 +3757,7 @@ dependencies = [ [[package]] name = "ghost-helpers" -version = "0.0.8" +version = "0.0.10" dependencies = [ "frame-support", "ghost-traits", @@ -4109,7 +4109,7 @@ dependencies = [ [[package]] name = "ghost-weaver" -version = "0.0.6" +version = "0.0.7" dependencies = [ "frame-benchmarking", "frame-support", diff --git a/pallets/helpers/Cargo.toml b/pallets/helpers/Cargo.toml index d8631e6..ccc2879 100644 --- a/pallets/helpers/Cargo.toml +++ b/pallets/helpers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ghost-helpers" -version = "0.0.9" +version = "0.0.10" description = "Cryptographic utility suite for custom runtimes: optimized Bitmaps, UTXO parsing, Merkle Tree proofs, and Hash Chain components." license.workspace = true authors.workspace = true diff --git a/pallets/helpers/src/networks.rs b/pallets/helpers/src/networks.rs index 33dfed5..4d88ec2 100644 --- a/pallets/helpers/src/networks.rs +++ b/pallets/helpers/src/networks.rs @@ -218,6 +218,7 @@ pub struct NetworkData { pub r#type: NetworkType, pub curve: NetworkCurve, + pub decimals: u8, pub finality_delay: u64, pub rate_limit_delay: u64, @@ -235,6 +236,7 @@ pub struct NetworkDataBuilder { pub r#type: NetworkType, pub curve: NetworkCurve, + pub decimals: u8, pub finality_delay: u64, pub rate_limit_delay: u64, @@ -265,6 +267,11 @@ impl NetworkDataBuilder { self } + pub fn with_decimals(mut self, decimals: u8) -> Self { + self.decimals = decimals; + self + } + pub fn with_finality_delay(mut self, finality_delay: u64) -> Self { self.finality_delay = finality_delay; self @@ -323,6 +330,7 @@ impl NetworkDataBuilder { r#type: self.r#type, curve: self.curve, + decimals: self.decimals, finality_delay: self.finality_delay, rate_limit_delay: self.rate_limit_delay, diff --git a/pallets/networks/src/benchmarking.rs b/pallets/networks/src/benchmarking.rs index f37ec98..410d09f 100644 --- a/pallets/networks/src/benchmarking.rs +++ b/pallets/networks/src/benchmarking.rs @@ -186,6 +186,18 @@ benchmarks! { assert_ne!(GhostNetworks::::networks(chain_id), prev_network); } + update_network_decimals { + let decimals = 18; + let (chain_id, network) = prepare_network::(1, 1, 1); + let authority = T::UpdateOrigin::try_successful_origin() + .map_err(|_| BenchmarkError::Weightless)?; + let prev_network = create_network::(chain_id, network)?; + }: _(authority, chain_id, decimals) + verify { + assert_last_event::(Event::NetworkDecimalsUpdated { chain_id, decimals }.into()); + assert_ne!(GhostNetworks::::networks(chain_id), prev_network); + } + update_network_gatekeeper { let mut raw_gatekeeper = b"0x".to_vec(); for i in 0..40 { raw_gatekeeper.push(i + 1); } diff --git a/pallets/networks/src/lib.rs b/pallets/networks/src/lib.rs index 5094ace..6f10886 100644 --- a/pallets/networks/src/lib.rs +++ b/pallets/networks/src/lib.rs @@ -175,6 +175,7 @@ pub mod module { NetworkBlockDeviationUpdated { chain_id: T::NetworkId, block_deviation: u64 }, NetworkTypeUpdated { chain_id: T::NetworkId, network_type: NetworkType }, NetworkCurveUpdated { chain_id: T::NetworkId, network_curve: NetworkCurve }, + NetworkDecimalsUpdated { chain_id: T::NetworkId, decimals: u8 }, NetworkGatekeeperUpdated { chain_id: T::NetworkId }, NetworkIncomingShareUpdated { chain_id: T::NetworkId, incoming_share: u32 }, NetworkOutgoingShareUpdated { chain_id: T::NetworkId, outgoing_share: u32 }, @@ -396,6 +397,17 @@ pub mod module { T::RemoveOrigin::ensure_origin_or_root(origin)?; Self::do_remove_network(chain_id) } + + #[pallet::call_index(12)] + #[pallet::weight(T::WeightInfo::update_network_decimals())] + pub fn update_network_decimals( + origin: OriginFor, + chain_id: T::NetworkId, + decimals: u8, + ) -> DispatchResult { + T::UpdateOrigin::ensure_origin_or_root(origin)?; + Self::do_update_network_decimals(chain_id, decimals) + } } } @@ -591,6 +603,23 @@ impl Pallet { Ok(()) } + /// Update existent network decimals. + pub fn do_update_network_decimals( + chain_id: T::NetworkId, + decimals: u8, + ) -> DispatchResult { + Networks::::try_mutate(&chain_id, |maybe_network| -> DispatchResult { + let network = maybe_network.as_mut().ok_or(Error::::NetworkDoesNotExist)?; + network.decimals = decimals; + Ok(()) + })?; + Self::deposit_event(Event::::NetworkDecimalsUpdated { + chain_id, + decimals, + }); + Ok(()) + } + /// Update existent network type. pub fn do_update_network_type( chain_id: T::NetworkId, diff --git a/pallets/networks/src/weights.rs b/pallets/networks/src/weights.rs index f7de616..a2177b2 100644 --- a/pallets/networks/src/weights.rs +++ b/pallets/networks/src/weights.rs @@ -57,6 +57,7 @@ pub trait WeightInfo { fn update_network_block_deviation() -> Weight; fn update_network_type() -> Weight; fn update_network_curve() -> Weight; + fn update_network_decimals() -> Weight; fn update_network_gatekeeper() -> Weight; fn update_incoming_network_share() -> Weight; fn update_outgoing_network_share() -> Weight; @@ -182,6 +183,7 @@ impl WeightInfo for () { .saturating_add(RocksDbWeight::get().reads(4)) .saturating_add(RocksDbWeight::get().writes(4)) } + fn update_network_decimals() -> Weight { Default::default() } /// Storage: `GhostNetworks::Networks` (r:1 w:1) /// Proof: `GhostNetworks::Networks` (`max_values`: None, `max_size`: None, mode: `Measured`) fn update_network_gatekeeper() -> Weight {