pub struct PoolInfo<T: Config<I>, I: 'static = ()> {
balance_of: LazyBalanceOf<T, I>,
capital: T::Shares,
commission: T::Commission,
slots: Slots<T, I>,
}Expand description
Represents a managed pool derived from an index.
PoolInfo aggregates capital, commission, and the collection of slots,
each of which represents a portion of the pool linked to underlying entries.
Unlike indexes, pools are mutable and can have their slot balances adjusted dynamically.
Pools are created from an IndexInfo (or Entries), allowing the
shares of each entry to be translated into slots within the pool.
Pool’s slot shares/variants can then be adjusted over time, while the pool’s commission and structure remain consistent.
Fields§
§balance_of: LazyBalanceOf<T, I>Real-time balance of the pool.
Stored as LazyBalanceOf which allows efficient updates and tracking
proprietor depositted balances internally within itself at higher level.
capital: T::SharesTotal capital of the pool.
Computed as the sum of all shares in the pool’s slots. Represents the total weight or stake across all slots.
commission: T::CommissionCommission rate charged by the pool manager.
The manager earns this percentage of rewards or profits generated by the pool.
slots: Slots<T, I>Collection of slots representing the underlying assets or commitments.
Each slot corresponds to an entry from the index that formed
this pool. Slots track individual shares, its deposit receipt,
and disposition Disposition.
Implementations§
Source§impl<T: Config<I>, I: 'static> PoolInfo<T, I>
impl<T: Config<I>, I: 'static> PoolInfo<T, I>
Sourcepub(crate) fn new(
index_entries: Entries<T, I>,
commission: T::Commission,
) -> Result<Self, DispatchError>
pub(crate) fn new( index_entries: Entries<T, I>, commission: T::Commission, ) -> Result<Self, DispatchError>
Sourcepub fn balance(&self) -> LazyBalanceOf<T, I>
pub fn balance(&self) -> LazyBalanceOf<T, I>
Returns the pool’s lazy balance.
Sourcepub(crate) fn set_balance(&mut self, balance: LazyBalanceOf<T, I>)
pub(crate) fn set_balance(&mut self, balance: LazyBalanceOf<T, I>)
Set the pool balance usually only after release.
Sourcepub fn capital(&self) -> T::Shares
pub fn capital(&self) -> T::Shares
Returns the pool’s total capital i.e., total shares of all slots.
Sourcepub fn commission(&self) -> T::Commission
pub fn commission(&self) -> T::Commission
Returns the pool’s commission i.e., manager’s share while resolving the pool’s commit.
Sourcepub(crate) fn balance_reset(&mut self)
pub(crate) fn balance_reset(&mut self)
Resets the pools’s top-level lazy balance.
This lazy balance acts like a pseudo-direct-digest for proprietors structurally for pool-commitments.
Sourcepub(crate) fn set_slot_commit(
&mut self,
digest: &SlotDigest<T>,
commit: CommitInstance<T, I>,
) -> Result<(), DispatchError>
pub(crate) fn set_slot_commit( &mut self, digest: &SlotDigest<T>, commit: CommitInstance<T, I>, ) -> Result<(), DispatchError>
Replaces the commit instance of the slot identified by digest
by delegating to the underlying slots.
Sourcepub(crate) fn remove_slot(&mut self, slot: &SlotDigest<T>) -> DispatchResult
pub(crate) fn remove_slot(&mut self, slot: &SlotDigest<T>) -> DispatchResult
Removes an existing slot from the pool.
Unlike indexes which are immutable, pools are mutable hence requires slot management via higher-structures.
Returns DispatchError otherwise.
Sourcepub fn slot_exists(&self, slot: &SlotDigest<T>) -> DispatchResult
pub fn slot_exists(&self, slot: &SlotDigest<T>) -> DispatchResult
Checks if a slot of digest exists in the pool.
Trait Implementations§
Source§impl<T: Config<I>, I: 'static> Decode for PoolInfo<T, I>
impl<T: Config<I>, I: 'static> Decode for PoolInfo<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>
§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<I>, I: 'static> Encode for PoolInfo<T, I>
impl<T: Config<I>, I: 'static> Encode for PoolInfo<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, )
§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<I>, I: 'static> MaxEncodedLen for PoolInfo<T, I>where
LazyBalanceOf<T, I>: MaxEncodedLen,
T::Shares: MaxEncodedLen,
T::Commission: MaxEncodedLen,
Slots<T, I>: MaxEncodedLen,
impl<T: Config<I>, I: 'static> MaxEncodedLen for PoolInfo<T, I>where
LazyBalanceOf<T, I>: MaxEncodedLen,
T::Shares: MaxEncodedLen,
T::Commission: MaxEncodedLen,
Slots<T, I>: MaxEncodedLen,
Source§fn max_encoded_len() -> usize
fn max_encoded_len() -> usize
Source§impl<T, I> TypeInfo for PoolInfo<T, I>where
LazyBalanceOf<T, I>: TypeInfo + 'static,
T::Shares: TypeInfo + 'static,
T::Commission: TypeInfo + 'static,
Slots<T, I>: TypeInfo + 'static,
T: Config<I> + 'static,
I: 'static,
impl<T, I> TypeInfo for PoolInfo<T, I>where
LazyBalanceOf<T, I>: TypeInfo + 'static,
T::Shares: TypeInfo + 'static,
T::Commission: TypeInfo + 'static,
Slots<T, I>: TypeInfo + 'static,
T: Config<I> + 'static,
I: 'static,
impl<T: Config<I>, I: 'static> DecodeWithMemTracking for PoolInfo<T, I>where
LazyBalanceOf<T, I>: DecodeWithMemTracking,
T::Shares: DecodeWithMemTracking,
T::Commission: DecodeWithMemTracking,
Slots<T, I>: DecodeWithMemTracking,
impl<T: Config<I>, I: 'static> EncodeLike for PoolInfo<T, I>
impl<T: Config<I>, I: 'static> Eq for PoolInfo<T, I>
Auto Trait Implementations§
impl<T, I> Freeze for PoolInfo<T, I>where
<T as Config<I>>::Shares: Freeze,
<T as Config<I>>::Commission: Freeze,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynExtensionSchema<BalanceAddon>>::Repr: Freeze,
<<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance: Freeze,
<T as Config<I>>::Bias: Freeze,
<T as Config<I>>::Time: Freeze,
impl<T, I> RefUnwindSafe for PoolInfo<T, I>where
<T as Config<I>>::Shares: RefUnwindSafe,
<T as Config<I>>::Commission: 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>>::MaxIndexEntries: 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,
<T as Config>::AccountId: RefUnwindSafe,
<T as Config<I>>::Position: RefUnwindSafe,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynExtensionSchema<ReceiptAddon>>::Repr: RefUnwindSafe,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<ReceiptAsset>>::Bound: RefUnwindSafe,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<ReceiptRational>>::Bound: RefUnwindSafe,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<ReceiptTime>>::Bound: RefUnwindSafe,
impl<T, I> Send for PoolInfo<T, I>where
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynExtensionSchema<BalanceAddon>>::Repr: Send,
<T as Config<I>>::MaxIndexEntries: 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,
<T as Config<I>>::Position: Send,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynExtensionSchema<ReceiptAddon>>::Repr: Send,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<ReceiptAsset>>::Bound: Send,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<ReceiptRational>>::Bound: Send,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<ReceiptTime>>::Bound: Send,
impl<T, I> Sync for PoolInfo<T, I>where
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynExtensionSchema<BalanceAddon>>::Repr: Sync,
<T as Config<I>>::MaxIndexEntries: 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,
<T as Config<I>>::Position: Sync,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynExtensionSchema<ReceiptAddon>>::Repr: Sync,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<ReceiptAsset>>::Bound: Sync,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<ReceiptRational>>::Bound: Sync,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<ReceiptTime>>::Bound: Sync,
impl<T, I> Unpin for PoolInfo<T, I>where
<T as Config<I>>::Shares: Unpin,
<T as Config<I>>::Commission: 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>>::MaxIndexEntries: 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,
<T as Config>::AccountId: Unpin,
<T as Config<I>>::Position: Unpin,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynExtensionSchema<ReceiptAddon>>::Repr: Unpin,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<ReceiptAsset>>::Bound: Unpin,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<ReceiptRational>>::Bound: Unpin,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<ReceiptTime>>::Bound: Unpin,
impl<T, I> UnwindSafe for PoolInfo<T, I>where
<T as Config<I>>::Shares: UnwindSafe,
<T as Config<I>>::Commission: 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>>::MaxIndexEntries: 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,
<T as Config>::AccountId: UnwindSafe,
<T as Config<I>>::Position: UnwindSafe,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynExtensionSchema<ReceiptAddon>>::Repr: UnwindSafe,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<ReceiptAsset>>::Bound: UnwindSafe,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<ReceiptRational>>::Bound: UnwindSafe,
<<<T as Config<I>>::BalanceContext as ModelContext>::Context as VirtualDynBound<ReceiptTime>>::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
§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<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.