pub struct SubscriptionAttributes<T: NestedEncode + NestedDecode + TypeAbi> {
pub expiration: u64,
pub attributes: T,
}
Expand description
Standard smart contract module for managing a Subscription NFT. Adaptation of the EIP-5643 for MultiversX, more here https://eips.ethereum.org/EIPS/eip-5643
This standard is an extension of the MultiversX NFT standard. It proposes an additional interface for NFTs to be used as recurring, expirable subscriptions. The interface includes functions to renew and cancel the subscription.
Since the NFT standard only has one field for adding arbitrary data (attributes), The module also provides functions for creating NFTs with subscription as well as for reading and updating attributes This allows developers to add additional data to the subscription expiration
Developers should be careful when interacting with custom attributes at the same time as subscription They should exclusively use the functions from this module The use of the generic function for updating nft attributes might result in data loss
The module provides functions for:
- creating a subscription nft
- updating custom attributes
- getting custom attributes
- renewing a subscription
- cancelling a subscription
- getting the expiration
Fields§
§expiration: u64
§attributes: T
Trait Implementations§
Source§impl<T: NestedEncode + NestedDecode + TypeAbi> TopDecode for SubscriptionAttributes<T>
impl<T: NestedEncode + NestedDecode + TypeAbi> TopDecode for SubscriptionAttributes<T>
Source§fn top_decode_or_handle_err<I, H>(
top_input: I,
__h__: H,
) -> Result<Self, H::HandledErr>where
I: TopDecodeInput,
H: DecodeErrorHandler,
fn top_decode_or_handle_err<I, H>(
top_input: I,
__h__: H,
) -> Result<Self, H::HandledErr>where
I: TopDecodeInput,
H: DecodeErrorHandler,
top_decode
that can handle errors as soon as they occur.
For instance it can exit immediately and make sure that if it returns, it is a success.
By not deferring error handling, this can lead to somewhat smaller bytecode.Source§fn top_decode<I>(input: I) -> Result<Self, DecodeError>where
I: TopDecodeInput,
fn top_decode<I>(input: I) -> Result<Self, DecodeError>where
I: TopDecodeInput,
Source§impl<T: NestedEncode + NestedDecode + TypeAbi> TopEncode for SubscriptionAttributes<T>
impl<T: NestedEncode + NestedDecode + TypeAbi> TopEncode for SubscriptionAttributes<T>
Source§fn top_encode_or_handle_err<O, H>(
&self,
output: O,
__h__: H,
) -> Result<(), H::HandledErr>where
O: TopEncodeOutput,
H: EncodeErrorHandler,
fn top_encode_or_handle_err<O, H>(
&self,
output: O,
__h__: H,
) -> Result<(), H::HandledErr>where
O: TopEncodeOutput,
H: EncodeErrorHandler,
top_encode
that can handle errors as soon as they occur.
For instance in can exit immediately and make sure that if it returns, it is a success.
By not deferring error handling, this can lead to somewhat smaller bytecode.Source§fn top_encode<O>(&self, output: O) -> Result<(), EncodeError>where
O: TopEncodeOutput,
fn top_encode<O>(&self, output: O) -> Result<(), EncodeError>where
O: TopEncodeOutput,
Source§impl<T: NestedEncode + NestedDecode + TypeAbi> TypeAbi for SubscriptionAttributes<T>
impl<T: NestedEncode + NestedDecode + TypeAbi> TypeAbi for SubscriptionAttributes<T>
type Unmanaged = SubscriptionAttributes<T>
fn type_name() -> TypeName
Source§fn provide_type_descriptions<TDC: TypeDescriptionContainer>(
accumulator: &mut TDC,
)
fn provide_type_descriptions<TDC: TypeDescriptionContainer>( accumulator: &mut TDC, )
fn type_names() -> TypeNames
fn type_name_rust() -> String
impl<T: NestedEncode + NestedDecode + TypeAbi> TypeAbiFrom<&SubscriptionAttributes<T>> for SubscriptionAttributes<T>
impl<T: NestedEncode + NestedDecode + TypeAbi> TypeAbiFrom<SubscriptionAttributes<T>> for SubscriptionAttributes<T>
Auto Trait Implementations§
impl<T> Freeze for SubscriptionAttributes<T>where
T: Freeze,
impl<T> RefUnwindSafe for SubscriptionAttributes<T>where
T: RefUnwindSafe,
impl<T> Send for SubscriptionAttributes<T>where
T: Send,
impl<T> Sync for SubscriptionAttributes<T>where
T: Sync,
impl<T> Unpin for SubscriptionAttributes<T>where
T: Unpin,
impl<T> UnwindSafe for SubscriptionAttributes<T>where
T: 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> SCCodec for Twhere
T: TopEncode,
impl<T> SCCodec for Twhere
T: TopEncode,
fn fmt<F>(&self, f: &mut F)where
F: FormatByteReceiver,
Source§impl<T> TopDecodeMulti for Twhere
T: TopDecode,
impl<T> TopDecodeMulti for Twhere
T: TopDecode,
Source§const IS_SINGLE_VALUE: bool = true
const IS_SINGLE_VALUE: bool = true
fn multi_decode_or_handle_err<I, H>(
input: &mut I,
h: H,
) -> Result<T, <H as DecodeErrorHandler>::HandledErr>where
I: TopDecodeMultiInput,
H: DecodeErrorHandler,
fn multi_decode<I>(input: &mut I) -> Result<Self, DecodeError>where
I: TopDecodeMultiInput,
Source§impl<T> TopDecodeMultiLength for T
impl<T> TopDecodeMultiLength for T
Source§impl<T> TopEncodeMulti for Twhere
T: TopEncode,
impl<T> TopEncodeMulti for Twhere
T: TopEncode,
Source§fn multi_encode_or_handle_err<O, H>(
&self,
output: &mut O,
h: H,
) -> Result<(), <H as EncodeErrorHandler>::HandledErr>where
O: TopEncodeMultiOutput,
H: EncodeErrorHandler,
fn multi_encode_or_handle_err<O, H>(
&self,
output: &mut O,
h: H,
) -> Result<(), <H as EncodeErrorHandler>::HandledErr>where
O: TopEncodeMultiOutput,
H: EncodeErrorHandler,
top_encode
that can handle errors as soon as they occur.
For instance in can exit immediately and make sure that if it returns, it is a success.
By not deferring error handling, this can lead to somewhat smaller bytecode.