NFTokenMint

The XLS-20 standard for NFTs has a preliminary implementation that can be used in test networks, but is not yet available as an amendment to the XRP Ledger protocol. An amendment may be included in a future XRP Ledger release.

The NFTokenMint transaction creates an non-fungible token and adds it to the relevant NFTokenPage object of the minter as an NFToken object. A required parameter to this transaction is the Token field specifying the actual token. This transaction is the only opportunity the minter has to specify any token fields that are defined as immutable (for example, the TokenFlags).

If the transaction is successful, the newly minted token is owned by the account (the minter account) that executed the transaction. If needed, the server creates a new NFTokenPage for the account and applies a reserve charge.

Example NFTokenMint JSON

{
  "TransactionType": "NFTokenMint",
  "Account": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
  "Issuer": "rNCFjv8Ek5oDrNiMJ3pw6eLLFtMjZLJnf2",
  "TransferFee": 314,
  "TokenTaxon": 0,
  "Flags": 2147483659,
  "Fee": 10,
  "URI": "ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf4dfuylqabf3oclgtqy55fbzdi",
  "Memos": [
        {
            "Memo": {
                "MemoType":
                  "687474703A2F2F6578616D706C652E636F6D2F6D656D6F2F67656E65726963",
                "MemoData": "72656E74"
            }
        }
    ]
}

This transaction assumes that the issuer, rNCFjv8Ek5oDrNiMJ3pw6eLLFtMjZLJnf2, has set the MintAccount field in its AccountRoot to rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B, thereby authorizing that account to mint tokens on its behalf.

Execution

In executing, this transaction examines the MintedTokens field in the account root of the Issuer and uses it to construct the TokenID for the token being minted. If the field does not exist, the field is assumed to have the value 0; the value of the field is then incremented by exactly 1.

NFTokenMint Fields

In addition to the common fields, a NFTokenMint transaction uses the following fields:

Field Name Required? JSON Type Internal Type Description
TransactionType Yes string UInt16 Indicates the new transaction type NFTokenMint. The integer value is 25.
Account Yes string AccountID Indicates the account that is minting the token. The account MUST either:
  • match the Issuer field in the NFToken object; or
  • match the MintAccount field in the AccountRoot of the Issuer field in the NFToken object.
Issuer No string AccountID Indicates the account that issues the token. This value is optional and should only be specified if the account executing the transaction is not the Issuer of the NFToken object. If it is present, the MintAccount field in the AccountRoot of the Issuer field must match the Account. Otherwise, the transaction fails.
TokenTaxon Yes number UInt32 The taxon associated with the token. The taxon is generally a value chosen by the minter of the token. A given taxon can be used for multiple tokens. This implementation reserves all taxon identifiers greater than or equal to 0x80000000; attempts to use mint tokens with such taxons should fail and a fee should be claimed.
TransferFee No number UInt16 The value specifies the fee charged by the issuer for secondary sales of the Token, if such sales are allowed. Valid values for this field are between 0 and 9999 inclusive, allowing transfer rates of between 0.00% and 99.99% in increments of 0.01.

The field MUST NOT be present if tfTransferable is not set. If it is, the transaction should fail and the server should claim a fee.

URI No string BLOB A URI that points to the data or metadata associated with the NFT. This field need not be an HTTP or HTTPS URL; it could be an IPFS URI, a magnet link, immediate data encoded as an RFC2379 "data" URL , or even an opaque issuer-specific encoding. The URI is NOT checked for validity, but the field is limited to a maximum length of 256 bytes.
Flags No number UInt32 Specifies the flags used for the minting transaction. See the mint transaction flags in the following table.

NFTokenMint Flags

Transactions of the NFTokenMint type support additional values in the Flags field, as follows:

Flag Name Flag Value Description
tfBurnable 0x00000001 If set, indicates that the lsfBurnable flag should be set.
tfOnlyXRP 0x00000002 If set, indicates that the lsfOnlyXRP flag should be set.
tfTrustLine 0x00000004 If set, indicates that the lsfTrustLine flag should be set.
tfTransferable 0x00000008 If set, indicates that the lsfTransferable flag should be set.

Embedding additional information

If you need to specify additional information during minting (for example, details identifying a property by referencing a particular plat , a vehicle by specifying a VIN , or other object-specific descriptions) you can use the memo functionality already available on the XRP Ledger as a common field. Memos are a part of the signed transaction and are available from historical archives, but are not stored in the ledger.