From 9de8394efad0b077b8001a89867f0cf61fce9eeb Mon Sep 17 00:00:00 2001 From: Luke Parker Date: Fri, 19 Sep 2025 22:44:29 -0400 Subject: [PATCH] Emit events within the signals pallet --- Cargo.lock | 1 + substrate/abi/src/signals.rs | 36 ++++++++------- substrate/signals/Cargo.toml | 20 ++++++-- substrate/signals/src/lib.rs | 88 ++++++++++++++---------------------- 4 files changed, 71 insertions(+), 74 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ea54e97a..9bcf3fec 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9720,6 +9720,7 @@ dependencies = [ "frame-system", "parity-scale-codec", "serai-abi", + "serai-core-pallet", "serai-validator-sets-pallet", "sp-core", ] diff --git a/substrate/abi/src/signals.rs b/substrate/abi/src/signals.rs index 588ca7f4..b9d2faaf 100644 --- a/substrate/abi/src/signals.rs +++ b/substrate/abi/src/signals.rs @@ -1,7 +1,9 @@ use borsh::{BorshSerialize, BorshDeserialize}; use serai_primitives::{ - address::SeraiAddress, network_id::NetworkId, validator_sets::ValidatorSet, signals::Signal, + address::SeraiAddress, + network_id::{ExternalNetworkId, NetworkId}, + signals::Signal, }; /// A call to signals. @@ -95,38 +97,40 @@ pub enum Event { /// The network with which favor for the signal was revoked. with_network: NetworkId, }, - /// A supermajority of a validator set now favor a signal. - SetInFavor { - /// The signal which now has a supermajority of a validator set favoring it. + /// A supermajority of a network's validator set now favor a signal. + NetworkInFavor { + /// The signal which now has a supermajority of a network's validator set favoring it. signal: Signal, - /// The validator set which is now considered to favor the signal. - set: ValidatorSet, + /// The network which is now considered to favor the signal. + network: NetworkId, }, - /// A validator set is no longer considered to favor a signal. - SetNoLongerInFavor { - /// The signal which no longer has the validator set considered in favor of it. + /// A network's validator set is no longer considered to favor a signal. + NetworkNoLongerInFavor { + /// The signal which no longer has the network considered in favor of it. signal: Signal, - /// The validator set which is no longer considered to be in favor of the signal. - set: ValidatorSet, + /// The network which is no longer considered to be in favor of the signal. + network: NetworkId, }, /// A retirement signal has been locked in. RetirementSignalLockedIn { /// The signal which has been locked in. signal: [u8; 32], }, - /// A validator set's ability to publish batches was halted. + /// A network's ability to publish batches was halted. /// /// This also halts set rotation in effect, as handovers are via new sets starting to publish /// batches. - SetHalted { - /// The signal which has been locked in. - signal: [u8; 32], + NetworkHalted { + /// The network which has been halted. + network: ExternalNetworkId, }, /// An account has stood against a signal. AgainstSignal { /// The signal stood against. signal: Signal, /// The account which stood against the signal. - who: SeraiAddress, + account: SeraiAddress, + /// The network with which this was expressed. + with_network: NetworkId, }, } diff --git a/substrate/signals/Cargo.toml b/substrate/signals/Cargo.toml index f658db96..b714499e 100644 --- a/substrate/signals/Cargo.toml +++ b/substrate/signals/Cargo.toml @@ -28,7 +28,8 @@ frame-support = { git = "https://github.com/serai-dex/patch-polkadot-sdk", rev = serai-abi = { path = "../abi", default-features = false, features = ["substrate"] } -validator-sets-pallet = { package = "serai-validator-sets-pallet", path = "../validator-sets", default-features = false } +serai-core-pallet = { path = "../core", default-features = false } +serai-validator-sets-pallet = { path = "../validator-sets", default-features = false } [features] std = [ @@ -41,15 +42,26 @@ std = [ "serai-abi/std", - "validator-sets-pallet/std", + "serai-core-pallet/std", + "serai-validator-sets-pallet/std", ] runtime-benchmarks = [ "frame-system/runtime-benchmarks", "frame-support/runtime-benchmarks", + + "serai-core-pallet/runtime-benchmarks", + "serai-validator-sets-pallet/runtime-benchmarks", ] -# TODO -try-runtime = [] +try-runtime = [ + "frame-system/try-runtime", + "frame-support/try-runtime", + + "serai-abi/try-runtime", + + "serai-core-pallet/try-runtime", + "serai-validator-sets-pallet/try-runtime", +] default = ["std"] diff --git a/substrate/signals/src/lib.rs b/substrate/signals/src/lib.rs index 4a08b9b8..96e46248 100644 --- a/substrate/signals/src/lib.rs +++ b/substrate/signals/src/lib.rs @@ -12,17 +12,19 @@ pub mod pallet { use serai_abi::{ primitives::{prelude::*, signals::*}, + signals::Event, SubstrateBlock, }; use frame_system::pallet_prelude::*; use frame_support::pallet_prelude::*; - use validator_sets_pallet::{Config as VsConfig, Pallet as VsPallet}; + use serai_validator_sets_pallet::{Config as VsConfig, Pallet as VsPallet}; + use serai_core_pallet::{Config as CoreConfig, Pallet as Core}; #[pallet::config] pub trait Config: - frame_system::Config + VsConfig + frame_system::Config + VsConfig + CoreConfig { /// How long a candidate retirement signal is valid for. /// @@ -172,12 +174,12 @@ pub mod pallet { let prior_in_favor = NetworksInFavor::::contains_key((signal, network)); NetworksInFavor::::set((signal, network), Some(())); if !prior_in_favor { - todo!("Event"); + Core::::emit_event(Event::NetworkInFavor { signal, network }); } } else { #[allow(clippy::collapsible_else_if)] if NetworksInFavor::::take((signal, network)).is_some() { - todo!("Event"); + Core::::emit_event(Event::NetworkNoLongerInFavor { signal, network }); } } @@ -225,7 +227,11 @@ pub mod pallet { Err::<(), _>(Error::::RevokingNonExistentFavor)?; } Favors::::remove((signal, for_network), validator); - // TODO: Event + Core::::emit_event(Event::FavorRevoked { + signal, + by: validator.into(), + with_network: for_network, + }); // Update the tally for this network Self::tally_for_network(signal, for_network); @@ -278,9 +284,10 @@ pub mod pallet { This prevents a malicious actor from frontrunning a proposal, causing them to be the registrant, just to cancel it later. */ + let registrant = SeraiAddress::from(validator); let signal = RegisteredRetirementSignal { in_favor_of, - registrant: validator.into(), + registrant, registered_at: frame_system::Pallet::::block_number(), }; let signal_id = signal.id(); @@ -290,7 +297,12 @@ pub mod pallet { } RegisteredRetirementSignals::::set(signal_id, Some(signal)); - // TODO: Event + Core::::emit_event(Event::RetirementSignalRegistered { + signal: signal_id, + in_favor_of, + registrant, + }); + Ok(()) } @@ -322,7 +334,8 @@ pub mod pallet { LockedInRetirement::::kill(); } - // TODO: Event + Core::::emit_event(Event::RetirementSignalRevoked { signal: retirement_signal }); + Ok(()) } @@ -366,7 +379,12 @@ pub mod pallet { // Set the validator as in favor Favors::::set((signal, for_network), validator, Some(())); - // TODO: Event + + Core::::emit_event(Event::SignalFavored { + signal, + by: validator.into(), + with_network: for_network, + }); // Check if the network is in favor let network_in_favor = Self::tally_for_network(signal, for_network); @@ -380,11 +398,11 @@ pub mod pallet { signal_id, frame_system::Pallet::::block_number() + T::RetirementLockInDuration::get(), ))); - // TODO: Event + Core::::emit_event(Event::RetirementSignalLockedIn { signal: signal_id }); } Signal::Halt(network) => { Halted::::set(network, Some(())); - // TODO: Event + Core::::emit_event(Event::NetworkHalted { network }); } } } @@ -451,53 +469,15 @@ pub mod pallet { } } - // Emit the event - // TODO: Event + Core::::emit_event(Event::AgainstSignal { + signal, + account: validator.into(), + with_network: for_network, + }); Ok(()) } } - - /* TODO - #[pallet::event] - #[pallet::generate_deposit(pub(super) fn deposit_event)] - pub enum Event { - RetirementSignalRegistered { - signal: [u8; 32], - in_favor_of: [u8; 32], - registrant: T::AccountId, - }, - RetirementSignalRevoked { - signal_id: [u8; 32], - }, - SignalFavored { - signal_id: Signal, - by: T::AccountId, - for_network: NetworkId, - }, - SetInFavor { - signal_id: Signal, - set: ValidatorSet, - }, - RetirementSignalLockedIn { - signal_id: [u8; 32], - }, - SetNoLongerInFavor { - signal_id: Signal, - set: ValidatorSet, - }, - FavorRevoked { - signal_id: Signal, - by: T::AccountId, - for_network: NetworkId, - }, - AgainstSignal { - signal_id: Signal, - who: T::AccountId, - for_network: NetworkId, - }, - } - */ } pub use pallet::*;