This repository was archived by the owner on Nov 15, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2.7k
New Pallet: Root offences #11943
Merged
paritytech-processbot
merged 61 commits into
paritytech:master
from
Szegoo:root-offences
Sep 28, 2022
Merged
New Pallet: Root offences #11943
Changes from 14 commits
Commits
Show all changes
61 commits
Select commit
Hold shift + click to select a range
88667a5
root-offences pallet
Szegoo cd95c71
fix errors
Szegoo a95053c
cleaned up a bit
Szegoo 3b61dd7
remove unwrap()
Szegoo 5355022
new pallet is getting compiled
Szegoo aa41e2e
remove unnecessary type annotations
Szegoo e492fda
remove more unnecessary type annotations
Szegoo 4e56c30
addidtional cleaning
Szegoo 0f3caa2
commit
Szegoo a0ffc68
cleaned up
Szegoo 7e802f2
fix in logic
Szegoo ab31668
Merge branch 'paritytech:master' into root-offences
Szegoo 9c28dfe
add event
Szegoo 25f99e4
Merge branch 'paritytech:master' into root-offences
Szegoo 310d5fe
removed Clone trait from AccountId
Szegoo 354dcd1
test module
Szegoo 5c01f62
remove unused imports
Szegoo bb64363
fmt
Szegoo 4467957
Merge branch 'paritytech:master' into root-offences
Szegoo 41dbdd5
fix
Szegoo 0af2881
separate into functions, still messy
Szegoo c9e93c5
test
Szegoo f81c50a
first test
Szegoo b41af4a
fmt
Szegoo a0a2200
cleaned up a bit
Szegoo 3eda44d
separate into mock.rs and tests.rs
Szegoo 24f34c6
basic docs for now
Szegoo 3c13823
pallet_staking GenesisiConfig
Szegoo d053088
Merge branch 'paritytech:master' into root-offences
Szegoo e4f8d75
fix
Szegoo 94a134e
added start_session
Szegoo 99f7f3f
passing tests
Szegoo a7fd615
impl GenesisConfig for pallet_session
Szegoo 9ec53c8
updated event
Szegoo aa6ab8d
Update frame/root-offences/src/lib.rs
Szegoo ee47b01
Update frame/root-offences/src/lib.rs
Szegoo 160aa40
remove <T: Config
Szegoo ca78672
specifying trait bounds inside Config
Szegoo 0ff7a3e
commit
Szegoo 29a0bdc
active era increases correctly :)
Szegoo 04f7c2d
ExtBuilder
Szegoo 444da16
slashing works
Szegoo e0bf7c7
new test
Szegoo d941494
additional test
Szegoo 7627641
commit
Szegoo 84737f0
order
Szegoo bae19c0
fix?
Szegoo 4cc7538
fix in logic
Szegoo e2b6029
remove unnecessary
Szegoo 08921d2
Merge branch 'paritytech:master' into root-offences
Szegoo 6b14e12
Merge branch 'paritytech:master' into root-offences
Szegoo c944db1
wrap comment at 100
Szegoo 4b2526e
fmt
Szegoo 694b56c
Merge branch 'paritytech:master' into root-offences
Szegoo 33f07e9
merge fixes
Szegoo 7b6d8ef
Update frame/root-offences/src/lib.rs
Szegoo 7a79785
Update frame/root-offences/src/lib.rs
Szegoo 4838575
docs
Szegoo 6de5482
Update frame/root-offences/README.md
Szegoo 64ab683
Update frame/root-offences/Cargo.toml
Szegoo 83ff690
license header
Szegoo File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,40 @@ | ||
| [package] | ||
| name = "pallet-root-offences" | ||
| version = "1.0.0" | ||
| authors = ["Parity Technologies <[email protected]>"] | ||
| edition = "2021" | ||
| license = "Apache-2.0" | ||
| homepage = "https://substrate.io" | ||
| repository = "https://github.com/paritytech/substrate/" | ||
| description = "FRAME sudo offences pallet" | ||
Szegoo marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| [package.metadata.docs.rs] | ||
| targets = ["x86_64-unknown-linux-gnu"] | ||
|
|
||
| [dependencies] | ||
| codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } | ||
| scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } | ||
|
|
||
| pallet-session = { version = "4.0.0-dev", features = [ "historical" ], path = "../../frame/session", default-features = false } | ||
| pallet-staking = { version = "4.0.0-dev", default-features = false, path = "../../frame/staking" } | ||
| pallet-offences = { version = "4.0.0-dev", default-features = false, path = "../../frame/offences" } | ||
|
|
||
| frame-support = { version = "4.0.0-dev", default-features = false, path = "../support" } | ||
| frame-system = { version = "4.0.0-dev", default-features = false, path = "../system" } | ||
| sp-runtime = { version = "6.0.0", path = "../../primitives/runtime" } | ||
| sp-staking = { version = "4.0.0-dev", default-features = false, path = "../../primitives/staking" } | ||
|
|
||
| [features] | ||
| runtime-benchmarks = [] | ||
| try-runtime = [] | ||
Szegoo marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| default = ["std"] | ||
| std = [ | ||
| "codec/std", | ||
| "scale-info/std", | ||
| "pallet-session/std", | ||
| "pallet-staking/std", | ||
| "pallet-offences/std", | ||
| "frame-support/std", | ||
| "frame-system/std", | ||
Szegoo marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| "sp-runtime/std", | ||
| ] | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| # Sudo Offences Pallet | ||
|
|
||
| Pallet that allows the root to create an offence. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,110 @@ | ||
| // This file is part of Substrate. | ||
|
|
||
| // Copyright (C) 2022 Parity Technologies (UK) Ltd. | ||
| // SPDX-License-Identifier: Apache-2.0 | ||
|
|
||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||
| // you may not use this file except in compliance with the License. | ||
| // You may obtain a copy of the License at | ||
| // | ||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||
| // | ||
| // Unless required by applicable law or agreed to in writing, software | ||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| // See the License for the specific language governing permissions and | ||
| // limitations under the License. | ||
|
|
||
| //! # Sudo Offences Pallet | ||
| //! Pallet that allows the root to create an offence. | ||
|
|
||
| #![cfg_attr(not(feature = "std"), no_std)] | ||
|
|
||
| use pallet_session::historical::IdentificationTuple; | ||
| use pallet_staking::{BalanceOf, Exposure, ExposureOf, Pallet as Staking}; | ||
| use sp_runtime::{traits::Convert, Perbill}; | ||
| use sp_staking::offence::{DisableStrategy, OffenceDetails, OnOffenceHandler}; | ||
|
|
||
| pub use pallet::*; | ||
|
|
||
| #[frame_support::pallet] | ||
| pub mod pallet { | ||
| use super::*; | ||
| use frame_support::pallet_prelude::*; | ||
| use frame_system::pallet_prelude::*; | ||
|
|
||
| #[pallet::config] | ||
| pub trait Config: frame_system::Config + pallet_staking::Config { | ||
| type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>; | ||
| } | ||
|
|
||
| #[pallet::pallet] | ||
| #[pallet::generate_store(pub(super) trait Store)] | ||
| pub struct Pallet<T>(_); | ||
|
|
||
| #[pallet::call] | ||
| impl<T: Config> Pallet<T> | ||
| where | ||
| T: pallet_session::Config<ValidatorId = <T as frame_system::Config>::AccountId>, | ||
Szegoo marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| T: pallet_session::historical::Config< | ||
| FullIdentification = Exposure<<T as frame_system::Config>::AccountId, BalanceOf<T>>, | ||
| FullIdentificationOf = ExposureOf<T>, | ||
| >, | ||
| T::ValidatorIdOf: Convert< | ||
| <T as frame_system::Config>::AccountId, | ||
| Option<<T as frame_system::Config>::AccountId>, | ||
| >, | ||
| { | ||
| /// Allows the `root` to create an offence. | ||
| #[pallet::weight(10_000)] | ||
| pub fn create_offence( | ||
| origin: OriginFor<T>, | ||
| offenders: Vec<(T::AccountId, Perbill)>, | ||
| ) -> DispatchResult { | ||
| ensure_root(origin)?; | ||
|
|
||
| let slash_fractions = offenders | ||
| .clone() | ||
| .into_iter() | ||
| .map(|(_, fraction)| fraction) | ||
| .collect::<Vec<Perbill>>(); | ||
Szegoo marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| let active_era = Staking::<T>::active_era().ok_or(Error::<T>::FailedToGetActiveEra)?; | ||
| let now = active_era.index; | ||
|
|
||
| let offender_details: Vec<OffenceDetails<T::AccountId, IdentificationTuple<T>>> = | ||
| offenders | ||
| .clone() | ||
| .into_iter() | ||
| .map(|(o, _)| OffenceDetails::<T::AccountId, IdentificationTuple<T>> { | ||
| offender: (o.clone(), Staking::<T>::eras_stakers(now, o)), | ||
| reporters: vec![], | ||
| }) | ||
| .collect(); | ||
|
|
||
| let session_index = <pallet_session::Pallet<T> as frame_support::traits::ValidatorSet<T::AccountId>>::session_index(); | ||
|
|
||
| <pallet_staking::Pallet<T> as OnOffenceHandler< | ||
| T::AccountId, | ||
| IdentificationTuple<T>, | ||
| Weight, | ||
| >>::on_offence( | ||
| &offender_details, &slash_fractions, session_index, DisableStrategy::WhenSlashed | ||
| ); | ||
|
|
||
| Self::deposit_event(Event::RootCreatedOffence { offenders }); | ||
| Ok(()) | ||
| } | ||
| } | ||
|
|
||
| #[pallet::event] | ||
| #[pallet::generate_deposit(pub(super) fn deposit_event)] | ||
| pub enum Event<T: Config> { | ||
| RootCreatedOffence { offenders: Vec<(T::AccountId, Perbill)> }, | ||
| } | ||
|
|
||
| #[pallet::error] | ||
| pub enum Error<T> { | ||
| FailedToGetActiveEra, | ||
| } | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.