NFTs on Stellar utilize a Data Entry to hold the IPFS hash or CID for the content being tokenized. Once locked, the NFT’s issuing account will forever point to a single IPFS hash regardless of changes to the token’s toml, which is stored elsewhere and can be modified.
Some have chosen to link the NFT’s Data Entry directly to their tokenized content, but the Best Practices for Creating NFTs on Stellar suggests linking to the metadata stored in a JSON file on IPFS.
Either way, once stored as a Data Entry, the IPFS hash or CID is no longer stored in plain text, and many people aren’t sure how to locate the original files from the NFT’s Data Entry on Stellar. It may be difficult for many people to uncover this information if the home domain or toml no longer functions, or if the NFT isn’t currently listed on a Stellar NFT marketplace where this information may be displayed automatically.
How to Find the NFT Data Entry
First, a Data Entry comes in two parts; Name and Value. The Name is a string that refers to the data, the Value is the data you’d like to reference. Both of these are limited to 64 bytes long. The naming convention suggested for NFTs is ipfshash, and the Value would then be the hash or CID of the JSON metadata file pinned on IPFS. Also, each data entry increases the minimum base reserve needed to be held by the NFT issuing account.
Here we’ll look at the Data Entries for XomB, a Stellar Drone NFT. If you go to the asset page for XomB on Stellar Expert, you will not see a Data Entry. Data Entries are stored in the asset issuing account.
The XomB issuing account has a home domain where the toml is stored, it also shows that the account is locked, meaning that it can perform no future operations, including issuing assets or making changes to the data. Once the issuing account is locked, it can never again be changed. All funds in the account are permanently locked.
At the bottom of the Summary information about the asset issuing account, you will find the Data Entries. XomB has two, one called ipfshash and one called vault. Vault is a naming convention that I use to add value to NFTs on Stellar by providing market liquidity, without human intervention, for as long as Stellar exists. The vault is a wallet address where liquidity pool shares have been permanently locked.
But let’s stick to the ipfshash Data Entry.
ipfshash: UW1hY0prZ1k1V2V0V1pVd2tYVldZalBHRUQ2Q21xbUhZR05obkpxaEFyZ0s0OQ==
Stellar uses Base64 to encode the binary data in the Value portion of the Data Entry. To see what it reveals you have to decode it using a Base64 decoder.
Doing so, UW1hY0prZ1k1V2V0V1pVd2tYVldZalBHRUQ2Q21xbUhZR05obkpxaEFyZ0s0OQ==, becomes QmacJkgY5WetWZUwkXVWYjPGED6CmqmHYGNhnJqhArgK49, which is the IPFS hash for the XomB metadata. This not only shows the location of the original file and its description, but is also immutable like the XomB image whose IPFS location is also stored in the metadata.
Uniform naming conventions for Data Entries, like ipfshash or vault are just the beginning. Wallets that can read and utilize these Data Entries could open up many more use cases for the Stellar network.
If you are interested in testing out decoding and reading Data Entries on Stellar, decode the XomB vault entry to find the location of the permanently locked liquidity. Does that wallet also have a Data Entry? Any guess as to what you’ll find at the end of that road?