pub struct DigestInfo<T: Config<I>, I: 'static = ()>(/* private fields */);Expand description
Stores balance information for each variant of a digest.
A digest may have multiple semantic variants (e.g. Affirmative, Contrary, etc),
each maintaining its own balance. This structure tracks the corresponding
LazyBalanceOf for every variant.
Internally, it is backed by a BoundedVec whose length is fixed to the
number of semantic variants defined by Config::Position via the
VariantCount bound. This guarantees a single, stable slot per variant.
In some scenarios, a higher-indexed variant may be initialized before its preceding variants. In such cases, the earlier slots are filled with a default lazy balance to preserve positional invariants. While eagerly initializing all slots would also be invariant-safe, it could increase storage usage when many digests exist or when commitments do not utilize all variants.
To keep storage usage minimal, it is expected that the default variant
([Default] for Config::Position) occupies index 0, as defined by
PositionIndex.
Implementations§
Source§impl<T: Config<I>, I: 'static> DigestInfo<T, I>
impl<T: Config<I>, I: 'static> DigestInfo<T, I>
Sourcepub fn balances(
&self,
) -> Result<Vec<(T::Position, LazyBalanceOf<T, I>)>, DispatchError>
pub fn balances( &self, ) -> Result<Vec<(T::Position, LazyBalanceOf<T, I>)>, DispatchError>
Returns the actively funded lazy balances of commitment digests along with their corresponding semantic positions (commit variants).
Returns DispatchError if lookup or decoding fails.
pub fn get_balance(&self, variant: &T::Position) -> Option<&LazyBalanceOf<T, I>>
pub fn reveal( &self, ) -> BoundedVec<LazyBalanceOf<T, I>, VariantCountOf<T::Position>>
Trait Implementations§
Source§impl<T: Clone + Config<I>, I: Clone + 'static> Clone for DigestInfo<T, I>
impl<T: Clone + Config<I>, I: Clone + 'static> Clone for DigestInfo<T, I>
Source§fn clone(&self) -> DigestInfo<T, I>
fn clone(&self) -> DigestInfo<T, I>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<T, I> Debug for DigestInfo<T, I>
impl<T, I> Debug for DigestInfo<T, I>
Source§impl<T: Config<I>, I: 'static> Decode for DigestInfo<T, I>
impl<T: Config<I>, I: 'static> Decode for DigestInfo<T, I>
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>
Source§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,
Source§impl<T: Config<I>, I: 'static> Default for DigestInfo<T, I>
impl<T: Config<I>, I: 'static> Default for DigestInfo<T, I>
Source§impl<T: Config<I>, I: 'static> Encode for DigestInfo<T, I>
impl<T: Config<I>, I: 'static> Encode for DigestInfo<T, I>
Source§fn size_hint(&self) -> usize
fn size_hint(&self) -> usize
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, )
Source§fn using_encoded<__CodecOutputReturn, __CodecUsingEncodedCallback: FnOnce(&[u8]) -> __CodecOutputReturn>(
&self,
f: __CodecUsingEncodedCallback,
) -> __CodecOutputReturn
fn using_encoded<__CodecOutputReturn, __CodecUsingEncodedCallback: FnOnce(&[u8]) -> __CodecOutputReturn>( &self, f: __CodecUsingEncodedCallback, ) -> __CodecOutputReturn
Source§fn encoded_size(&self) -> usize
fn encoded_size(&self) -> usize
Source§impl<T: Config<I>, I: 'static> MaxEncodedLen for DigestInfo<T, I>
impl<T: Config<I>, I: 'static> MaxEncodedLen for DigestInfo<T, I>
Source§fn max_encoded_len() -> usize
fn max_encoded_len() -> usize
Source§impl<T, I> TypeInfo for DigestInfo<T, I>where
BoundedVec<LazyBalanceOf<T, I>, VariantCountOf<T::Position>>: TypeInfo + 'static,
T: Config<I> + 'static,
I: 'static,
impl<T, I> TypeInfo for DigestInfo<T, I>where
BoundedVec<LazyBalanceOf<T, I>, VariantCountOf<T::Position>>: TypeInfo + 'static,
T: Config<I> + 'static,
I: 'static,
impl<T: Config<I>, I: 'static> DecodeWithMemTracking for DigestInfo<T, I>
impl<T: Config<I>, I: 'static> EncodeLike for DigestInfo<T, I>
impl<T: Eq + Config<I>, I: Eq + 'static> Eq for DigestInfo<T, I>
impl<T: Config<I>, I: 'static> StructuralPartialEq for DigestInfo<T, I>
Auto Trait Implementations§
impl<T, I> Freeze for DigestInfo<T, I>
impl<T, I> RefUnwindSafe for DigestInfo<T, I>where
<T as Config<I>>::Position: RefUnwindSafe,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynExtensionSchema<BalanceAddon>>::Repr: RefUnwindSafe,
<<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance: RefUnwindSafe,
<T as Config<I>>::Bias: RefUnwindSafe,
<T as Config<I>>::Time: RefUnwindSafe,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<BalanceAsset>>::Bound: RefUnwindSafe,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<BalanceRational>>::Bound: RefUnwindSafe,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<BalanceTime>>::Bound: RefUnwindSafe,
impl<T, I> Send for DigestInfo<T, I>where
<T as Config<I>>::Position: Send,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynExtensionSchema<BalanceAddon>>::Repr: Send,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<BalanceAsset>>::Bound: Send,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<BalanceRational>>::Bound: Send,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<BalanceTime>>::Bound: Send,
impl<T, I> Sync for DigestInfo<T, I>where
<T as Config<I>>::Position: Sync,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynExtensionSchema<BalanceAddon>>::Repr: Sync,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<BalanceAsset>>::Bound: Sync,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<BalanceRational>>::Bound: Sync,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<BalanceTime>>::Bound: Sync,
impl<T, I> Unpin for DigestInfo<T, I>where
<T as Config<I>>::Position: Unpin,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynExtensionSchema<BalanceAddon>>::Repr: Unpin,
<<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance: Unpin,
<T as Config<I>>::Bias: Unpin,
<T as Config<I>>::Time: Unpin,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<BalanceAsset>>::Bound: Unpin,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<BalanceRational>>::Bound: Unpin,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<BalanceTime>>::Bound: Unpin,
impl<T, I> UnsafeUnpin for DigestInfo<T, I>
impl<T, I> UnwindSafe for DigestInfo<T, I>where
<T as Config<I>>::Position: UnwindSafe,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynExtensionSchema<BalanceAddon>>::Repr: UnwindSafe,
<<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance: UnwindSafe,
<T as Config<I>>::Bias: UnwindSafe,
<T as Config<I>>::Time: UnwindSafe,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<BalanceAsset>>::Bound: UnwindSafe,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<BalanceRational>>::Bound: UnwindSafe,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<BalanceTime>>::Bound: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> DecodeLimit for Twhere
T: Decode,
impl<T> DecodeLimit for Twhere
T: Decode,
Source§impl<T> DecodeWithMemLimit for Twhere
T: DecodeWithMemTracking,
impl<T> DecodeWithMemLimit for Twhere
T: DecodeWithMemTracking,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T, U, Tag> IntoTag<U, Tag> for Twhere
U: FromTag<T, Tag>,
Tag: DiscriminantTag,
impl<T, U, Tag> IntoTag<U, Tag> for Twhere
U: FromTag<T, Tag>,
Tag: DiscriminantTag,
Source§impl<Src, Dest> IntoTuple<Dest> for Srcwhere
Dest: FromTuple<Src>,
impl<Src, Dest> IntoTuple<Dest> for Srcwhere
Dest: FromTuple<Src>,
fn into_tuple(self) -> Dest
Source§impl<T, Outer> IsWrappedBy<Outer> for T
impl<T, Outer> IsWrappedBy<Outer> for T
Source§impl<T, Time> Logging<Time> for Twhere
Time: Time,
impl<T, Time> Logging<Time> for Twhere
Time: Time,
Source§const FALLBACK_TARGET: &'static str = "routine"
const FALLBACK_TARGET: &'static str = "routine"
Default logging target if none is provided.
Most routines, especially offchain workers or background tasks, use this target for simplicity.
It allows a consistent place to look for routine logs without requiring every call to specify a target.
️Note: This target is only a convenience and may be somewhat vague.
To ensure errors can still be traced accurately, the logged messages should
include additional metadata (e.g., module name, error index, or contextual info)
so that the source of the error can be identified even if the target is generic.
Source§type Logger = DispatchError
type Logger = DispatchError
The type taken and returned for logging.
We simply return the same DispatchError that was logged,
so logging does not change control flow or error propagation.
DispatchError is used because in Substrate it encompasses all
runtime errors - including module errors, token errors, arithmetic
issues, and transactional boundaries - making it the universal
substrate-side error representation.
Source§type Level = LogLevel
type Level = LogLevel
The log level type.
We use the LogLevel enum to standardize severity levels
(Info, Warn, Error, Debug) across all routine logs.
Source§fn log(
level: <T as Logging<Time>>::Level,
err: &<T as Logging<Time>>::Logger,
timestamp: Time,
target: Option<&str>,
fmt: Option<fn(Time, &<T as Logging<Time>>::Level, &str, &str) -> String>,
) -> <T as Logging<Time>>::Logger
fn log( level: <T as Logging<Time>>::Level, err: &<T as Logging<Time>>::Logger, timestamp: Time, target: Option<&str>, fmt: Option<fn(Time, &<T as Logging<Time>>::Level, &str, &str) -> String>, ) -> <T as Logging<Time>>::Logger
Source§fn info(
err: &Self::Logger,
timestamp: Timestamp,
target: Option<&str>,
fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>,
) -> Self::Loggerwhere
Self: Sized,
fn info(
err: &Self::Logger,
timestamp: Timestamp,
target: Option<&str>,
fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>,
) -> Self::Loggerwhere
Self: Sized,
Source§fn warn(
err: &Self::Logger,
timestamp: Timestamp,
target: Option<&str>,
fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>,
) -> Self::Loggerwhere
Self: Sized,
fn warn(
err: &Self::Logger,
timestamp: Timestamp,
target: Option<&str>,
fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>,
) -> Self::Loggerwhere
Self: Sized,
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 moreSource§impl<T, U> TryIntoKey<U> for Twhere
U: TryFromKey<T>,
impl<T, U> TryIntoKey<U> for Twhere
U: TryFromKey<T>,
type Error = <U as TryFromKey<T>>::Error
fn try_into_key(self) -> Result<U, <U as TryFromKey<T>>::Error>
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 S
impl<T, S> UniqueSaturatedInto<T> for S
Source§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T.