mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-11-12 13:47:07 +00:00
Switch elections to Phragmen, enable them in PoA (#492)
* Switch elections to Phragmen, enable them in PoA * Remove superfluous code. * Build fixes * Update to substrate master * Build fixes * Add warning * Disable authority discovery for now * Remove commented code * Fix warning
This commit is contained in:
1 parent
dd2b43cd10
commit
425b884931
7 files changed
+181
-229
No files matched your search
@@ -19,10 +19,9 @@
|
||||
use primitives::Balance;
|
||||
use sr_primitives::weights::Weight;
|
||||
use sr_primitives::traits::{Convert, Saturating};
|
||||
use sr_primitives::Fixed64;
|
||||
use srml_support::traits::{OnUnbalanced, Currency};
|
||||
use crate::{Balances, Authorship, MaximumBlockWeight, NegativeImbalance};
|
||||
use crate::constants::fee::TARGET_BLOCK_FULLNESS;
|
||||
use sr_primitives::{Fixed64, Perbill};
|
||||
use srml_support::traits::{OnUnbalanced, Currency, Get};
|
||||
use crate::{Balances, System, Authorship, MaximumBlockWeight, NegativeImbalance};
|
||||
|
||||
/// Logic for the author to get a portion of fees.
|
||||
pub struct ToAuthor;
|
||||
@@ -67,27 +66,21 @@ impl Convert<Weight, Balance> for WeightToFee {
|
||||
}
|
||||
}
|
||||
|
||||
/// A struct that updates the weight multiplier based on the saturation level of the previous block.
|
||||
/// This should typically be called once per-block.
|
||||
/// Update the given multiplier based on the following formula
|
||||
///
|
||||
/// This assumes that weight is a numeric value in the u32 range.
|
||||
///
|
||||
/// Given `TARGET_BLOCK_FULLNESS = 1/2`, a block saturation greater than 1/2 will cause the system
|
||||
/// fees to slightly grow and the opposite for block saturations less than 1/2.
|
||||
///
|
||||
/// Formula:
|
||||
/// diff = (target_weight - current_block_weight)
|
||||
/// diff = (target_weight - previous_block_weight)
|
||||
/// v = 0.00004
|
||||
/// next_weight = weight * (1 + (v . diff) + (v . diff)^2 / 2)
|
||||
///
|
||||
/// Where `target_weight` must be given as the `Get` implementation of the `T` generic type.
|
||||
/// https://research.web3.foundation/en/latest/polkadot/Token%20Economics/#relay-chain-transaction-fees
|
||||
pub struct FeeMultiplierUpdateHandler;
|
||||
pub struct TargetedFeeAdjustment<T>(rstd::marker::PhantomData<T>);
|
||||
|
||||
impl Convert<(Weight, Fixed64), Fixed64> for FeeMultiplierUpdateHandler {
|
||||
fn convert(previous_state: (Weight, Fixed64)) -> Fixed64 {
|
||||
let (block_weight, multiplier) = previous_state;
|
||||
impl<T: Get<Perbill>> Convert<Fixed64, Fixed64> for TargetedFeeAdjustment<T> {
|
||||
fn convert(multiplier: Fixed64) -> Fixed64 {
|
||||
let block_weight = System::all_extrinsics_weight();
|
||||
let max_weight = MaximumBlockWeight::get();
|
||||
let target_weight = (TARGET_BLOCK_FULLNESS * max_weight) as u128;
|
||||
let target_weight = (T::get() * max_weight) as u128;
|
||||
let block_weight = block_weight as u128;
|
||||
|
||||
// determines if the first_term is positive
|
||||
@@ -99,8 +92,8 @@ impl Convert<(Weight, Fixed64), Fixed64> for FeeMultiplierUpdateHandler {
|
||||
|
||||
// 0.00004 = 4/100_000 = 40_000/10^9
|
||||
let v = Fixed64::from_rational(4, 100_000);
|
||||
// 0.00004^2 = 16/10^10 ~= 2/10^9. Taking the future /2 into account, then it is just 1 parts
|
||||
// from a billionth.
|
||||
// 0.00004^2 = 16/10^10 ~= 2/10^9. Taking the future /2 into account, then it is just 1
|
||||
// parts from a billionth.
|
||||
let v_squared_2 = Fixed64::from_rational(1, 1_000_000_000);
|
||||
|
||||
let first_term = v.saturating_mul(diff);
|
||||
|
||||
Reference in new issue
Block a user