mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-08 12:19:24 +00:00
Emit events within the signals pallet
This commit is contained in:
1
Cargo.lock
generated
1
Cargo.lock
generated
@@ -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",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -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,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"]
|
||||||
|
|||||||
@@ -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::*;
|
||||||
|
|||||||
Reference in New Issue
Block a user