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",
"parity-scale-codec",
"serai-abi",
"serai-core-pallet",
"serai-validator-sets-pallet",
"sp-core",
]

View File

@@ -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,
},
}

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"] }
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"]

View File

@@ -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<AccountId = Public, Block = SubstrateBlock> + VsConfig
frame_system::Config<AccountId = Public, Block = SubstrateBlock> + VsConfig + CoreConfig
{
/// 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));
NetworksInFavor::<T>::set((signal, network), Some(()));
if !prior_in_favor {
todo!("Event");
Core::<T>::emit_event(Event::NetworkInFavor { signal, network });
}
} else {
#[allow(clippy::collapsible_else_if)]
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)?;
}
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
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::<T>::block_number(),
};
let signal_id = signal.id();
@@ -290,7 +297,12 @@ pub mod pallet {
}
RegisteredRetirementSignals::<T>::set(signal_id, Some(signal));
// TODO: Event
Core::<T>::emit_event(Event::RetirementSignalRegistered {
signal: signal_id,
in_favor_of,
registrant,
});
Ok(())
}
@@ -322,7 +334,8 @@ pub mod pallet {
LockedInRetirement::<T>::kill();
}
// TODO: Event
Core::<T>::emit_event(Event::RetirementSignalRevoked { signal: retirement_signal });
Ok(())
}
@@ -366,7 +379,12 @@ pub mod pallet {
// Set the validator as in favor
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
let network_in_favor = Self::tally_for_network(signal, for_network);
@@ -380,11 +398,11 @@ pub mod pallet {
signal_id,
frame_system::Pallet::<T>::block_number() + T::RetirementLockInDuration::get(),
)));
// TODO: Event
Core::<T>::emit_event(Event::RetirementSignalLockedIn { signal: signal_id });
}
Signal::Halt(network) => {
Halted::<T>::set(network, Some(()));
// TODO: Event
Core::<T>::emit_event(Event::NetworkHalted { network });
}
}
}
@@ -451,53 +469,15 @@ pub mod pallet {
}
}
// Emit the event
// TODO: Event
Core::<T>::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<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::*;