mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-27 08:07:58 +00:00
Mandatory dispatch class (#5515)
* Mandatory dispatch class * Tweaks * Docs * Fix test * Update frame/support/src/weights.rs Co-Authored-By: joe petrowski <25483142+joepetrowski@users.noreply.github.com> * Introduce logic that was stated in PR. * Use * Docs. * Fix test * Fix merge * Update frame/support/src/weights.rs Co-Authored-By: Bastian Köcher <bkchr@users.noreply.github.com> * Fix. * Fix Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com> Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
This commit is contained in:
@@ -85,6 +85,19 @@ pub enum DispatchClass {
|
||||
Normal,
|
||||
/// An operational dispatch.
|
||||
Operational,
|
||||
/// A mandatory dispatch. These kinds of dispatch are always included regardless of their
|
||||
/// weight, therefore it is critical that they are separately validated to ensure that a
|
||||
/// malicious validator cannot craft a valid but impossibly heavy block. Usually this just means
|
||||
/// ensuring that the extrinsic can only be included once and that it is always very light.
|
||||
///
|
||||
/// Do *NOT* use it for extrinsics that can be heavy.
|
||||
///
|
||||
/// The only real use case for this is inherent extrinsics that are required to execute in a
|
||||
/// block for the block to be valid, and it solves the issue in the case that the block
|
||||
/// initialization is sufficiently heavy to mean that those inherents do not fit into the
|
||||
/// block. Essentially, we assume that in these exceptional circumstances, it is better to
|
||||
/// allow an overweight block to be created than to not allow any block at all to be created.
|
||||
Mandatory,
|
||||
}
|
||||
|
||||
impl Default for DispatchClass {
|
||||
@@ -102,6 +115,8 @@ impl From<SimpleDispatchInfo> for DispatchClass {
|
||||
SimpleDispatchInfo::FixedNormal(_) => DispatchClass::Normal,
|
||||
SimpleDispatchInfo::MaxNormal => DispatchClass::Normal,
|
||||
SimpleDispatchInfo::InsecureFreeNormal => DispatchClass::Normal,
|
||||
|
||||
SimpleDispatchInfo::FixedMandatory(_) => DispatchClass::Mandatory,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -212,6 +227,11 @@ pub enum SimpleDispatchInfo {
|
||||
FixedOperational(Weight),
|
||||
/// An operational dispatch with the maximum weight.
|
||||
MaxOperational,
|
||||
/// A mandatory dispatch with fixed weight.
|
||||
///
|
||||
/// NOTE: Signed transactions may not (directly) dispatch this kind of a call, so the other
|
||||
/// attributes concerning transactability (e.g. priority, fee paying) are moot.
|
||||
FixedMandatory(Weight),
|
||||
}
|
||||
|
||||
impl<T> WeighData<T> for SimpleDispatchInfo {
|
||||
@@ -220,9 +240,9 @@ impl<T> WeighData<T> for SimpleDispatchInfo {
|
||||
SimpleDispatchInfo::FixedNormal(w) => *w,
|
||||
SimpleDispatchInfo::MaxNormal => Bounded::max_value(),
|
||||
SimpleDispatchInfo::InsecureFreeNormal => Bounded::min_value(),
|
||||
|
||||
SimpleDispatchInfo::FixedOperational(w) => *w,
|
||||
SimpleDispatchInfo::MaxOperational => Bounded::max_value(),
|
||||
SimpleDispatchInfo::FixedMandatory(w) => *w,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -239,9 +259,9 @@ impl<T> PaysFee<T> for SimpleDispatchInfo {
|
||||
SimpleDispatchInfo::FixedNormal(_) => true,
|
||||
SimpleDispatchInfo::MaxNormal => true,
|
||||
SimpleDispatchInfo::InsecureFreeNormal => true,
|
||||
|
||||
SimpleDispatchInfo::FixedOperational(_) => true,
|
||||
SimpleDispatchInfo::MaxOperational => true,
|
||||
SimpleDispatchInfo::FixedMandatory(_) => true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user