Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

New Pallet: Root offences #11943

Merged
merged 61 commits into from
Sep 28, 2022
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
88667a5
root-offences pallet
Szegoo Jul 30, 2022
cd95c71
fix errors
Szegoo Jul 31, 2022
a95053c
cleaned up a bit
Szegoo Jul 31, 2022
3b61dd7
remove unwrap()
Szegoo Jul 31, 2022
5355022
new pallet is getting compiled
Szegoo Aug 1, 2022
aa41e2e
remove unnecessary type annotations
Szegoo Aug 1, 2022
e492fda
remove more unnecessary type annotations
Szegoo Aug 1, 2022
4e56c30
addidtional cleaning
Szegoo Aug 1, 2022
0f3caa2
commit
Szegoo Aug 1, 2022
a0ffc68
cleaned up
Szegoo Aug 1, 2022
7e802f2
fix in logic
Szegoo Aug 1, 2022
ab31668
Merge branch 'paritytech:master' into root-offences
Szegoo Aug 1, 2022
9c28dfe
add event
Szegoo Aug 1, 2022
25f99e4
Merge branch 'paritytech:master' into root-offences
Szegoo Aug 5, 2022
310d5fe
removed Clone trait from AccountId
Szegoo Aug 13, 2022
354dcd1
test module
Szegoo Aug 15, 2022
5c01f62
remove unused imports
Szegoo Aug 15, 2022
bb64363
fmt
Szegoo Aug 15, 2022
4467957
Merge branch 'paritytech:master' into root-offences
Szegoo Aug 15, 2022
41dbdd5
fix
Szegoo Aug 15, 2022
0af2881
separate into functions, still messy
Szegoo Aug 15, 2022
c9e93c5
test
Szegoo Aug 15, 2022
f81c50a
first test
Szegoo Aug 15, 2022
b41af4a
fmt
Szegoo Aug 15, 2022
a0a2200
cleaned up a bit
Szegoo Aug 15, 2022
3eda44d
separate into mock.rs and tests.rs
Szegoo Aug 16, 2022
24f34c6
basic docs for now
Szegoo Aug 16, 2022
3c13823
pallet_staking GenesisiConfig
Szegoo Aug 18, 2022
d053088
Merge branch 'paritytech:master' into root-offences
Szegoo Aug 18, 2022
e4f8d75
fix
Szegoo Aug 18, 2022
94a134e
added start_session
Szegoo Aug 18, 2022
99f7f3f
passing tests
Szegoo Aug 18, 2022
a7fd615
impl GenesisConfig for pallet_session
Szegoo Aug 18, 2022
9ec53c8
updated event
Szegoo Aug 19, 2022
aa6ab8d
Update frame/root-offences/src/lib.rs
Szegoo Aug 19, 2022
ee47b01
Update frame/root-offences/src/lib.rs
Szegoo Aug 19, 2022
160aa40
remove <T: Config
Szegoo Aug 19, 2022
ca78672
specifying trait bounds inside Config
Szegoo Aug 19, 2022
0ff7a3e
commit
Szegoo Aug 20, 2022
29a0bdc
active era increases correctly :)
Szegoo Aug 20, 2022
04f7c2d
ExtBuilder
Szegoo Aug 20, 2022
444da16
slashing works
Szegoo Aug 20, 2022
e0bf7c7
new test
Szegoo Aug 20, 2022
d941494
additional test
Szegoo Aug 20, 2022
7627641
commit
Szegoo Aug 20, 2022
84737f0
order
Szegoo Aug 20, 2022
bae19c0
fix?
Szegoo Aug 20, 2022
4cc7538
fix in logic
Szegoo Aug 20, 2022
e2b6029
remove unnecessary
Szegoo Aug 21, 2022
08921d2
Merge branch 'paritytech:master' into root-offences
Szegoo Aug 21, 2022
6b14e12
Merge branch 'paritytech:master' into root-offences
Szegoo Aug 29, 2022
c944db1
wrap comment at 100
Szegoo Aug 29, 2022
4b2526e
fmt
Szegoo Aug 29, 2022
694b56c
Merge branch 'paritytech:master' into root-offences
Szegoo Sep 23, 2022
33f07e9
merge fixes
Szegoo Sep 24, 2022
7b6d8ef
Update frame/root-offences/src/lib.rs
Szegoo Sep 26, 2022
7a79785
Update frame/root-offences/src/lib.rs
Szegoo Sep 26, 2022
4838575
docs
Szegoo Sep 26, 2022
6de5482
Update frame/root-offences/README.md
Szegoo Sep 27, 2022
64ab683
Update frame/root-offences/Cargo.toml
Szegoo Sep 27, 2022
83ff690
license header
Szegoo Sep 27, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ members = [
"frame/staking/reward-fn",
"frame/state-trie-migration",
"frame/sudo",
"frame/root-offences",
"frame/support",
"frame/support/procedural",
"frame/support/procedural/tools",
Expand Down
4 changes: 2 additions & 2 deletions frame/nomination-pools/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2471,8 +2471,8 @@ impl<T: Config> Pallet<T> {
impl<T: Config> OnStakerSlash<T::AccountId, BalanceOf<T>> for Pallet<T> {
fn on_slash(
pool_account: &T::AccountId,
// Bonded balance is always read directly from staking, therefore we need not update
// anything here.
// Bonded balance is always read directly from staking, therefore we
Szegoo marked this conversation as resolved.
Show resolved Hide resolved
// don't need to update anything here.
slashed_bonded: BalanceOf<T>,
slashed_unlocking: &BTreeMap<EraIndex, BalanceOf<T>>,
) {
Expand Down
40 changes: 40 additions & 0 deletions frame/root-offences/Cargo.toml
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.
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.
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.
Show resolved Hide resolved
"sp-runtime/std",
]
3 changes: 3 additions & 0 deletions frame/root-offences/README.md
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.
110 changes: 110 additions & 0 deletions frame/root-offences/src/lib.rs
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.
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.
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,
}
}
3 changes: 2 additions & 1 deletion frame/system/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,8 @@ pub mod pallet {
+ Debug
+ MaybeDisplay
+ Ord
+ MaxEncodedLen;
+ MaxEncodedLen
+ Clone;
KiChjang marked this conversation as resolved.
Show resolved Hide resolved

/// Converting trait to take a source type and convert to `AccountId`.
///
Expand Down