0094 XLS-94d: Dynamic Multi-Purpose Tokens #289
Replies: 8 comments 24 replies
-
|
Can't we use MPTokenIssuanceSet instead of a new txn MPTokenModify? |
Beta Was this translation helpful? Give feedback.
-
|
|
Beta Was this translation helpful? Give feedback.
-
|
It sounds like |
Beta Was this translation helpful? Give feedback.
-
|
(updated the XLS number) |
Beta Was this translation helpful? Give feedback.
-
|
Is |
Beta Was this translation helpful? Give feedback.
-
|
I find some of the flag-terminology in the current proposal to be confusing, so am curious to hear feedback around the following suggestions:
|
Beta Was this translation helpful? Give feedback.
-
|
Can we expand section
|
Beta Was this translation helpful? Give feedback.
-
|
Per the XLS Contributing process, it is my opinion that we have reached a "well-refined standard." Please comment here if you would like to object to moving this spec/discussion forward in the process into a DRAFT spec. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Dynamic Multi-Purpose Tokens
Abstract
This proposal introduces a new amendment
DynamicMPTas an extension to XLS-33 Multi-Purpose Tokens. Dynamic Multi-Purpose Tokens (Dynamic MPTs) enable specific fields and flags within anMPTokenIssuanceto be declared as mutable at the time of creation. By enabling controlled mutability, this feature accommodates evolving token use cases and compliance demands. Modifications to these mutable metadata can be made via theMPTokenIssuanceSettransaction.1. Overview
This proposal introduces:
Transaction update for
MPTokenIssuanceCreate:sfMutableFlags- indicates specific fields or flags are mutable after issuance.Ledger object update in
MPTokenIssuance:sfMutableFlags- indicates specific fields or flags are mutable after issuance.Transaction update for
MPTokenIssuanceSet:sfMPTokenMetadata- updatesMPTokenMetadatasfTransferFee- updatesTransferFeesfMutableFlags- sets/clears flags (e.g.tfMPTSetCanLock,tfMPTClearCanLock)This feature will require an amendment,
DynamicMPT.2. Declaring Mutability via
MPTokenIssuanceCreateIf issuers want the ability to modify certain fields or flags after issuance, they must explicitly declare those fields or flags as mutable when creating the
MPTokenIssuance.Only a limited set of fields and flags may be declared mutable; all other fields remain permanently immutable.
2.1. Declaring Mutability
Issuers can specify mutability during
MPTokenIssuanceCreatevia the optionalMutableFlagsfield.Bits in
MutableFlagsindicate specific fields or flags may be modified after issuance. The fields or flags include:MPTokenMetadataTransferFeeFlagsfield)2.2. New Optionbal Field: MutableFlags
MutableFlagsnumberUInt32Bit Layout of
MutableFlags— Declaring Mutability at Creation (MPTokenIssuanceCreate)0x0001lsfMPTLocked]tfMPTCanMutateCanLock0x0002lsfMPTCanLockcan be changedtfMPTCanMutateRequireAuth0x0004lsfMPTRequireAuthcan be changedtfMPTCanMutateCanEscrow0x0008lsfMPTCanEscrowcan be changedtfMPTCanMutateCanTrade0x0010lsfMPTCanTradecan be changedtfMPTCanMutateCanTransfer0x0020lsfMPTCanTransfercan be changedtfMPTCanMutateCanClawback0x0040lsfMPTCanClawbackcan be changedtfMPTCanMutateMetadata0x00010000MPTokenMetadatato be modifiedtfMPTCanMutateTransferFee0x00020000TransferFeeto be modifiedNote: Flag value
0x0001is used bylsfMPTLocked. It is not a valid value forMutableFlags.2.3. Failure Conditions
MutableFlagsfieldtemINVALID_FLAGMutableFlagsis present butfeatureDynamicMPTis disabledtemDISABLED3. On-Ledger Data Structure Change
This proposal introduces updates to the
MPTokenIssuanceledger object, including a new optional fieldMutableFlags.3.1. New Optionbal Field:
MutableFlagsA new optional field,
MutableFlags(SFieldsfMutableFlags), is added to theMPTokenIssuanceledger object.MutableFlagsnumberUINT32Bit Layout of
MutableFlags- Recording Mutability On-Ledger (MPTokenIssuance)0x0001lsfMPTLocked]lsfMPTCanMutateCanLock0x0002lsfMPTCanLockcan be changedlsfMPTCanMutateRequireAuth0x0004lsfMPTRequireAuthcan be changedlsfMPTCanMutateCanEscrow0x0008lsfMPTCanEscrowcan be changedlsfMPTCanMutateCanTrade0x0010lsfMPTCanTradecan be changedlsfMPTCanMutateCanTransfer0x0020lsfMPTCanTransfercan be changedlsfMPTCanMutateCanClawback0x0040lsfMPTCanClawbackcan be changedlsfMPTCanMutateMetadata0x00010000MPTokenMetadatato be modifiedlsfMPTCanMutateTransferFee0x00020000TransferFeeto be modifiedNote: Flag value
0x0001is used bylsfMPTLocked. It is not a valid value forMutableFlags.4. Modifying
MPTokenIssuanceviaMPTokenIssuanceSetThis proposal extends the functionality of the
MPTokenIssuanceSettransaction, allowing the issuer of theMPTokenIssuanceto update fields or flags that were explicitly marked as mutable during creation.For details on the original MPTokenIssuanceSet transaction see: The MPTokenIssuanceSet Transaction
4.1. New Fields
MPTokenMetadatastringBLOBNew metadata to replace the existing value.
The transaction will be rejected if
lsfMPTCanMutateMetadatawas not set inMutableFlags.TransferFeenumberUINT16Updated transfer fee value.
The transaction will be rejected if
lsfMPTCanMutateTransferFeewas not set inMutableFlags.MutableFlagsnumberUINT32Set or clear the flags which were marked as mutable.
The valid
MutableFlagsvalues:tfMPTSetCanLock0x0001lsfMPTCanLockflag. Enables the token to be locked both individually and globally.tfMPTClearCanLock0x0002lsfMPTCanLockflag. Disables both individual and global locking of the token.tfMPTSetRequireAuth0x0004lsfMPTRequireAuthflag. Requires individual holders to be authorized.tfMPTClearRequireAuth0x0008lsfMPTRequireAuthflag. Holders are not required to be authorized.tfMPTSetCanEscrow0x0010lsfMPTCanEscrowflag. Allows holders to place balances into escrow.tfMPTClearCanEscrow0x0020lsfMPTCanEscrowflag. Disallows holders from placing balances into escrow.tfMPTSetCanTrade0x0040lsfMPTCanTradeflag. Allows holders to trade balances on the XRPL DEX.tfMPTClearCanTrade0x0080lsfMPTCanTradeflag. Disallows holders from trading balances on the XRPL DEX.tfMPTSetCanTransfer0x0100lsfMPTCanTransferflag. Allows tokens to be transferred to non-issuer accounts.tfMPTClearCanTransfer0x0200lsfMPTCanTransferflag. Disallows transfers to non-issuer accounts.tfMPTSetCanClawback0x0400lsfMPTCanClawbackflag. Enables the issuer to claw back tokens viaClawbackorAMMClawbacktransactions.tfMPTClearCanClawback0x0800lsfMPTCanClawbackflag. The token can not be clawed back.Note: Setting and clearing the same flag simultaneously will be rejected. For example, you can not provide both
tfMPTSetCanLockandtfMPTClearCanLock.4.2. Failure Conditions
MutableFlagscontains invalid valuetemINVALID_FLAGMPTokenHolderis provided whenMutableFlags,MPTokenMetadata, orTransferFeeis presenttemMALFORMEDFlags(excepttfUniversal) is provided whenMutableFlags,MPTokenMetadata, orTransferFeeis presenttemMALFORMEDtfMPTSetCanLockandtfMPTClearCanLocktemMALFORMEDMutableFlags,MPTokenMetadata, orTransferFeeis present butfeatureDynamicMPTis disabledtemDISABLEDMPTokenIssuanceIDdoes not existtecOBJECT_NOT_FOUNDAccountis not the issuer of the targetMPTokenIssuancetecNO_PERMISSIONMutableFlagsattempts to modify flags not declared as mutabletecNO_PERMISSIONMPTokenMetadatais present but was not marked as mutabletecNO_PERMISSIONTransferFeeis present but was not marked as mutabletecNO_PERMISSION5. Examples
5.1.
MPTokenMetadatais Mutable5.1.1.
MPTokenIssuanceCreateTransactiontfMPTCanChangeMetadatais set, indicating theMPTokenMetadatafield can be modified.5.1.2.
MPTokenIssuanceSetTransactionSample 1(successful):
MPTokenMetadatawas set mutable, so this will update the metadata from464F4Fto575C5C.Sample 2(rejected):
lsfMPTCanLockflag by includingtfMPTSetCanLockin theMutableFlagsfield. However, the mutation will be rejected becauselsfMPTCanLockwas not marked during creation.5.2.
TransferFeeand Some Flags are Mutable5.2.1.
MPTokenIssuanceCreateTransactiontfMPTCanMutateTransferFeeis set, indicating theTransferFeefield can be modified.tfMPTCanMutateCanLockandtfMPTCanMutateCanEscroware set, indicatinglsfMPTCanLockandlsfMPTCanEscrowcan be modified.5.2.2.
MPTokenIssuanceSetTransactionSample 1(successful):
TransferFeewas set mutable. It will be updated to 200.lsfMPTCanLockflag and clear thelsfMPTCanEscrowflag, which were marked as mutable.Sample 2(rejected):
lsfMPTRequireAuth, which is not mutable.Sample 3(rejected):
MPTokenMetadata, which is not mutable.Beta Was this translation helpful? Give feedback.
All reactions