pub struct AuthorInfo<T: Config> {
pub digest: AuthorDigest<T>,
pub since: BlockNumberFor<T>,
pub status: AuthorStatus,
pub status_since: BlockNumberFor<T>,
pub risk_until: BlockNumberFor<T>,
pub min_fund: Option<AuthorAsset<T>>,
pub max_fund: Option<AuthorAsset<T>>,
}Expand description
Represents the on-chain record of an Author role within the runtime.
This struct captures all essential metadata for managing an author’s lifecycle, funding, and status.
§Design Rationale
- Lifecycle tracking:
since,stale_since, andfrozen_untilallow the runtime to enforce penalties, rewards, or inactivity handling without central authority. - Decentralization: No suspension logic is provided; accountability is enforced through penalties and voluntary resignation.
- Composability:
fundersis a bounded collection ofFunder, allowing flexible funding models (direct, index, or pool). - Auditability: All timestamps and digests provide verifiable on-chain evidence of the author’s role state.
Fields§
§digest: AuthorDigest<T>Unique commitment digest/hash or derived identifier for the author (not the author’s accountId).
since: BlockNumberFor<T>Timestamp when the author was enrolled.
status: AuthorStatusCurrent status of the author.
status_since: BlockNumberFor<T>Timestamp when the author status was updated.
risk_until: BlockNumberFor<T>Timestamp until which the author is at risk to the system.
This indicates, that till this time the author cannot do few runtime actions.
If in the past, the author is considered safe.
min_fund: Option<AuthorAsset<T>>Locally defined minimum fund to support this author.
max_fund: Option<AuthorAsset<T>>Locally defined maximum fund exposure for this author.
Implementations§
Source§impl<T: Config> AuthorInfo<T>
impl<T: Config> AuthorInfo<T>
Sourcepub fn new(digest: AuthorDigest<T>) -> Self
pub fn new(digest: AuthorDigest<T>) -> Self
Creates a new AuthorInfo instance with default timestamps and status.
statusstarts asProbationto ensure initial monitoring and enforces probation period.since,stale_since, andrisk_untilare set to the current block number.
Trait Implementations§
Source§impl<T: Clone + Config> Clone for AuthorInfo<T>
impl<T: Clone + Config> Clone for AuthorInfo<T>
Source§fn clone(&self) -> AuthorInfo<T>
fn clone(&self) -> AuthorInfo<T>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<T: Config> Debug for AuthorInfo<T>
impl<T: Config> Debug for AuthorInfo<T>
Source§impl<T: Config> Decode for AuthorInfo<T>
impl<T: Config> Decode for AuthorInfo<T>
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<T: Config> Encode for AuthorInfo<T>
impl<T: Config> Encode for AuthorInfo<T>
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, )
§fn using_encoded<R, F>(&self, f: F) -> R
fn using_encoded<R, F>(&self, f: F) -> R
§fn encoded_size(&self) -> usize
fn encoded_size(&self) -> usize
Source§impl<T: Config> MaxEncodedLen for AuthorInfo<T>where
AuthorDigest<T>: MaxEncodedLen,
BlockNumberFor<T>: MaxEncodedLen,
Option<AuthorAsset<T>>: MaxEncodedLen,
impl<T: Config> MaxEncodedLen for AuthorInfo<T>where
AuthorDigest<T>: MaxEncodedLen,
BlockNumberFor<T>: MaxEncodedLen,
Option<AuthorAsset<T>>: MaxEncodedLen,
Source§fn max_encoded_len() -> usize
fn max_encoded_len() -> usize
Source§impl<T> TypeInfo for AuthorInfo<T>where
AuthorDigest<T>: TypeInfo + 'static,
BlockNumberFor<T>: TypeInfo + 'static,
Option<AuthorAsset<T>>: TypeInfo + 'static,
T: Config + 'static,
impl<T> TypeInfo for AuthorInfo<T>where
AuthorDigest<T>: TypeInfo + 'static,
BlockNumberFor<T>: TypeInfo + 'static,
Option<AuthorAsset<T>>: TypeInfo + 'static,
T: Config + 'static,
impl<T: Config> DecodeWithMemTracking for AuthorInfo<T>where
AuthorDigest<T>: DecodeWithMemTracking,
BlockNumberFor<T>: DecodeWithMemTracking,
Option<AuthorAsset<T>>: DecodeWithMemTracking,
impl<T: Config> EncodeLike for AuthorInfo<T>
impl<T: Eq + Config> Eq for AuthorInfo<T>
impl<T: Config> StructuralPartialEq for AuthorInfo<T>
Auto Trait Implementations§
impl<T> Freeze for AuthorInfo<T>where
<<T as Config>::CommitmentAdapter as Commitment<<T as Config>::AccountId>>::Digest: Freeze,
<<<T as Config>::Block as Block>::Header as Header>::Number: Freeze,
<<T as Config>::CommitmentAdapter as InspectAsset<<T as Config>::AccountId>>::Asset: Freeze,
impl<T> RefUnwindSafe for AuthorInfo<T>where
<<T as Config>::CommitmentAdapter as Commitment<<T as Config>::AccountId>>::Digest: RefUnwindSafe,
<<<T as Config>::Block as Block>::Header as Header>::Number: RefUnwindSafe,
<<T as Config>::CommitmentAdapter as InspectAsset<<T as Config>::AccountId>>::Asset: RefUnwindSafe,
impl<T> Send for AuthorInfo<T>
impl<T> Sync for AuthorInfo<T>
impl<T> Unpin for AuthorInfo<T>where
<<T as Config>::CommitmentAdapter as Commitment<<T as Config>::AccountId>>::Digest: Unpin,
<<<T as Config>::Block as Block>::Header as Header>::Number: Unpin,
<<T as Config>::CommitmentAdapter as InspectAsset<<T as Config>::AccountId>>::Asset: Unpin,
impl<T> UnwindSafe for AuthorInfo<T>where
<<T as Config>::CommitmentAdapter as Commitment<<T as Config>::AccountId>>::Digest: UnwindSafe,
<<<T as Config>::Block as Block>::Header as Header>::Number: UnwindSafe,
<<T as Config>::CommitmentAdapter as InspectAsset<<T as Config>::AccountId>>::Asset: 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
§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
§fn checked_from<T>(t: T) -> Option<Self>where
Self: TryFrom<T>,
fn checked_from<T>(t: T) -> Option<Self>where
Self: TryFrom<T>,
§fn checked_into<T>(self) -> Option<T>where
Self: TryInto<T>,
fn checked_into<T>(self) -> Option<T>where
Self: TryInto<T>,
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§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,
§impl<T> DecodeWithMemLimit for Twhere
T: DecodeWithMemTracking,
impl<T> DecodeWithMemLimit for Twhere
T: DecodeWithMemTracking,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> Hashable for Twhere
T: Codec,
impl<T> Hashable for Twhere
T: Codec,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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,
§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
§impl<T> IsType<T> for T
impl<T> IsType<T> for T
§impl<T, Outer> IsWrappedBy<Outer> for T
impl<T, Outer> IsWrappedBy<Outer> for T
§impl<T> KeyedVec for Twhere
T: Codec,
impl<T> KeyedVec for Twhere
T: Codec,
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 conveninence 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,
§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
T. Read more§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>
§impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
unchecked_from.§impl<T, S> UniqueSaturatedInto<T> for S
impl<T, S> UniqueSaturatedInto<T> for S
§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T.