0014 XLS-14d: (DEPRECATED) Non fungible tokens (indivisible NFT's) on the XRPL #30
Replies: 23 comments 78 replies
-
@JoelKatz: I know (from @nbougalis) that the two (?) of you have some ideas on NFTs as well. Love to read your proposal & hear how you feel about this proposal. |
Beta Was this translation helpful? Give feedback.
-
The decimal issue is similar to what we face with the Fan Tokens we are launching. They are zero decimal, indivisible and it presents unique problems. Much easier workarounds for fungible tokens. There are so many bad practices with NFTs right now. I am interested to see how they will be displayed. The thing that is really lacking on OpenSea Marketplace, CB Wallet App etc are strong interfaces for NFTs. They should display key info like total #. There is so little emphasis on rarity/ serial #s with many ETH NFT platforms. Would love to see this market place and UI geared towards collectors who want to see NFTs displayed beautifully and the total # of NFTS minted displayed very prominently. This will help attract collectors, investors at scale while dissuading users from overminting. The blackhole is a must. We have lots of artists interested in redeemable tokens for physical products, rare physical collectables and irl experiences that would want to test in the near future as well. |
Beta Was this translation helpful? Give feedback.
-
I like extending the form of token creation on the XRPL in a protocol that you lay out above. Conceptual linking the amount or unit of account of the token with the literal unit of account of the token on the XRPL is cohesive, it is precious and no longer divisible. The suggestions around the issuer account has me thinking. |
Beta Was this translation helpful? Give feedback.
-
I find the current proposal good, but lacking important details about what metadata URI format and metadata JSON schema to use. This should be standardized as well. I suggest we take inspiration from EIP-1155, specifically the metadata URI and metadata URI JSON schema. Other blockchain and NFT developers are familiar with this standard and I see value in adhering to existing standards to the greatest extent possible. An XRP Ledger variant of EIP-1155 would allow for ID substitution by clients as long as:
An example URI https://cdn.example.com/{id}.json formed from the 40 character hexadecimal currency code would then look like: https://cdn.example.com/0000000000000000000000000004CCE0.json, if the client is referring to token ID 314592/0x4CCE0. I also propose that the NFT issuing account domain MUST be set with an AccountSet transaction. Using the same example as above, the issuing account of the NFT 0x4CCE0 would then have the domain cdn.example.com set. This allows on-ledger discovery of both domains and NFT IDs. The XRP Ledger domain property allows for up to 256 bytes to be stored, which should be more than enough. Regarding the metadata JSON schema, I suggest we use EIP-1155 as is, properties like properties.decimals may be unused. |
Beta Was this translation helpful? Give feedback.
-
I've been working on the idea of issuing NFTs on XRPL myself and posted a scheme I tried on the testnet here: https://www.xrpchat.com/topic/36795-nfts-on-xrpl-how/?do=findComment&comment=898858 I do have some confusion over the appropriate amount to issue (precision vs. minimum value), so if issuing 1e-15 is incorrect (i.e., must issue 1000000000000000e-96 for a unique token), I will have to amend my NFT implementation scheme. Otherwise, I chose to point to the NFT object using the Memo field in the issuing Payment transaction instead using the AccountSet Domain field. While the Memo field has the advantage of allowing for more information storage, I can see the advantage of using the Domain field: lookup of the issuing account's metadata vs. lookup of the issuing Payment transaction. Looking forward to being a part of this discussion -- and glad to know that others are working on the same problem! |
Beta Was this translation helpful? Give feedback.
-
After reviewing how the data is presented it might be best to convert to a DDEX related platform. |
Beta Was this translation helpful? Give feedback.
-
Would using PayString IDs suffice as an identifier for an NFT? This would likely look like Issuer = wietsewind$xumm.app, NFT = wietsewind+nft$xumm.app |
Beta Was this translation helpful? Give feedback.
-
It is necessary to 'lock up' one owner reserve (currently 5 XRP) for each NFT held, I believe. Any concern about that? I think JoelKatz's proposal creates new ledger object types and allows up to 32 unique NFTs to be held while charging only 1 reserve. (A larger change that requires an amendment, of course.) There is a potential security concern around 'counterfeit' NFTs: if someone can be 'tricked' into trusting an issuer for a particular NFT currency code, then 'rippling' could allow someone to send a counterfeit NFT and receive the real one. This is due to:
This could likely be solved by having a 'best practice' of client software checking for any existing conflicting trustlines before creating a new one. |
Beta Was this translation helpful? Give feedback.
-
How could we include royalty payments for NFTs? For example, the artist or issuer may want to receive a percentage of every secondary sale or use, automatically sent to an account or set of accounts, perhaps in a currency of choice. There are a couple different ways I could imagine this being implemented:
|
Beta Was this translation helpful? Give feedback.
-
We should define and set aside a value for the first 8 bits of a hex currency code for NFTs. The existing hex values are:
So how about |
Beta Was this translation helpful? Give feedback.
-
It would be cool to include 4 chars of ASCII so that the NFT currency code has a human-readable portion. This would make it easy for clients to show something recognizable without needing to do a lookup in an external database. Example:
|
Beta Was this translation helpful? Give feedback.
-
A few questions:
Here are a few ideas for uses of XRP NFT's:
The unique advantage of an NFT is that the purchaser can resell their ownership. |
Beta Was this translation helpful? Give feedback.
-
Can this proposal include storing data that can be used by the Ripple Data API v2, to filter the ledger for all NFT's, or just one type of NFT (like CryptoPunk)? Ripple Data API v2 includes the following methods that can accept query parameters to retrieve particular Transactions:
Without filtering capability, how would one display a list of all NFT's (and a list of just one type of NFT) without storing the data off-chain? To get all transactions in the ledger, and manually filter, does not seem feasible. |
Beta Was this translation helpful? Give feedback.
-
You indicated that your proposal requires users to "opt in" to receive a specific token from a specific issuer, by explicitly signing a TrustSet transaction. Will this requirement eliminate the ability to use Ripple to create and manage a project such as the Kings Of Leon album that was just released as an NFT: If someone paid for a music album as a Ripple NFT, will the recipient have to go through a process that may be difficult for a novice? With Ethereum, you can create the NFT without any action from the recipient, and the NFT will immediately appear at etherscan.io. Of course, creating an NFT with Ethereum currently costs more than $20, which is why a Ripple solution would be preferable. |
Beta Was this translation helpful? Give feedback.
-
Throwing this idea into the mix: Edit: Edit 2: |
Beta Was this translation helpful? Give feedback.
-
This is super exciting! @Wietse-Livingroom do you have a plan to support fractional NFT with perhaps an extension to this proposal? I think fractional NFT would be of tremendous value in the near future. Also, we should consider DEX support of NFT as well. XRPL is uniquely positioned to succeed in the NFT ecosystem IMO and if we can have a standard/plan to support NFT on DEX, that would be great. I also don't think blackhole steps needed as we inherently trust the NFT issuers already. But that is minor. Finally, this is not mentioned here, but what if we encoded the NFT's configurations into the currency code vs memo? For example, can this NFT be further divided into fractional NFT? |
Beta Was this translation helpful? Give feedback.
-
I've written a sample viewer based on my suggestion above https://richardah.github.io/xls14-resolver/ |
Beta Was this translation helpful? Give feedback.
-
I have spent some time getting acquainted with NFTs on Ethereum, and how they are used today mainly as a way to sell and trade “collectibles”, such as art. While I fully support and appreciate the work being put into making a standard of how to use the existing XRPL features to support NFTs, here are some of my observations and why I believe it will not be competitive to other chains without amending the XRPL, e.g. with a new token model in addition to the existing trustline/IOU. With current gas prices on Ethereum, it can easily cost 50+ USD to issue an NFT in an existing contract, and of course even more so to create a custom contract. With smart contracts for bidding/auctioning, submitting bids and accepting bids is also expensive. The XRPL has a unique opportunity to tap into this market, with speed and low transaction costs, but it will require offering similar or alternative solutions to what people are already used to. Not “just” a workaround :) Concern 1: To prove immutability, the issuing account will have to be blackholed. This leads to a 1-1 ratio between NFTs and Accounts. While DeletableAccounts was introduced to lower the amount of accounts stored on the ledger, introducing a practice of creating accounts that can’t be deleted to issue tokens, will have the opposite effect. Further, it works against the benefit of the XRPL being cheaper, as it will “burn” the base reserve but leaving it untouchable. Concern 2: To receive a NFT, a trustline has to be established. This will have the costs of an owner reserve on the holding account, per NFT. Collectors would end up with many trustlines and a growing inaccessible balance. Concern 3: Data persistence. While the NFTs issued in trustlines will remain, the transactions used to issue it will eventually be “history”, without guaranteed persistence. Separating token payload and token by using a pointer to a transaction pose a risk of loss of token payload. However much unlikely, and admitted a more theoretical than practical concern. It is a real concern however, depending on the value of the NFT (priceless digital art? A house?). Concern 4: Lack of comparable features. Some of the value of the NFTs on Ethereum comes from things like “collections” (the smart contract), the on-chain bidding systems, royalties (on resale) … I believe that it should be considered whether NFTs is a party that XRPL wishes to attend – is it here to stay or is it a trend? If the XRPL wishes to join, I think it’s beneficial to look at ways to amend the XRPL with functionality that can support NFTs (and could probably be broken down in smaller features to benefit other things too). Wishful thinking:
Eventually I’d like to see support that doesn’t rely on “blackholing” to prove immutability, support some of the scalability from the ERCs, doesn’t end up in 1-1 ratio between accounts and NFTs, and doesn’t require 1 trustline per NFT. Honestly, without amending the XRPL, the model already discussed could get traction for as long as the costs associated is low compared to other chains. But wouldn’t it be better to “go all in”, if NFTs are here to stay? For comparison, in 9 months there has been issued more than 50000 NFTs on Rarible alone. Many in the latest months alone, despite the extreme costs associated. |
Beta Was this translation helpful? Give feedback.
-
How about treat NFT as a new type of account object with auction support, so no trustline needed, but can transfer to other account. |
Beta Was this translation helpful? Give feedback.
-
Thomas raised valid concerns. I'd like to share some of my views for NFTs
on XRPL.
I think NFTs are here to stay and will not go away for a long time, but
developers will need a really good reason to move away from Ethereum to
the XRPL.
For mass adoption we'd need to remove all friction and make it as
easy as possible for developers.
XRPL should also fully support the standards ERC721 and ERC-1155 to
maximise compatibility with existing systems.
I dislike that a Trustline needs to be established to be able to
send/receive a token.
…On Wed, Mar 10, 2021 at 3:46 AM RichardAH ***@***.***> wrote:
Re: Hooks and NFTs.
I think NFTs will eventually mirror wrapped and unwrapped assets on other
chains:
An unwrapped NFT is a trustline balance that can interact with the DEX,
be sent and received by accounts and potentially participate in rippling
(if I want to trade my A for your C but you only want a B, and someone
else with a B wants an A we can complete a path).
A wrapped NFT lives inside HookState and is effectively an IOU from that
Hook to you. This wrapped NFT can then be manipulated by the Hook for any
purpose desired, such as auctions etc.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#30 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ABT75EOTB6ZGSTRP4L5XMY3TC4WX3ANCNFSM4YHRDHIA>
.
|
Beta Was this translation helpful? Give feedback.
-
Was having some "shower thoughts" surrounding this proposal. I could see a lot of use cases for XRPL NFTs as an "I already paid for this" marker. If I have an app that has a free version, but you need to pay me 20 XRP for the premium content. Once the fee is paid, an NFT would be issued which would would be the key that unlocks the premium content. You would have access the the paid content wherever your wallet was integrated and could even sell your premium access by selling the token to someone else once you're done with it. Let me know if this sounds plausible. I've been chewing on NFTs for a little bit since they seem to be the current hotness, but I can't shake the feeling that the current use cases (like selling a tweet or an NBA highlight) are very nascent and are more speculative than actually useful. |
Beta Was this translation helpful? Give feedback.
-
Love all the effort put into trying to bring this to the XRPL, however im not a fan of making something work simply because the underlying code does not support it. Having worked on projects over multiple decades, you will eventually work your self into a corner. It would be better to support a new IOU type and extra fields on that type for its meta data than try patch together a solution stuffing extra fields here and there. It would be better for the ecosystem if this was to be natively supported. Is my thinking. |
Beta Was this translation helpful? Give feedback.
-
NFTs are here to stay... games have the best use-case for them rn. Many gamers would love to own own rare in-game land, characters or props. As long as the game is fun or makes people money it will motivate them to own the NFTs. As far as digital art in itself. There is not much value there imo it's more of a fad. I don't think game NFTs are a fad. Digital art must be put to a use to be worth money imo. XRP has a large community ready to jump on any opportunities. I am currently working on an NFT marketplace as well as a game that will follow. I would love to work with any freelancers who believe they can help me create this on the XRPL. |
Beta Was this translation helpful? Give feedback.
-
DEPRECATION NOTICE
This proposal is DEPRECATED and should not be used. It served as a proof of concept. With XLS 20 being developed as we speak it is a bad practice (imo) to use XLS 14.
NFTs
A non-fungible token (NFT) is a special type of cryptographic token which represents something unique; non-fungible tokens are thus not mutually interchangeable. This is in contrast to eg. the native asset on the XRPL,
XRP
, where XRP can be sent and received without being uniquely (per token) identified.Where normal tokens and the native asset
XRP
can be divided (eg. receive 1 XRP, send 0.5 XRP), NFT's can only be used as one whole, unique token: they are indivisible.Applications
Non-fungible tokens are used to create verifiable digital scarcity, as well as digital ownership, and the possibility of asset interoperability across multiple platforms. NFTs are used in several specific applications that require unique digital items like crypto art, digital collectibles, and online gaming.
Issuing tokens on the XRP Ledger
The XRPL supports issuing tokens (formerly (?) called "IOU's") that can be issued, sent, transacted to other XPRL accounts, etc.) as can be read in the XRPL Docs.
Note on issued tokens on the XRPL
Issuing tokens on the XRPL
A simple issue procedure of a token on the XRP Ledger:
AccountSet
transaction, setting flag8
: "Default Rippling". This is required for future Trust Lines set up by users, to allow them to send the token to each other.TrustSet
transaction, trusting the token code to be issued by the Issuing account (this process should be repeated by all future recipients of this token)Payment
transaction to issue X amount of the token code to the Receiving Hot WalletSetRegularKey
to an account that can't be accessed by anyone, eg.rrrrrrrrrrrrrrrrrrrrBZbvji
AccountSet
to disable the native key of the keypair to that accountThe procedure outlined above works & is actively being used, but results in fungible tokens: they can be send partially, and any value of the issued cannot be uniquely identified.
Issuing NFTs the XRPL
The XRP Ledger has an issued token precision of 15 significant figures. The smallest amount of an issued token the XRPL can handle is
1000000000000000e-96
. The decimal value of this scientific notation is:0.000000000000000000000000000000000000000000000000000000000000000000000000000000001
0.{80 zeroes}1
This is a quite unusual amount of decimal positions for real life use cases. There is no likely use case that requires that amount of decimal places to ever be used, as there will always be something closer to the decimal sign. This results in the last digits being sliced off anyway (because of the XRPL supported 15 significant figures). Even some value of a BTC IOU (8 decimal places) + Transfer Fee + rounding doesn't even come close to using anything close to the available decimal places.
Proposal
Let's assign the last (say) 11 figures to client side / user interface 'NFT behaviour':
0.000000000000000000000000000000000000000000000000000000000000000000000000000000001
0.0000000000000000000000000000000000000000000000000000000000000000000001
0.0000000000000000000000000000000000000000000000000000000000000000000000
|00000000001
As you can't divide values it even further (they are already behind the decimal separator, and will be turned into the scientific notation when querying the XRPL), if only one (1) token value is issued, only one (1) token value can be sent.
So: if the value of issued currency is in the range of
1000000000000000e-85
-1000000000000000e-96
, clients should handle (represent, mostly a user interface affair) the amount as NFT.This requires no amendment on the XRPL side, as all of this is possible today.
Issuer (issuing account) requirements
Domain
value (AccountSet
) must be set, and resolve to a (to be discussed separately) https:// document providing token information. This can be discussed separately from this proposal, as existing issued tokens would benefit from a standard like that as well.0x02
prefix for HEX currency (token) code. The remaining HEX currency (token) code can be used to identify the unique asset (UTF8 to HEX). The HEX currency (token) code should resolve to object information using theDomain
value + a appended value (to be determined, eg. a.well-known
setup / extension of the XRPL TOML /EIP-1155
, ... (needs another proposal)Issuer (issuing account) best practices
1000000000000000e-96
) of each token, create unique tokens for unique objectsEmailHash
value (AccountSet
). Possibly use eg. Gravatar to list your email address and attach a logo, so explorers like Bithomp show a logoImplementation
This sample implementation in Javascript can:
Payment
transactionVice versa, when composing a transaction, amounts (possibly user input) should be converted to NFT representation:
Note on amounts of tokens issued (good / bad practice)
It is considered a practice to issue too many of the same NFT-like tokens (amounts). One can argue that issuing a large amount of tokens as per this proposal, the issued token can no longer be considered a Non Fungible Token.
If a token represents a real life object, eg. a painting, and there are three unique paintings, then three unique tokens will be issued (presumably using HEX currency codes representing the three unique paintings). All unique issued tokens will have an issued amount of
1000000000000000e-96
(NFT-like representation: 1).Only the account that has a Trust Line to the issuer and for a specific token setup, and owns the indivisible value of
1000000000000000e-96
owns the NFT.Impact (user interface, logic, code)
Amounts fetched from the XRPL (Trust Line balance, Payment value, etc.) should be checked if an amount is NFT-like:
3100000000000000e-95
is represented as31
).Payment
transaction) the user input should be converted to NFT-like scientific notationIssuer (issuing account) requirements
above)1000000000000000e-85
This issue contains the planned changelog for adding support for XLS-14d to XUMM Wallet.
Advantages
Potential disadvantages:
Payment
transactions will work.Sample (issuing, sending)
Here's a sample issue + NFT sending sequence containing XPRL JSON template transactions.
Beta Was this translation helpful? Give feedback.
All reactions