Emit events within the signals pallet

This commit is contained in:
Luke Parker
2025-09-19 22:44:29 -04:00
parent 3cb9432daa
commit 9de8394efa
4 changed files with 71 additions and 74 deletions

1
Cargo.lock generated
View File

@@ -9720,6 +9720,7 @@ dependencies = [
"frame-system", "frame-system",
"parity-scale-codec", "parity-scale-codec",
"serai-abi", "serai-abi",
"serai-core-pallet",
"serai-validator-sets-pallet", "serai-validator-sets-pallet",
"sp-core", "sp-core",
] ]

View File

@@ -1,7 +1,9 @@
use borsh::{BorshSerialize, BorshDeserialize}; use borsh::{BorshSerialize, BorshDeserialize};
use serai_primitives::{ 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. /// A call to signals.
@@ -95,38 +97,40 @@ pub enum Event {
/// The network with which favor for the signal was revoked. /// The network with which favor for the signal was revoked.
with_network: NetworkId, with_network: NetworkId,
}, },
/// A supermajority of a validator set now favor a signal. /// A supermajority of a network's validator set now favor a signal.
SetInFavor { NetworkInFavor {
/// The signal which now has a supermajority of a validator set favoring it. /// The signal which now has a supermajority of a network's validator set favoring it.
signal: Signal, signal: Signal,
/// The validator set which is now considered to favor the signal. /// The network which is now considered to favor the signal.
set: ValidatorSet, network: NetworkId,
}, },
/// A validator set is no longer considered to favor a signal. /// A network's validator set is no longer considered to favor a signal.
SetNoLongerInFavor { NetworkNoLongerInFavor {
/// The signal which no longer has the validator set considered in favor of it. /// The signal which no longer has the network considered in favor of it.
signal: Signal, signal: Signal,
/// The validator set which is no longer considered to be in favor of the signal. /// The network which is no longer considered to be in favor of the signal.
set: ValidatorSet, network: NetworkId,
}, },
/// A retirement signal has been locked in. /// A retirement signal has been locked in.
RetirementSignalLockedIn { RetirementSignalLockedIn {
/// The signal which has been locked in. /// The signal which has been locked in.
signal: [u8; 32], 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 /// This also halts set rotation in effect, as handovers are via new sets starting to publish
/// batches. /// batches.
SetHalted { NetworkHalted {
/// The signal which has been locked in. /// The network which has been halted.
signal: [u8; 32], network: ExternalNetworkId,
}, },
/// An account has stood against a signal. /// An account has stood against a signal.
AgainstSignal { AgainstSignal {
/// The signal stood against. /// The signal stood against.
signal: Signal, signal: Signal,
/// The account which stood against the signal. /// The account which stood against the signal.
who: SeraiAddress, account: SeraiAddress,
/// The network with which this was expressed.
with_network: NetworkId,
}, },
} }

View File

@@ -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"] } 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] [features]
std = [ std = [
@@ -41,15 +42,26 @@ std = [
"serai-abi/std", "serai-abi/std",
"validator-sets-pallet/std", "serai-core-pallet/std",
"serai-validator-sets-pallet/std",
] ]
runtime-benchmarks = [ runtime-benchmarks = [
"frame-system/runtime-benchmarks", "frame-system/runtime-benchmarks",
"frame-support/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"] default = ["std"]

View File

@@ -12,17 +12,19 @@ pub mod pallet {
use serai_abi::{ use serai_abi::{
primitives::{prelude::*, signals::*}, primitives::{prelude::*, signals::*},
signals::Event,
SubstrateBlock, SubstrateBlock,
}; };
use frame_system::pallet_prelude::*; use frame_system::pallet_prelude::*;
use frame_support::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] #[pallet::config]
pub trait Config: pub trait Config:
frame_system::Config<AccountId = Public, Block = SubstrateBlock> + VsConfig frame_system::Config<AccountId = Public, Block = SubstrateBlock> + VsConfig + CoreConfig
{ {
/// How long a candidate retirement signal is valid for. /// How long a candidate retirement signal is valid for.
/// ///
@@ -172,12 +174,12 @@ pub mod pallet {
let prior_in_favor = NetworksInFavor::<T>::contains_key((signal, network)); let prior_in_favor = NetworksInFavor::<T>::contains_key((signal, network));
NetworksInFavor::<T>::set((signal, network), Some(())); NetworksInFavor::<T>::set((signal, network), Some(()));
if !prior_in_favor { if !prior_in_favor {
todo!("Event"); Core::<T>::emit_event(Event::NetworkInFavor { signal, network });
} }
} else { } else {
#[allow(clippy::collapsible_else_if)] #[allow(clippy::collapsible_else_if)]
if NetworksInFavor::<T>::take((signal, network)).is_some() { if NetworksInFavor::<T>::take((signal, network)).is_some() {
todo!("Event"); Core::<T>::emit_event(Event::NetworkNoLongerInFavor { signal, network });
} }
} }
@@ -225,7 +227,11 @@ pub mod pallet {
Err::<(), _>(Error::<T>::RevokingNonExistentFavor)?; Err::<(), _>(Error::<T>::RevokingNonExistentFavor)?;
} }
Favors::<T>::remove((signal, for_network), validator); Favors::<T>::remove((signal, for_network), validator);
// TODO: Event Core::<T>::emit_event(Event::FavorRevoked {
signal,
by: validator.into(),
with_network: for_network,
});
// Update the tally for this network // Update the tally for this network
Self::tally_for_network(signal, for_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 This prevents a malicious actor from frontrunning a proposal, causing them to be the
registrant, just to cancel it later. registrant, just to cancel it later.
*/ */
let registrant = SeraiAddress::from(validator);
let signal = RegisteredRetirementSignal { let signal = RegisteredRetirementSignal {
in_favor_of, in_favor_of,
registrant: validator.into(), registrant,
registered_at: frame_system::Pallet::<T>::block_number(), registered_at: frame_system::Pallet::<T>::block_number(),
}; };
let signal_id = signal.id(); let signal_id = signal.id();
@@ -290,7 +297,12 @@ pub mod pallet {
} }
RegisteredRetirementSignals::<T>::set(signal_id, Some(signal)); RegisteredRetirementSignals::<T>::set(signal_id, Some(signal));
// TODO: Event Core::<T>::emit_event(Event::RetirementSignalRegistered {
signal: signal_id,
in_favor_of,
registrant,
});
Ok(()) Ok(())
} }
@@ -322,7 +334,8 @@ pub mod pallet {
LockedInRetirement::<T>::kill(); LockedInRetirement::<T>::kill();
} }
// TODO: Event Core::<T>::emit_event(Event::RetirementSignalRevoked { signal: retirement_signal });
Ok(()) Ok(())
} }
@@ -366,7 +379,12 @@ pub mod pallet {
// Set the validator as in favor // Set the validator as in favor
Favors::<T>::set((signal, for_network), validator, Some(())); Favors::<T>::set((signal, for_network), validator, Some(()));
// TODO: Event
Core::<T>::emit_event(Event::SignalFavored {
signal,
by: validator.into(),
with_network: for_network,
});
// Check if the network is in favor // Check if the network is in favor
let network_in_favor = Self::tally_for_network(signal, for_network); let network_in_favor = Self::tally_for_network(signal, for_network);
@@ -380,11 +398,11 @@ pub mod pallet {
signal_id, signal_id,
frame_system::Pallet::<T>::block_number() + T::RetirementLockInDuration::get(), frame_system::Pallet::<T>::block_number() + T::RetirementLockInDuration::get(),
))); )));
// TODO: Event Core::<T>::emit_event(Event::RetirementSignalLockedIn { signal: signal_id });
} }
Signal::Halt(network) => { Signal::Halt(network) => {
Halted::<T>::set(network, Some(())); Halted::<T>::set(network, Some(()));
// TODO: Event Core::<T>::emit_event(Event::NetworkHalted { network });
} }
} }
} }
@@ -451,53 +469,15 @@ pub mod pallet {
} }
} }
// Emit the event Core::<T>::emit_event(Event::AgainstSignal {
// TODO: Event signal,
account: validator.into(),
with_network: for_network,
});
Ok(()) Ok(())
} }
} }
/* TODO
#[pallet::event]
#[pallet::generate_deposit(pub(super) fn deposit_event)]
pub enum Event<T: Config> {
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::*; pub use pallet::*;