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

runtime/polkadot: enable disputes rewards and slashing #6960

Merged
merged 3 commits into from
May 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
33 changes: 27 additions & 6 deletions runtime/polkadot/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@ use runtime_common::{

use runtime_parachains::{
configuration as parachains_configuration, disputes as parachains_disputes,
dmp as parachains_dmp, hrmp as parachains_hrmp, inclusion as parachains_inclusion,
initializer as parachains_initializer, origin as parachains_origin, paras as parachains_paras,
disputes::slashing as parachains_slashing, dmp as parachains_dmp, hrmp as parachains_hrmp,
inclusion as parachains_inclusion, initializer as parachains_initializer,
origin as parachains_origin, paras as parachains_paras,
paras_inherent as parachains_paras_inherent, reward_points as parachains_reward_points,
runtime_api_impl::v4 as parachains_runtime_api_impl, scheduler as parachains_scheduler,
session_info as parachains_session_info, shared as parachains_shared, ump as parachains_ump,
Expand Down Expand Up @@ -464,9 +465,9 @@ impl pallet_election_provider_multi_phase::Config for Runtime {
type OffchainRepeat = OffchainRepeat;
type MinerTxPriority = NposSolutionPriority;
type DataProvider = Staking;
#[cfg(feature = "fast-runtime")]
#[cfg(any(feature = "fast-runtime", feature = "runtime-benchmarks"))]
type Fallback = onchain::OnChainExecution<OnChainSeqPhragmen>;
#[cfg(not(feature = "fast-runtime"))]
#[cfg(not(any(feature = "fast-runtime", feature = "runtime-benchmarks")))]
type Fallback = frame_election_provider_support::NoElection<(
AccountId,
BlockNumber,
Expand Down Expand Up @@ -1146,11 +1147,28 @@ impl parachains_initializer::Config for Runtime {

impl parachains_disputes::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
type RewardValidators = ();
type SlashingHandler = ();
type RewardValidators = parachains_reward_points::RewardValidatorsWithEraPoints<Runtime>;
type SlashingHandler = parachains_slashing::SlashValidatorsForDisputes<ParasSlashing>;
type WeightInfo = weights::runtime_parachains_disputes::WeightInfo<Runtime>;
}

impl parachains_slashing::Config for Runtime {
type KeyOwnerProofSystem = Historical;
type KeyOwnerProof =
<Self::KeyOwnerProofSystem as KeyOwnerProofSystem<(KeyTypeId, ValidatorId)>>::Proof;
type KeyOwnerIdentification = <Self::KeyOwnerProofSystem as KeyOwnerProofSystem<(
KeyTypeId,
ValidatorId,
)>>::IdentificationTuple;
type HandleReports = parachains_slashing::SlashingReportHandler<
Self::KeyOwnerIdentification,
Offences,
ReportLongevity,
>;
type WeightInfo = weights::runtime_parachains_disputes_slashing::WeightInfo<Runtime>;
type BenchmarkingConfig = parachains_slashing::BenchConfig<1000>;
}

parameter_types! {
// Mostly arbitrary deposit price, but should provide an adequate incentive not to spam reserve
// `ParaId`s.
Expand Down Expand Up @@ -1372,6 +1390,7 @@ construct_runtime! {
Hrmp: parachains_hrmp::{Pallet, Call, Storage, Event<T>, Config} = 60,
ParaSessionInfo: parachains_session_info::{Pallet, Storage} = 61,
ParasDisputes: parachains_disputes::{Pallet, Call, Storage, Event<T>} = 62,
ParasSlashing: parachains_slashing::{Pallet, Call, Storage, ValidateUnsigned} = 63,

// Parachain Onboarding Pallets. Start indices at 70 to leave room.
Registrar: paras_registrar::{Pallet, Call, Storage, Event<T>} = 70,
Expand Down Expand Up @@ -1462,6 +1481,7 @@ mod benches {
[runtime_common::paras_registrar, Registrar]
[runtime_parachains::configuration, Configuration]
[runtime_parachains::disputes, ParasDisputes]
[runtime_parachains::disputes::slashing, ParasSlashing]
[runtime_parachains::hrmp, Hrmp]
[runtime_parachains::initializer, Initializer]
[runtime_parachains::paras, Paras]
Expand Down Expand Up @@ -1974,6 +1994,7 @@ sp_api::impl_runtime_apis! {
impl frame_system_benchmarking::Config for Runtime {}
impl frame_benchmarking::baseline::Config for Runtime {}
impl pallet_nomination_pools_benchmarking::Config for Runtime {}
impl runtime_parachains::disputes::slashing::benchmarking::Config for Runtime {}

let whitelist: Vec<TrackedStorageKey> = vec![
// Block Number
Expand Down
1 change: 1 addition & 0 deletions runtime/polkadot/src/weights/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ pub mod runtime_common_paras_registrar;
pub mod runtime_common_slots;
pub mod runtime_parachains_configuration;
pub mod runtime_parachains_disputes;
pub mod runtime_parachains_disputes_slashing;
pub mod runtime_parachains_hrmp;
pub mod runtime_parachains_initializer;
pub mod runtime_parachains_paras;
Expand Down
102 changes: 102 additions & 0 deletions runtime/polkadot/src/weights/runtime_parachains_disputes_slashing.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
// Copyright 2017-2022 Parity Technologies (UK) Ltd.
// This file is part of Polkadot.

// Polkadot is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// Polkadot is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with Polkadot. If not, see <http://www.gnu.org/licenses/>.
//! Autogenerated weights for `runtime_parachains::disputes::slashing`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
//! DATE: 2023-03-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `bm3`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz`
//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 1024

// Executed Command:
// target/production/polkadot
// benchmark
// pallet
// --steps=50
// --repeat=20
// --extrinsic=*
// --execution=wasm
// --wasm-execution=compiled
// --heap-pages=4096
// --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/polkadot/.git/.artifacts/bench.json
// --pallet=runtime_parachains::disputes::slashing
// --chain=polkadot-dev
// --header=./file_header.txt
// --output=./runtime/polkadot/src/weights/

#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]

use frame_support::{traits::Get, weights::Weight};
use sp_std::marker::PhantomData;

/// Weight functions for `runtime_parachains::disputes::slashing`.
pub struct WeightInfo<T>(PhantomData<T>);
impl<T: frame_system::Config> runtime_parachains::disputes::slashing::WeightInfo for WeightInfo<T> {
/// Storage: Session CurrentIndex (r:1 w:0)
/// Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured)
/// Storage: Historical HistoricalSessions (r:1 w:0)
/// Proof: Historical HistoricalSessions (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
/// Storage: ParaSessionInfo Sessions (r:1 w:0)
/// Proof Skipped: ParaSessionInfo Sessions (max_values: None, max_size: None, mode: Measured)
/// Storage: ParasSlashing UnappliedSlashes (r:1 w:1)
/// Proof Skipped: ParasSlashing UnappliedSlashes (max_values: None, max_size: None, mode: Measured)
/// Storage: Offences ReportsByKindIndex (r:1 w:1)
/// Proof Skipped: Offences ReportsByKindIndex (max_values: None, max_size: None, mode: Measured)
/// Storage: Offences ConcurrentReportsIndex (r:1 w:1)
/// Proof Skipped: Offences ConcurrentReportsIndex (max_values: None, max_size: None, mode: Measured)
/// Storage: Offences Reports (r:1 w:1)
/// Proof Skipped: Offences Reports (max_values: None, max_size: None, mode: Measured)
/// Storage: Staking SlashRewardFraction (r:1 w:0)
/// Proof: Staking SlashRewardFraction (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen)
/// Storage: Staking ActiveEra (r:1 w:0)
/// Proof: Staking ActiveEra (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen)
/// Storage: Staking ErasStartSessionIndex (r:1 w:0)
/// Proof: Staking ErasStartSessionIndex (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen)
/// Storage: Staking Invulnerables (r:1 w:0)
/// Proof Skipped: Staking Invulnerables (max_values: Some(1), max_size: None, mode: Measured)
/// Storage: Staking ValidatorSlashInEra (r:1 w:1)
/// Proof: Staking ValidatorSlashInEra (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen)
/// Storage: Staking SlashingSpans (r:1 w:1)
/// Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured)
/// Storage: Staking SpanSlash (r:1 w:1)
/// Proof: Staking SpanSlash (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen)
/// Storage: Staking OffendingValidators (r:1 w:1)
/// Proof Skipped: Staking OffendingValidators (max_values: Some(1), max_size: None, mode: Measured)
/// Storage: Session Validators (r:1 w:0)
/// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured)
/// Storage: Session DisabledValidators (r:1 w:1)
/// Proof Skipped: Session DisabledValidators (max_values: Some(1), max_size: None, mode: Measured)
/// Storage: System Digest (r:1 w:1)
/// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured)
/// Storage: Staking UnappliedSlashes (r:1 w:1)
/// Proof Skipped: Staking UnappliedSlashes (max_values: None, max_size: None, mode: Measured)
/// The range of component `n` is `[4, 1000]`.
fn report_dispute_lost(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `5788 + n * (285 ±0)`
// Estimated: `107680 + n * (3726 ±0)`
// Minimum execution time: 119_613_000 picoseconds.
Weight::from_parts(142_363_720, 0)
.saturating_add(Weight::from_parts(0, 107680))
// Standard Error: 2_283
.saturating_add(Weight::from_parts(291_179, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(19))
.saturating_add(T::DbWeight::get().writes(11))
.saturating_add(Weight::from_parts(0, 3726).saturating_mul(n.into()))
}
}