0020 XLS-20d Non-Fungible Token Support (native) #46
Replies: 74 comments 145 replies
|
Digesting this, but from my initial read, looks pretty awesome! |
|
Should we allocate a draft number? Looks like |
|
I suspect we need to clarify rules for the
In general the details on the |
|
Regarding the question of the identifier of an Use the |
|
Interesting NFT spec:
One general comment - as we scale we should consider allowing for off-chain message signing for use on-chain. This means we will be able to do offchain orderbooks and onchcian execution to reduce offercreate noises. |
|
It feels like this standard is very close to enabling an on-ledger software licensing model. @WietseWind have you considered what issuing a XUMM Pro license via NFT would look like? I don't think that you could pull off a subscription based licensing model with this standard, but the ability to profit off of every secondary market transaction seems very appealing. |
|
This is really interesting! I like the idea of the native support of NFTs on the XRPL. |
Really wrestling with this part. I don't have any experience with the IPFS, so that's probably slowing me down. I can envision a NFT's that are "minimally invasive" that the ledger should be able to accommodate directly on chain. I don't know what that limit is (128 characters?) but I can easily see something like ownership of virtual land being nothing more than a hash and some coordinates. Seems a shame to necessitate a pointer off-ledger for something so simple. |
|
The paper sounds plausible in itself, but I think the part with the external references still needs to be clarified. Offchain data storage in particular has some pitfalls in the context of data management, such as trustworthiness, rights management, data integrity and data security. A simple link is usually not enough. You should therefore pay particular attention to the secure connection to external data services. IPFS sounds promising at first, especially for NFTs (Hash of Content eq. Address), but I am currently not clear about how IPFS itself regulates data access restrictions. I think it is unfavorable if all data content is publicly available one way or another. But in the end this is also part of the NFT's rights policy and order of responsiblity. |
|
Excited to see the possibilities of NFTs on XRPL. I am working on CO2 Bonds/Conservation NFTs and would love to learn if something like this https://github.com/BooneTB/CO2StakingBonsai/blob/main/CarbonBOND |
|
I've got an Social Media prototype using ethereum hybrid 721's.... Every asset uploaded is a "721" contract but can also hold a token balance. I call my tokens SAMY. Every view on the asset reduces the token balance by one, paid to the "viewer" Every comment/like, adds a token to the balance, paid by the "commenter/liker". A simple basic decentralized way to measure engagement and reward users. I stripped the ETH protocol today and I'm going to try to add the XRP protocol features for NFT. I did have one question. Smart Contracts on ethereum can hold value, I view this feature in XRPL as just the wallet that holds the value. Sure, the functionality of the code doesn't reside inside the wallet on XRPL, but by using multi sign, I can basically create the same idea and did this using a swift class if anyone is interested. Is there a better way to achieve this? I know you just released hooks but to be honest I've been head down in my ethereum private blockchains. I like XRP more tho. Would love to discuss. |
|
Would it be possible for a |
|
When minting an NFT it looks like there are 2 routes that can be taken from a 3rd parties perspective. Example: Website A wants to offer the ability for users to create NFTs. Website A must either:
Is this correct? What are the downsides for setting User B, User C, User D, as issuers when they mint their own NFTs and not setting Website A as the issuer? |
|
Great proposal! I think this is a solid step towards supporting NFTs on XRPL. I have a question about These objects are updated automatically with If so, what possible use cases could there be for having the ability to change this object outside of a mint or burn transaction? |
|
I've been thinking a little more about this proposal and would like to suggest a change that should make NFT objects even more lightweight. Currently, an NFT contains both a 20-byte issuer and a 32-byte hash, for a total of 55 bytes. The 32-byte hash is meant to distinguish this NFT from any other, but in reality it only adds trouble. For example, an issuer could "double-issue" a token, and there's no way for the ledger to detect this, much less prevent it. Maybe that's fine, of course; maybe issuers shouldn't shoot themselves in the foot, but the spec is meant to allow for "non-fungible" tokens and yet it allows for the creation of binary-identical objects. What does it mean when have two "non-fungible" tokens that are identical and cannot be distinguished? What if we were to add an additional field: a "serial number" of sorts. But what to set it to? Well, the transaction's sequence number seems reasonable. It's never reused, so it works. It means that even if the issuer reuses the hash, the two resulting NFTs are distinct. This causes trouble with the mint account, but we can solve this by adding a new optional field to the account root: a 64-bit number But if we're going to do that, why even have a 256-bit identifier? Why not just treat the pair And this also enables something else that's really neat: we can create semi-fungible tokens. We can simply add an optional 32-bit field to an NFT, let's call it So, now we can use Let's say the issuer wants to issue an NFT to represent a limited edition album. They can assign that album a unique 32-bit number, and issue any number of tokens which are all "linked": |
|
There is no way given this spec. I have a PR in review that will add this
ability to clio - it will let you query by tokenid and see the owner, as
well as the decrypted uri and other fields.
If you’re unfamiliar With clio, it’s a reporting/performance layer on top
of rippled.
We are planning to have this feature ready soon and available for query.
…On Mon, Apr 11, 2022 at 20:52 Mahiros ***@***.***> wrote:
Hello, I want to get owner account info from NFTokenID, how can I get
account info?
I can get NFTs list from the account using account_nfts.
—
Reply to this email directly, view it on GitHub
<#46 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ABXUFDK7W2WTK3JKL7PUBLLVETCL3ANCNFSM45N47IJA>
.
You are receiving this because you are subscribed to this thread.Message
ID: ***@***.***>
|
|
Hi guys - Just to keep systems/docs updated, I'd like to suggest a few edits...
|
|
Feature Request This feature request describes absent yet essential functionality on the XRPL, with regards to fetching Account Objects for a particular address. It is currently possible to request certain types of Account Objects by providing the type of such objects in the parameters of an “account_objects” request, as indicated here. For example, adding { type: “escrow” } to an “account_objects” request will exclusively return Account Objects of the escrow type. Such functionality, however, does not exist with regards to the new NFTokenOffer objects that have been introduced through the XLS-20 amendment. Indeed, the only possible means by which to retrieve all NFTokenOffers related to an account is to query for all of the Account Objects associated with an account, and filter against their type field. As a consequence, there exists no efficient way to retrieve only NFTokenOffer objects related to one account. Ultimately, this calls for a revision that enables the provision of a relevant type such as { type: “nftoken_offer” } or similar. |
|
@scottschurr, I think he is referring to offers on an NFT. |
|
Unfortunately that is not possible given the directory structure of NFTs.
That structure was chosen for performance, and to reduce reserve
requirements for end-users. This is just an example of dev tradeoffs, but
Clio is able to fill in the gap.
…On Wed, Apr 20, 2022 at 4:19 PM Julian Gums ***@***.***> wrote:
Clio seems like a great tool but arguably looking up who a given NFT
belongs to seems to be something that is so common that it would be great
if it was natively supported.
—
Reply to this email directly, view it on GitHub
<#46 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ABXUFDOSR5MBJD6BHDANFSLVGBRERANCNFSM45N47IJA>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
|
Owner test with regards to accepting buy offers. The following describes a simple flow to demonstrate the somewhat counterintuitive role of the Owner field with regards to the creation of NFToken Buy Offers on the XRPL. This counterintuitive behaviour can be attributed to the premise that the requirement of an Owner field in the NFTokenCreateOffer transaction ensures that such an offer may only be accepted by the address specified in the owner field. The flow described below, however, reveals that this is not the case: Account 1 creates offer for 100 XRP with owner Account 3 Account 2 creates offer for 100XRP with owner Account 3 Account 3 accepts Account 2’s offer Account 2 accepts Account 1’s offer Following from the above described premise, Account 2 should not have been able to accept Account 1’s offer on the principle that Account 1’s offer was made with the Owner field specified as the address of Account 3. The conclusion, thus, is that the Owner field is significant only when a buy offer is being created. Assigning the Owner field with an address that is not the current owner of the NFT prevents that offer from being successfully made, but does not appear to have any further behaviours or interactions. That is to say, the Owner field does not prevent buy offers from being accepted by a ‘new’ owner whose address is different from the ‘original’ owner address which was used to create that buy offer. |
|
@scottschurr When transferring an NFT would all the past orders for that token id owned by XYZ be "destroyed" or is it up to the user client or rpc indexing to handle this? |
|
Hi guys, I have written up a new proposal to expand on the XLS-20d proposal for NFTs. The change would help owners manage the NFT's they have in there wallets and also mitigate some potential bad user experience and negative feedback on how NFT's work in XRPL. It would be good if you take a look, comment and hopefully up-vote my proposal. |
|
Suggested edits to align the standard with the implementation, prior to moving XLS-20d from draft to final: 1.2.1.1.1.4 Example
Example TokenPage JSON
The NFTokenMint transaction
Example NFTokenMint transaction
The NFTokenBurn transaction
1.3. Account Root modifications
1.3.3 BurnedNFTokens
1.4.1.1. NFTokenOfferID Format
1.5.4.1. Fields
|
|
I minted NFTs on behalf of other account. I used Account A and minted for Account B. |
|
Hello |
|
I've come across an issue. It is very easy to create buy offers from unfunded accounts. Here is one I have done for 250M XRP. Obviously I don't have that, even in devnet. https://xls20.bithomp.com/explorer/18B9E787507DD6EA61874BD1E8EA6C61E41825B343542F3FCE97C1666CD899F0 These buys orders generate a tech unfunded error on the sell side. |
|
I'm not sure how the NFTokenPage concept works on an atomic level but I noticed that they never get completely filled with NFTs. Initially, I thought they always fill up to 32 but I'm seeing token pages with 17-29 NFTs in them when I mint. If I mint the same things twice, I get the same amount of pages so it does not seem random but there seems to be a deterministic algorithm for it. But how? How can I work out if I am going to mint x amount of NFTs, how much reserve I will need? Or does this depend on the exact NFTokenIDs as it seems like this is some kind of indexing issue and an NFTokenID can either fit into a page or it can't, based on how high/low it is and a new one needs to be created? Anyone that can explain? |
|
I know that this is already active/enabled on mainnet, but just for the sake of having this documentation correct, I propose following changes to original post:
That is actually not true. So actually the transfer fee is wrong. Also, in the same section, you are showing how tokenId is calculated. With flags as first for characters etc. 000B => Flags: 11, not 12. We cannot have flags with value of 12. |
|
Note for future readers: This spec has been implemented and adopted, and is being updated and approved here: #95 |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
An updated version of this spec can be found here: XLS-20: Non-Fungible Token Support.
The earlier version can be found by looking at the edit history.
All reactions