mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 05:51:02 +00:00
Add WeightInfo to Babe and Grandpa Pallet (#7155)
* Add `WeightInfo` to Babe Pallet * Also grandpa * Update frame/grandpa/src/default_weights.rs Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com> Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
// This file is part of Substrate.
|
||||
|
||||
// Copyright (C) 2020 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.
|
||||
|
||||
//! Default weights for the GRANDPA Pallet
|
||||
//! This file was not auto-generated.
|
||||
|
||||
use frame_support::weights::{
|
||||
Weight, constants::{WEIGHT_PER_MICROS, WEIGHT_PER_NANOS, RocksDbWeight as DbWeight},
|
||||
};
|
||||
|
||||
impl crate::WeightInfo for () {
|
||||
fn report_equivocation(validator_count: u32) -> Weight {
|
||||
// we take the validator set count from the membership proof to
|
||||
// calculate the weight but we set a floor of 100 validators.
|
||||
let validator_count = validator_count.max(100) as u64;
|
||||
|
||||
// worst case we are considering is that the given offender
|
||||
// is backed by 200 nominators
|
||||
const MAX_NOMINATORS: u64 = 200;
|
||||
|
||||
// checking membership proof
|
||||
(35 * WEIGHT_PER_MICROS)
|
||||
.saturating_add((175 * WEIGHT_PER_NANOS).saturating_mul(validator_count))
|
||||
.saturating_add(DbWeight::get().reads(5))
|
||||
// check equivocation proof
|
||||
.saturating_add(95 * WEIGHT_PER_MICROS)
|
||||
// report offence
|
||||
.saturating_add(110 * WEIGHT_PER_MICROS)
|
||||
.saturating_add(25 * WEIGHT_PER_MICROS * MAX_NOMINATORS)
|
||||
.saturating_add(DbWeight::get().reads(14 + 3 * MAX_NOMINATORS))
|
||||
.saturating_add(DbWeight::get().writes(10 + 3 * MAX_NOMINATORS))
|
||||
// fetching set id -> session index mappings
|
||||
.saturating_add(DbWeight::get().reads(2))
|
||||
}
|
||||
|
||||
fn note_stalled() -> Weight {
|
||||
(3 * WEIGHT_PER_MICROS)
|
||||
.saturating_add(DbWeight::get().writes(1))
|
||||
}
|
||||
}
|
||||
@@ -41,7 +41,7 @@ use fg_primitives::{
|
||||
};
|
||||
use frame_support::{
|
||||
decl_error, decl_event, decl_module, decl_storage, dispatch::DispatchResultWithPostInfo,
|
||||
storage, traits::KeyOwnerProofSystem, weights::Pays, Parameter,
|
||||
storage, traits::KeyOwnerProofSystem, weights::{Pays, Weight}, Parameter,
|
||||
};
|
||||
use frame_system::{ensure_none, ensure_root, ensure_signed};
|
||||
use pallet_finality_tracker::OnFinalizationStalled;
|
||||
@@ -54,6 +54,7 @@ use sp_session::{GetSessionNumber, GetValidatorCount};
|
||||
use sp_staking::SessionIndex;
|
||||
|
||||
mod equivocation;
|
||||
mod default_weights;
|
||||
|
||||
#[cfg(any(feature = "runtime-benchmarks", test))]
|
||||
mod benchmarking;
|
||||
@@ -97,6 +98,14 @@ pub trait Trait: frame_system::Trait {
|
||||
/// `()`) you must use this pallet's `ValidateUnsigned` in the runtime
|
||||
/// definition.
|
||||
type HandleEquivocation: HandleEquivocation<Self>;
|
||||
|
||||
/// Weights for this pallet.
|
||||
type WeightInfo: WeightInfo;
|
||||
}
|
||||
|
||||
pub trait WeightInfo {
|
||||
fn report_equivocation(validator_count: u32) -> Weight;
|
||||
fn note_stalled() -> Weight;
|
||||
}
|
||||
|
||||
/// A stored pending change, old format.
|
||||
@@ -242,7 +251,7 @@ decl_module! {
|
||||
/// equivocation proof and validate the given key ownership proof
|
||||
/// against the extracted offender. If both are valid, the offence
|
||||
/// will be reported.
|
||||
#[weight = weight_for::report_equivocation::<T>(key_owner_proof.validator_count())]
|
||||
#[weight = T::WeightInfo::report_equivocation(key_owner_proof.validator_count())]
|
||||
fn report_equivocation(
|
||||
origin,
|
||||
equivocation_proof: EquivocationProof<T::Hash, T::BlockNumber>,
|
||||
@@ -266,7 +275,7 @@ decl_module! {
|
||||
/// block authors will call it (validated in `ValidateUnsigned`), as such
|
||||
/// if the block author is defined it will be defined as the equivocation
|
||||
/// reporter.
|
||||
#[weight = weight_for::report_equivocation::<T>(key_owner_proof.validator_count())]
|
||||
#[weight = T::WeightInfo::report_equivocation(key_owner_proof.validator_count())]
|
||||
fn report_equivocation_unsigned(
|
||||
origin,
|
||||
equivocation_proof: EquivocationProof<T::Hash, T::BlockNumber>,
|
||||
@@ -288,7 +297,7 @@ decl_module! {
|
||||
/// forced change will not be re-orged (e.g. 1000 blocks). The GRANDPA voters
|
||||
/// will start the new authority set using the given finalized block as base.
|
||||
/// Only callable by root.
|
||||
#[weight = weight_for::note_stalled::<T>()]
|
||||
#[weight = T::WeightInfo::note_stalled()]
|
||||
fn note_stalled(
|
||||
origin,
|
||||
delay: T::BlockNumber,
|
||||
@@ -364,45 +373,6 @@ decl_module! {
|
||||
}
|
||||
}
|
||||
|
||||
mod weight_for {
|
||||
use frame_support::{
|
||||
traits::Get,
|
||||
weights::{
|
||||
constants::{WEIGHT_PER_MICROS, WEIGHT_PER_NANOS},
|
||||
Weight,
|
||||
},
|
||||
};
|
||||
|
||||
pub fn report_equivocation<T: super::Trait>(validator_count: u32) -> Weight {
|
||||
// we take the validator set count from the membership proof to
|
||||
// calculate the weight but we set a floor of 100 validators.
|
||||
let validator_count = validator_count.max(100) as u64;
|
||||
|
||||
// worst case we are considering is that the given offender
|
||||
// is backed by 200 nominators
|
||||
const MAX_NOMINATORS: u64 = 200;
|
||||
|
||||
// checking membership proof
|
||||
(35 * WEIGHT_PER_MICROS)
|
||||
.saturating_add((175 * WEIGHT_PER_NANOS).saturating_mul(validator_count))
|
||||
.saturating_add(T::DbWeight::get().reads(5))
|
||||
// check equivocation proof
|
||||
.saturating_add(95 * WEIGHT_PER_MICROS)
|
||||
// report offence
|
||||
.saturating_add(110 * WEIGHT_PER_MICROS)
|
||||
.saturating_add(25 * WEIGHT_PER_MICROS * MAX_NOMINATORS)
|
||||
.saturating_add(T::DbWeight::get().reads(14 + 3 * MAX_NOMINATORS))
|
||||
.saturating_add(T::DbWeight::get().writes(10 + 3 * MAX_NOMINATORS))
|
||||
// fetching set id -> session index mappings
|
||||
.saturating_add(T::DbWeight::get().reads(2))
|
||||
}
|
||||
|
||||
pub fn note_stalled<T: super::Trait>() -> Weight {
|
||||
(3 * WEIGHT_PER_MICROS)
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Trait> Module<T> {
|
||||
/// Get the current set of authorities, along with their respective weights.
|
||||
pub fn grandpa_authorities() -> AuthorityList {
|
||||
|
||||
@@ -262,6 +262,8 @@ impl Trait for Test {
|
||||
)>>::IdentificationTuple;
|
||||
|
||||
type HandleEquivocation = super::EquivocationHandler<Self::KeyOwnerIdentification, Offences>;
|
||||
|
||||
type WeightInfo = ();
|
||||
}
|
||||
|
||||
mod pallet_grandpa {
|
||||
|
||||
@@ -850,7 +850,7 @@ fn report_equivocation_has_valid_weight() {
|
||||
// but there's a lower bound of 100 validators.
|
||||
assert!(
|
||||
(1..=100)
|
||||
.map(weight_for::report_equivocation::<Test>)
|
||||
.map(<Test as Trait>::WeightInfo::report_equivocation)
|
||||
.collect::<Vec<_>>()
|
||||
.windows(2)
|
||||
.all(|w| w[0] == w[1])
|
||||
@@ -860,7 +860,7 @@ fn report_equivocation_has_valid_weight() {
|
||||
// with every extra validator.
|
||||
assert!(
|
||||
(100..=1000)
|
||||
.map(weight_for::report_equivocation::<Test>)
|
||||
.map(<Test as Trait>::WeightInfo::report_equivocation)
|
||||
.collect::<Vec<_>>()
|
||||
.windows(2)
|
||||
.all(|w| w[0] < w[1])
|
||||
|
||||
Reference in New Issue
Block a user