Struct ShareBalanceFamily

Source
pub struct ShareBalanceFamily<'a>(PhantomData<(&'a (),)>);
Expand description

Plugin family implementing a share-based lazy balance model.

§Model

Value is tracked via shares (proportional ownership):

deposit  -> mint shares
mint/reap -> mutate balance state
withdraw -> redeem shares at current share-price
  • Receipts encode shares, not fixed value
  • Balance mutations affect only the given balance state
  • Final value is resolved lazily at withdrawal

§Complexity

All operations are O(1):

  • no iteration or global recomputation

§Constraints

Operations are intentionally unbounded:

  • deposit, mint, reap has no intrinsic limits

Minimal invariants:

  • No deposit after a full drain (complete reap)
    • requires a mint to reinitialize the balance
  • No mint or reap before any deposit exists

§Edge Conditions

Arbitrary or unstructured use of mint/reap (e.g. without a consistent economic model) can lead to skewed redemption outcomes at withdrawal which reflects misuse, not a violation of system invariants.

The design permits unrestricted operations, but assumes coherent, policy-driven execution in production

§Dust Handling

Any residual balance (“dust”) caused by rounding or share precision is not redistributed.

The last withdrawer of the final receipt receives the entire remaining dust in the balance.

§Lifetime

The lifetime 'a ties plugin execution to the caller’s borrow scope, allowing a mutable reference to the balance to be passed into the plugin and safely used across operation boundaries.

Tuple Fields§

§0: PhantomData<(&'a (),)>

Trait Implementations§

Source§

impl<'a, T, In, Out> LazyBalanceRoot<In, ShareBalanceContext<T>, Out> for ShareBalanceFamily<'a>
where T: LazyBalance<Input<'a> = In, Output<'a> = Out>, Context<T>: VirtualError<LazyBalanceError, Error = ShareBalanceError>, Out: LazyBalanceOutput<'a, T::Asset, T::Receipt, T::SnapShot, T::Time, T::Limits, T>, In: LazyBalanceInput<'a, T::Balance, T::Variant, T::Id, T::Asset, T::Receipt, T>, T::Asset: From<<T::Rational as FixedPointNumber>::Inner>,

Source§

type Deposit = ModelDeposit

Discriminant for deposit execution. Read more
Source§

type Mint = ModelMint

Discriminant for mint execution. Read more
Source§

type Reap = ModelReap

Discriminant for reap execution. Read more
Source§

type Withdraw = ModelWithdraw

Discriminant for withdrawal execution. Read more
Source§

type Drain = ModelDrain

Discriminant for drain execution. Read more
Source§

type CanDeposit = ModelCanDeposit

Discriminant for deposit validation. Read more
Source§

type CanMint = ModelCanMint

Discriminant for mint validation. Read more
Source§

type CanReap = ModelCanReap

Discriminant for reap validation. Read more
Source§

type CanWithdraw = ModelCanWithdraw

Discriminant for withdrawal validation. Read more
Source§

type TotalValue = ModelTotalValue

Discriminant for total balance query. Read more
Source§

type ReceiptActiveValue = ModelReceiptActiveValue

Discriminant for active receipt value query. Read more
Source§

type HasDeposits = ModelHasDeposits

Discriminant for deposit presence query. Read more
Source§

type ReceiptDepositValue = ModelReceiptDepositValue

Discriminant for receipt deposit value query. Read more
Source§

type DepositLimits = ModelDepositLimits

Discriminant for deposit limits query. Read more
Source§

type MintLimits = ModelMintLimits

Discriminant for mint limits query. Read more
Source§

type ReapLimits = ModelReapLimits

Discriminant for reap limits query. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for ShareBalanceFamily<'a>

§

impl<'a> RefUnwindSafe for ShareBalanceFamily<'a>

§

impl<'a> Send for ShareBalanceFamily<'a>

§

impl<'a> Sync for ShareBalanceFamily<'a>

§

impl<'a> Unpin for ShareBalanceFamily<'a>

§

impl<'a> UnwindSafe for ShareBalanceFamily<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>
where Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>
where Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
§

impl<T, U> IntoKey<U> for T
where U: FromKey<T>,

§

fn into_key(self) -> U

Source§

impl<T, U, Tag> IntoTag<U, Tag> for T
where U: FromTag<T, Tag>, Tag: DiscriminantTag,

Source§

fn into_tag(self) -> U

§

impl<Src, Dest> IntoTuple<Dest> for Src
where Dest: FromTuple<Src>,

§

fn into_tuple(self) -> Dest

§

impl<T> IsType<T> for T

§

fn from_ref(t: &T) -> &T

Cast reference.
§

fn into_ref(&self) -> &T

Cast reference.
§

fn from_mut(t: &mut T) -> &mut T

Cast mutable reference.
§

fn into_mut(&mut self) -> &mut T

Cast mutable reference.
§

impl<T, Outer> IsWrappedBy<Outer> for T
where Outer: AsRef<T> + AsMut<T> + From<T>, T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

Source§

impl<T, Time> Logging<Time> for T
where Time: Time,

Source§

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

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

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

Core logging function that all helpers delegate to. Read more
Source§

fn info( err: &Self::Logger, timestamp: Timestamp, target: Option<&str>, fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>, ) -> Self::Logger
where Self: Sized,

Logs an info-level message. Read more
Source§

fn warn( err: &Self::Logger, timestamp: Timestamp, target: Option<&str>, fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>, ) -> Self::Logger
where Self: Sized,

Logs a warning-level message. Read more
Source§

fn error( err: &Self::Logger, timestamp: Timestamp, target: Option<&str>, fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>, ) -> Self::Logger
where Self: Sized,

Logs an error-level message. Read more
Source§

fn debug( err: &Self::Logger, timestamp: Timestamp, target: Option<&str>, fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>, ) -> Self::Logger
where Self: Sized,

Logs a debug-level message. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Self
where Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> T
where Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T, U> TryIntoKey<U> for T
where 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 S
where T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for S
where T: Bounded, S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
Source§

impl<Provider, Discriminant, T> DelegateVirtualDynBound<Provider, Discriminant> for T
where Provider: VirtualDynBound<Discriminant>, Discriminant: DiscriminantTag,

Source§

impl<Provider, Discriminant, T> DelegateVirtualStaticBound<Provider, Discriminant> for T
where Provider: VirtualStaticBound<Discriminant>, Discriminant: DiscriminantTag,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for T
where T: RefUnwindSafe,