Struct scrypto_test::prelude::v1::substates::multi_resource_pool::Substate
source · pub struct Substate {
pub vaults: IndexMap<ResourceAddress, Vault>,
pub pool_unit_resource_manager: ResourceManager,
}
Fields§
§vaults: IndexMap<ResourceAddress, Vault>
The vaults being stored as a IndexMap
and not as a KeyValueStore
is intentional here!
All of the operations on the many pool blueprint require loading all of the vaults and doing
some arithmetic, reading their state (with exception to protected deposit and withdraw).
Storing this as a KeyValueStore
only to later read the entire KVStore is pointless.
Also, while protected deposits and withdraws technically do not need to read the entire map of vaults they realistically do since the caller needs to know the balances to do the arithmetic they need prior to doing a deposit or withdraw. Thus, these two methods are in a realistic setting need to read that state.
Additionally, size should not be a serious concern for any realistic application. The vaults map in a pool of 10 resources is just 605 bytes with 20 resources its 1205 bytes which is still reasonable. Note that most applications that would use a pool of this kind might be balancer-esc applications where the maximum number of tokens a pool can hold is 8; thus there is no concern that this map would become too big.
Finally, when using this resource pool as part of a dApp all that the dApp would store is a reference to the pool. In other words, if the dApp has a method that does not interact with the pool, it is not in any way affected by how the pool stores the vaults; cost units and fees do not come into the picture there.
pool_unit_resource_manager: ResourceManager
The resource manager of the pool unit resource that the pool works with.
Trait Implementations§
source§impl Categorize<ScryptoCustomValueKind> for Substate
impl Categorize<ScryptoCustomValueKind> for Substate
source§impl<D> Decode<ScryptoCustomValueKind, D> for Substatewhere
D: Decoder<ScryptoCustomValueKind>,
impl<D> Decode<ScryptoCustomValueKind, D> for Substatewhere
D: Decoder<ScryptoCustomValueKind>,
source§fn decode_body_with_value_kind(
decoder: &mut D,
value_kind: ValueKind<ScryptoCustomValueKind>
) -> Result<Substate, DecodeError>
fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<ScryptoCustomValueKind> ) -> Result<Substate, DecodeError>
source§impl Describe<ScryptoCustomTypeKind> for Substate
impl Describe<ScryptoCustomTypeKind> for Substate
source§const TYPE_ID: RustTypeId = _
const TYPE_ID: RustTypeId = _
TYPE_ID
should give a unique identifier for its SBOR schema type.
An SBOR schema type capture details about the SBOR payload, how it should be interpreted, validated and displayed. Read moresource§fn type_data() -> TypeData<ScryptoCustomTypeKind, RustTypeId>
fn type_data() -> TypeData<ScryptoCustomTypeKind, RustTypeId>
source§fn add_all_dependencies(aggregator: &mut TypeAggregator<ScryptoCustomTypeKind>)
fn add_all_dependencies(aggregator: &mut TypeAggregator<ScryptoCustomTypeKind>)
get_local_type_data
, we need to ensure that the type and all of its own references
get added to the aggregator. Read moresource§impl<E> Encode<ScryptoCustomValueKind, E> for Substatewhere
E: Encoder<ScryptoCustomValueKind>,
impl<E> Encode<ScryptoCustomValueKind, E> for Substatewhere
E: Encoder<ScryptoCustomValueKind>,
source§fn encode_value_kind(&self, encoder: &mut E) -> Result<(), EncodeError>
fn encode_value_kind(&self, encoder: &mut E) -> Result<(), EncodeError>
source§fn encode_body(&self, encoder: &mut E) -> Result<(), EncodeError>
fn encode_body(&self, encoder: &mut E) -> Result<(), EncodeError>
source§impl FieldContentSource<MultiResourcePoolStateFieldPayload> for Substate
impl FieldContentSource<MultiResourcePoolStateFieldPayload> for Substate
fn into_content(self) -> VersionedMultiResourcePoolState
fn into_payload(self) -> Payload
fn into_locked_substate(self) -> FieldSubstate<Payload>
fn into_unlocked_substate(self) -> FieldSubstate<Payload>
source§impl From<Substate> for VersionedMultiResourcePoolState
impl From<Substate> for VersionedMultiResourcePoolState
source§fn from(value: Substate) -> VersionedMultiResourcePoolState
fn from(value: Substate) -> VersionedMultiResourcePoolState
source§impl PartialEq for Substate
impl PartialEq for Substate
source§impl SborTuple<ScryptoCustomValueKind> for Substate
impl SborTuple<ScryptoCustomValueKind> for Substate
fn get_length(&self) -> usize
source§impl VersionedMultiResourcePoolStateVersion for Substate
impl VersionedMultiResourcePoolStateVersion for Substate
type Versioned = VersionedMultiResourcePoolState
fn into_versioned( self ) -> <Substate as VersionedMultiResourcePoolStateVersion>::Versioned
impl Eq for Substate
impl StructuralPartialEq for Substate
Auto Trait Implementations§
impl RefUnwindSafe for Substate
impl Send for Substate
impl Sync for Substate
impl Unpin for Substate
impl UnwindSafe for Substate
Blanket Implementations§
§impl<U> As for U
impl<U> As for U
§fn as_<T>(self) -> Twhere
T: CastFrom<U>,
fn as_<T>(self) -> Twhere
T: CastFrom<U>,
self
to type T
. The semantics of numeric casting with the as
operator are followed, so <T as As>::as_::<U>
can be used in the same way as T as U
for numeric conversions. Read moresource§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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§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
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§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
key
and return true
if they are equal.