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() };