mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-20 12:51:02 +00:00
Companion for Decouple Staking and Election - Part 3: Signed Phase (#2793)
* Companion for Decouple Staking and Election - Part 3: Signed Phase https://github.com/paritytech/substrate/pull/7910 * remove some config types * allow up to 5 signed submissions on polkadot and kusama * signed phase is equal induration to unsigned phase * use chain defaults for base and per-byte deposits; >= 16 SignedMaxSubmissions * use a small but non-trivial solution reward * reduce signed deposit per byte fee * reduce signed reward, adjust polkadot expected soln size * copy submit benchmark from substrate * demo calculating an appropriate fee for the signed reward Unfortunately, this doesn't work: it needs to be a constant function, and AFAIK there's no way to make a trait method constant. * SignedRewardBase is 1.5x the fee to submit a signed solution * all chains use deposit byte of base per 50k * update Substrate * cargo update -p pallet-election-provider-multi-phase Co-authored-by: parity-processbot <>
This commit is contained in:
committed by
GitHub
parent
e8d7e9f0dc
commit
95736d1bf1
@@ -0,0 +1,61 @@
|
||||
// Copyright 2021 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/>.
|
||||
|
||||
//! Code for elections.
|
||||
|
||||
use frame_support::{
|
||||
parameter_types,
|
||||
traits::Get,
|
||||
weights::{DispatchClass, Weight, WeightToFeePolynomial},
|
||||
};
|
||||
use sp_runtime::Perbill;
|
||||
use super::{BlockExecutionWeight, BlockLength, BlockWeights};
|
||||
|
||||
parameter_types! {
|
||||
/// A limit for off-chain phragmen unsigned solution submission.
|
||||
///
|
||||
/// We want to keep it as high as possible, but can't risk having it reject,
|
||||
/// so we always subtract the base block execution weight.
|
||||
pub OffchainSolutionWeightLimit: Weight = BlockWeights::get()
|
||||
.get(DispatchClass::Normal)
|
||||
.max_extrinsic
|
||||
.expect("Normal extrinsics have weight limit configured by default; qed")
|
||||
.saturating_sub(BlockExecutionWeight::get());
|
||||
|
||||
/// A limit for off-chain phragmen unsigned solution length.
|
||||
///
|
||||
/// We allow up to 90% of the block's size to be consumed by the solution.
|
||||
pub OffchainSolutionLengthLimit: u32 = Perbill::from_rational(90_u32, 100) *
|
||||
*BlockLength::get()
|
||||
.max
|
||||
.get(DispatchClass::Normal);
|
||||
}
|
||||
|
||||
/// Compute the expected fee for submitting an election solution.
|
||||
///
|
||||
/// This is `multiplier` multiplied by the fee for the expected submission weight according to the
|
||||
/// weight info.
|
||||
///
|
||||
/// Assumes that the signed submission queue is full.
|
||||
pub fn fee_for_submit_call<T, WeightToFee, WeightInfo>(multiplier: Perbill) -> WeightToFee::Balance
|
||||
where
|
||||
T: pallet_election_provider_multi_phase::Config,
|
||||
WeightToFee: WeightToFeePolynomial,
|
||||
WeightInfo: pallet_election_provider_multi_phase::WeightInfo,
|
||||
{
|
||||
let expected_weight = WeightInfo::submit(T::SignedMaxSubmissions::get());
|
||||
multiplier * WeightToFee::calc(&expected_weight)
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2019-2020 Parity Technologies (UK) Ltd.
|
||||
// Copyright 2019-2021 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Polkadot.
|
||||
|
||||
// Polkadot is free software: you can redistribute it and/or modify
|
||||
@@ -30,6 +30,7 @@ pub mod paras_registrar;
|
||||
pub mod slot_range;
|
||||
pub mod traits;
|
||||
pub mod xcm_sender;
|
||||
pub mod elections;
|
||||
|
||||
#[cfg(test)]
|
||||
mod mock;
|
||||
@@ -54,6 +55,7 @@ pub use pallet_staking::StakerStatus;
|
||||
pub use sp_runtime::BuildStorage;
|
||||
pub use pallet_timestamp::Call as TimestampCall;
|
||||
pub use pallet_balances::Call as BalancesCall;
|
||||
pub use elections::{OffchainSolutionLengthLimit, OffchainSolutionWeightLimit};
|
||||
|
||||
/// Implementations of some helper traits passed into runtime modules as associated types.
|
||||
pub use impls::ToAuthor;
|
||||
@@ -108,26 +110,6 @@ parameter_types! {
|
||||
.build_or_panic();
|
||||
}
|
||||
|
||||
parameter_types! {
|
||||
/// A limit for off-chain phragmen unsigned solution submission.
|
||||
///
|
||||
/// We want to keep it as high as possible, but can't risk having it reject,
|
||||
/// so we always subtract the base block execution weight.
|
||||
pub OffchainSolutionWeightLimit: Weight = BlockWeights::get()
|
||||
.get(DispatchClass::Normal)
|
||||
.max_extrinsic
|
||||
.expect("Normal extrinsics have weight limit configured by default; qed")
|
||||
.saturating_sub(BlockExecutionWeight::get());
|
||||
|
||||
/// A limit for off-chain phragmen unsigned solution length.
|
||||
///
|
||||
/// We allow up to 90% of the block's size to be consumed by the solution.
|
||||
pub OffchainSolutionLengthLimit: u32 = Perbill::from_rational(90_u32, 100) *
|
||||
*BlockLength::get()
|
||||
.max
|
||||
.get(DispatchClass::Normal);
|
||||
}
|
||||
|
||||
/// Parameterized slow adjusting fee updated based on
|
||||
/// https://w3f-research.readthedocs.io/en/latest/polkadot/Token%20Economics.html#-2.-slow-adjusting-mechanism
|
||||
pub type SlowAdjustingFeeUpdate<R> = TargetedFeeAdjustment<
|
||||
|
||||
Reference in New Issue
Block a user