Enum pallet_referenda::Curve
source · pub enum Curve {
LinearDecreasing {
length: Perbill,
floor: Perbill,
ceil: Perbill,
},
SteppedDecreasing {
begin: Perbill,
end: Perbill,
step: Perbill,
period: Perbill,
},
Reciprocal {
factor: FixedI64,
x_offset: FixedI64,
y_offset: FixedI64,
},
}
Expand description
Type for describing a curve over the 2-dimensional space of axes between 0-1, as represented
by (Perbill, Perbill)
.
Variants§
LinearDecreasing
Linear curve starting at (0, ceil)
, proceeding linearly to (length, floor)
, then
remaining at floor
until the end of the period.
SteppedDecreasing
Stepped curve, beginning at (0, begin)
, then remaining constant for period
, at which
point it steps down to (period, begin - step)
. It then remains constant for another
period
before stepping down to (period * 2, begin - step * 2)
. This pattern continues
but the y
component has a lower limit of end
.
Reciprocal
A recipocal (K/(x+S)-T
) curve: factor
is K
and x_offset
is S
, y_offset
is T
.
Implementations§
source§impl Curve
impl Curve
sourcepub const fn make_linear(
length: u128,
period: u128,
floor: FixedI64,
ceil: FixedI64
) -> Curve
pub const fn make_linear( length: u128, period: u128, floor: FixedI64, ceil: FixedI64 ) -> Curve
Create a Curve::Linear
instance from a high-level description.
WARNING: This is a const
function designed for convenient use at build time and
will panic on overflow. Ensure that any inputs are sensible.
sourcepub const fn make_reciprocal(
delay: u128,
period: u128,
level: FixedI64,
floor: FixedI64,
ceil: FixedI64
) -> Curve
pub const fn make_reciprocal( delay: u128, period: u128, level: FixedI64, floor: FixedI64, ceil: FixedI64 ) -> Curve
Create a Curve::Reciprocal
instance from a high-level description.
WARNING: This is a const
function designed for convenient use at build time and
will panic on overflow. Ensure that any inputs are sensible.
sourcepub fn delay(&self, y: Perbill) -> Perbill
pub fn delay(&self, y: Perbill) -> Perbill
Determine the smallest x
value such that passing
returns true
when passed along with
the given y
value.
If passing
never returns true
for any value of x
when paired with y
, then
Perbill::one
may be returned.
let c = Curve::LinearDecreasing { begin: Perbill::one(), delta: Perbill::one() };
// ^^^ Can be any curve.
let y = Perbill::from_percent(50);
// ^^^ Can be any value.
let x = c.delay(y);
assert!(c.passing(x, y));
Trait Implementations§
source§impl Decode for Curve
impl Decode for Curve
source§fn decode<__CodecInputEdqy: Input>(
__codec_input_edqy: &mut __CodecInputEdqy
) -> Result<Self, Error>
fn decode<__CodecInputEdqy: Input>( __codec_input_edqy: &mut __CodecInputEdqy ) -> Result<Self, Error>
§fn decode_into<I>(
input: &mut I,
dst: &mut MaybeUninit<Self>
) -> Result<DecodeFinished, Error>where
I: Input,
fn decode_into<I>( input: &mut I, dst: &mut MaybeUninit<Self> ) -> Result<DecodeFinished, Error>where I: Input,
§fn skip<I>(input: &mut I) -> Result<(), Error>where
I: Input,
fn skip<I>(input: &mut I) -> Result<(), Error>where I: Input,
§fn encoded_fixed_size() -> Option<usize>
fn encoded_fixed_size() -> Option<usize>
source§impl Encode for Curve
impl Encode for Curve
source§fn encode_to<__CodecOutputEdqy: Output + ?Sized>(
&self,
__codec_dest_edqy: &mut __CodecOutputEdqy
)
fn encode_to<__CodecOutputEdqy: Output + ?Sized>( &self, __codec_dest_edqy: &mut __CodecOutputEdqy )
§fn using_encoded<R, F>(&self, f: F) -> Rwhere
F: FnOnce(&[u8]) -> R,
fn using_encoded<R, F>(&self, f: F) -> Rwhere F: FnOnce(&[u8]) -> R,
§fn encoded_size(&self) -> usize
fn encoded_size(&self) -> usize
source§impl MaxEncodedLen for Curve
impl MaxEncodedLen for Curve
source§fn max_encoded_len() -> usize
fn max_encoded_len() -> usize
source§impl PartialEq<Curve> for Curve
impl PartialEq<Curve> for Curve
impl EncodeLike<Curve> for Curve
impl Eq for Curve
impl StructuralEq for Curve
impl StructuralPartialEq for Curve
Auto Trait Implementations§
impl RefUnwindSafe for Curve
impl Send for Curve
impl Sync for Curve
impl Unpin for Curve
impl UnwindSafe for Curve
Blanket Implementations§
source§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
§impl<T> DecodeAll for Twhere
T: Decode,
impl<T> DecodeAll for Twhere T: Decode,
§fn decode_all(input: &mut &[u8]) -> Result<T, Error>
fn decode_all(input: &mut &[u8]) -> Result<T, Error>
Self
and consume all of the given input data. Read more§impl<T> DecodeLimit for Twhere
T: Decode,
impl<T> DecodeLimit for Twhere T: Decode,
source§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
source§impl<T> Hashable for Twhere
T: Codec,
impl<T> Hashable for Twhere T: Codec,
fn blake2_128(&self) -> [u8; 16]
fn blake2_256(&self) -> [u8; 32]
fn blake2_128_concat(&self) -> Vec<u8, Global> ⓘ
fn twox_128(&self) -> [u8; 16]
fn twox_256(&self) -> [u8; 32]
fn twox_64_concat(&self) -> Vec<u8, Global> ⓘ
fn identity(&self) -> Vec<u8, Global> ⓘ
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T, Outer> IsWrappedBy<Outer> for Twhere
Outer: AsRef<T> + AsMut<T> + From<T>,
T: From<Outer>,
impl<T, Outer> IsWrappedBy<Outer> for Twhere Outer: AsRef<T> + AsMut<T> + From<T>, T: From<Outer>,
§impl<T> KeyedVec for Twhere
T: Codec,
impl<T> KeyedVec for Twhere T: Codec,
§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
source§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere Self: UniqueSaturatedFrom<T>,
source§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere Self: UniqueSaturatedInto<T>,
T
. Read more§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.source§impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere T: UncheckedFrom<S>,
source§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
unchecked_from
.source§impl<T, S> UniqueSaturatedInto<T> for Swhere
T: Bounded,
S: TryInto<T>,
impl<T, S> UniqueSaturatedInto<T> for Swhere T: Bounded, S: TryInto<T>,
source§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T
.