From 7c8227f1ab2d5eca1eadecea65904111664f5dfc Mon Sep 17 00:00:00 2001 From: undercover-cactus Date: Wed, 29 Oct 2025 17:24:49 +0100 Subject: [PATCH] feat: set slashing mode in genesis config (#264) In this PR we set the slashing mode value in the genesis config. For the 3 different runtime we specify the slashing mode : `mainnet/testnet` is set to `Disabled` and for `stagenet` to `LogOnly`. Co-authored-by: Steve Degosserie <723552+stiiifff@users.noreply.github.com> --- operator/Cargo.lock | 1 + .../external-validator-slashes/Cargo.toml | 1 + .../external-validator-slashes/src/lib.rs | 20 ++++++++++++++++++- .../mainnet/src/genesis_config_presets.rs | 5 +++++ .../stagenet/src/genesis_config_presets.rs | 5 +++++ .../testnet/src/genesis_config_presets.rs | 5 +++++ 6 files changed, 36 insertions(+), 1 deletion(-) diff --git a/operator/Cargo.lock b/operator/Cargo.lock index 1bb89b48..73cdab03 100644 --- a/operator/Cargo.lock +++ b/operator/Cargo.lock @@ -9479,6 +9479,7 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", + "serde", "snowbridge-core 0.3.1", "snowbridge-outbound-queue-primitives", "sp-core", diff --git a/operator/pallets/external-validator-slashes/Cargo.toml b/operator/pallets/external-validator-slashes/Cargo.toml index d8b75886..cf9a9804 100644 --- a/operator/pallets/external-validator-slashes/Cargo.toml +++ b/operator/pallets/external-validator-slashes/Cargo.toml @@ -27,6 +27,7 @@ sp-core = { workspace = true } sp-runtime = { workspace = true } pallet-external-validators = { workspace = true } sp-staking = { workspace = true } +serde = { features = ["alloc", "derive"], workspace = true } [dev-dependencies] pallet-timestamp = { workspace = true, features = ["std"] } diff --git a/operator/pallets/external-validator-slashes/src/lib.rs b/operator/pallets/external-validator-slashes/src/lib.rs index 025d5a09..e851f993 100644 --- a/operator/pallets/external-validator-slashes/src/lib.rs +++ b/operator/pallets/external-validator-slashes/src/lib.rs @@ -186,7 +186,9 @@ pub mod pallet { } #[apply(derive_storage_traits)] - #[derive(MaxEncodedLen, DecodeWithMemTracking, Default)] + #[derive( + MaxEncodedLen, DecodeWithMemTracking, serde::Deserialize, serde::Serialize, Default, + )] pub enum SlashingModeOption { #[default] Enabled, @@ -235,6 +237,22 @@ pub mod pallet { #[pallet::storage] pub type SlashingMode = StorageValue<_, SlashingModeOption, ValueQuery>; + #[pallet::genesis_config] + #[derive(frame_support::DefaultNoBound)] + pub struct GenesisConfig { + // Slashing mode + pub slashing_mode: SlashingModeOption, + #[serde(skip)] + pub _config: PhantomData, + } + + #[pallet::genesis_build] + impl BuildGenesisConfig for GenesisConfig { + fn build(&self) { + >::put(self.slashing_mode.clone()); + } + } + #[pallet::call] impl Pallet { /// Cancel a slash that was deferred for a later era diff --git a/operator/runtime/mainnet/src/genesis_config_presets.rs b/operator/runtime/mainnet/src/genesis_config_presets.rs index 82cab44e..85143732 100644 --- a/operator/runtime/mainnet/src/genesis_config_presets.rs +++ b/operator/runtime/mainnet/src/genesis_config_presets.rs @@ -6,6 +6,7 @@ use crate::{ use alloc::{format, vec, vec::Vec}; use fp_evm::GenesisAccount; use hex_literal::hex; +use pallet_external_validator_slashes::SlashingModeOption; use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use serde_json::Value; use sp_consensus_babe::AuthorityId as BabeId; @@ -106,6 +107,10 @@ fn testnet_genesis( phantom: Default::default(), members: treasury_council_members, }, + external_validators_slashes: pallet_external_validator_slashes::GenesisConfig { + slashing_mode: SlashingModeOption::Disabled, + ..Default::default() + }, ..Default::default() }; diff --git a/operator/runtime/stagenet/src/genesis_config_presets.rs b/operator/runtime/stagenet/src/genesis_config_presets.rs index 15167767..844ade99 100644 --- a/operator/runtime/stagenet/src/genesis_config_presets.rs +++ b/operator/runtime/stagenet/src/genesis_config_presets.rs @@ -6,6 +6,7 @@ use crate::{ use alloc::{format, vec, vec::Vec}; use fp_evm::GenesisAccount; use hex_literal::hex; +use pallet_external_validator_slashes::SlashingModeOption; use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use serde_json::Value; use sp_consensus_babe::AuthorityId as BabeId; @@ -106,6 +107,10 @@ fn testnet_genesis( phantom: Default::default(), members: treasury_council_members, }, + external_validators_slashes: pallet_external_validator_slashes::GenesisConfig { + slashing_mode: SlashingModeOption::LogOnly, + ..Default::default() + }, ..Default::default() }; diff --git a/operator/runtime/testnet/src/genesis_config_presets.rs b/operator/runtime/testnet/src/genesis_config_presets.rs index 8ffdd83f..9f23b0dd 100644 --- a/operator/runtime/testnet/src/genesis_config_presets.rs +++ b/operator/runtime/testnet/src/genesis_config_presets.rs @@ -6,6 +6,7 @@ use crate::{ use alloc::{format, vec, vec::Vec}; use fp_evm::GenesisAccount; use hex_literal::hex; +use pallet_external_validator_slashes::SlashingModeOption; use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use serde_json::Value; use sp_consensus_babe::AuthorityId as BabeId; @@ -106,6 +107,10 @@ fn testnet_genesis( phantom: Default::default(), members: treasury_council_members, }, + external_validators_slashes: pallet_external_validator_slashes::GenesisConfig { + slashing_mode: SlashingModeOption::Disabled, + ..Default::default() + }, ..Default::default() };