0016 XLS-16d: NFT Metadata #37
Replies: 5 comments 13 replies
-
|
I like it! My one inclination is thinking that the protocol scheme in the URI can indicate whether or not it's IPFS. I think adopting IPFS directly is not a bad idea, but it's just a URI with a scheme. Maybe I'm the only one that thinks this, but I've been perfectly capable of storing assets for millions of users for years (longer) and for much cheaper than IPFS. In that regard, my suggestion would be to recommend something like IPFS for "primary" URI, but not stipulate it.
|
Beta Was this translation helpful? Give feedback.
-
|
An important read https://twitter.com/jonty/status/1372163423446917122 some of the ISSUES with NFT's |
Beta Was this translation helpful? Give feedback.
-
|
Transferring thoughts from another thread: #34 (reply in thread) If the CTI pointer is failing to resolve to the meta, how does the end users application pull the meta that it requires in order to show the content, or validate they own the digital objects? This is one thing I really like about the XRP ledger, and I find as one of its strong suites as compared to other block chains, you don't require a full history of TXs. If we begin to use the meta in the memo of a TX, and then use a pointer which can roll off (unless you maintain full history), you create complexity. Over time the system will become fragile (NFTs). However, if the pointer/meta is in the Account Root, no number of transactions is required for storage for later retrieval. If not, I think we should really consider putting the meta/pointer data in the Account Root, like the Domain/Email/Msg Key hash, or create a new field (I dont think this is required tho). Im writing a piece of software which may help with this by providing Account Root summary data in a p2p fashion for clients. And while some hosts would need to periodically query the ledger to compile said data, those hosts would not require the full processing power of a full history rippled node to do that, as we are only examining the latest state of the ledgers accounts. And clients as simple as phone web browsers should be able to acquire, parse, and locate whatever services or meta they require from the ledger, from a given address, in a reasonable time period. If you can use the strengths the XRP ledger gives you out of the box, and boot strap your apps that way instead of requiring heavy services like full history nodes, IMHO it makes the app and the use cases stronger. Small light weight apps should have as easy of a time locating services or pointers tied to assets on the ledger as possible w/o requiring resource intensive infrastructure. I understand Xumm has a well maintained back end, full history nodes, beefy post processing w/ lookup tables, etc. But not all apps have that power, and if possible, if we can make that not a dependency for applications, XRP dependent apps and services would be better for it. This would also allow more agility for apps, less dependence on said heavy services like full history nodes do function normally. This is why when I built the demo code I did, it used the Account Root, the one thing that always carries forward. |
Beta Was this translation helpful? Give feedback.
-
|
The "blogpost" link goes to https://coil.com/blogs/edit-post/ckljw6y1a9dba0894xk8inqa0 which is not publicly accessible (I get a 404 error). |
Beta Was this translation helpful? Give feedback.
-
|
@HubertG97 should this spec be moved into PR and kept in the repo or should it be closed? Note that this does not mean that the spec has been accepted/implemented/finalized. I will move it to PR by copy-pasting the existing draft if there is no response in the next week. |
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.
-
In addition to @WietseWind 's XLS-14d and @RichardAH 's proposal XLS-15d here is a proposal to create a standard for the creation of metadata for the tokens created with a CTI in the currency code.
When issuing an indivisible token on the XRPL the only data given is the currency code. For optimal usage, there has to be more metadata for an NFT. For example a description and a URI to an IPFS file.
Using the Concise Transaction Identifier, a prior transaction can be used to mark the metadata contained in the memo's field for the use of the NFT.
The Memos Field in an XRPL transaction is presented as an array of objects which contains one memo field per object. This field consists of the following fields:
The MemoData field can be used for the metadata itself and the MemoFormat indicates the nature of the given data inside the MemoData field (MIME type). To create a certain hierarchy for covering failure of the URI specified, the MemoType field contains the numbering of the data named as shown below followed by the MIME type:
text/plaintext/plaintext/uritext/uritext/uriThe usage of a back-up URI and Data URI can be seen as optional and can be replaced with other kinds of data that have the preference of the issuer of the NFT for example contact information.
The limit of storage is 1kb of data in the memo's field in total. Multiple memos can be used to give as much information as fits to the 1kb of data.
If there is only one memo on the CTI referenced transaction and the memo data contains a URI of any sort then this is deemed to be the NFT content. The multiple memo's structure will be the advanced method to issue NFTs. The standard will also be compatible with previously created NFTs referred to as the simple method.
Issuing
For the metadata, there has to be created a transaction from the same address as the issuer of the NFT to for example a hot wallet. This transaction of 1 drop contains the description and URIs needed for the NFT.
The currency code for an NFT consists of 3 parts:
After this, a Trust line can be set up using the above currency code and the NFTs being transferred from the issuing address to the hot wallet.
Advanced method
For example
Issuer:
rBzoA1EXxE2FeGV4Z57pMGRuzd3dfKxVUtHot wallet:
rp9d3gds8bY7hkP8FmNqJZ1meMtYLtyPozThe JSON for the metadata transaction would look like this:
Converted to human-readable output's this transaction
Using this transaction's txn hash, txn_index, ledger_hash, and ledger_index creates a CTI of
23080995397183855Converted to HEX it will be
52000B03B6296FThe name of the NFT will be 'Purple moon'.
After conversing this to HEX the complete currency code looks like this
0252000B03B6296F507572706C65206D6F6F6E0002 - XRPL NFT identifier
52000B03B6296F - CTI
507572706C65206D6F6F6E00 - NFT name
When Issuing a token the same address has to be used as the sender of the aforementioned transaction.
As explained in this blogpost a Trust line has to be created between the Issuer and the hot wallet.
Make sure the issuer address has an
AccountSetofSetFlagto8In the currency field the HEX converted currency code is used.
The value is set to
1000000000000000e-95which will result in 10 NFTs.More explanation about this can be found in @WietseWind's proposal XLS-14d
Last step is to send the tokens from the issuer to the hot wallet.
Now there are 10 Purple moon NFTs on address
rp9d3gds8bY7hkP8FmNqJZ1meMtYLtyPozSimple Method
The JSON for the metadata transaction would look like this:
Converted to human-readable output's this transaction
After that, a trust set and sending the tokens is the same as the advanced method
Beta Was this translation helpful? Give feedback.
All reactions