-
Notifications
You must be signed in to change notification settings - Fork 54
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
TIP-27 IOTA NFT standards #65
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the contribution, you are amazing! 🚀
There are some things we need to figure out but it's going in the right direction.
Added TIP-1 headers to the sections and re-ordered out of place segments.
Updated Section headers
Added a comment for future versioning to be submitted as a separate TIP
} | ||
``` | ||
|
||
### Creator Royalties |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does it make sense to include royalties in an NFT standard? From our side, we would like to support royalties, but there are scenarios where it is necessary to have them not immutable, or it is not enough to represent them as a percentage of a sales price traded against something that is not a currency.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Royalties as a standard is included as an optional key. These are not a must but having a standardised royalty schema makes an ecosystem royalty system a lot more interoperable between dApps. It is further possible to expand the royalty options for edge cases through Smart Contracts also.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
just add few comments! Great effort guys!
// human readable name for the collection | ||
"policyName": "My Collection of Art", | ||
// Key Value pair collection of royalty addresses, where address is mapped to the percentage of payout to be sent to it | ||
"royalties": { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You should consider index here. You might want to define sequence as not all royalties might be paid every time. For example, what happens if the royalty is below dust?
// description of the asset | ||
"description": "A little information about my NFT collection", | ||
// define optional attributes for NFT metadata | ||
"attributes": { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would recommend to get inspired from ERC-721 / ERC-1155 metadata standard:
- for keys definitely should be all lower case
- you should consider support for localizations, rich formatting ( display value, css) - as recommended standard ofc
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We are heavily inspired by the ER721 standards, camelCase or snake_case are acceptable in word separation as per JSON schema standards. For example the fromBlock
key as defined by the ERC-721 Standard which is used regularly in examples on the Ethereum Foundation docs. If you are referring to the value, as this is simply a text string this is not an issue.
I am sure Merul can comment a little further in regard to the localisations.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not sure what you mean by localization here but if you mean glyphs from other languages than that shall be covered by unicode already
tips/TIP-0027/tip-0027.md
Outdated
--- | ||
|
||
|
||
# iNFT Standard - IRC27 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
tbh I'm not a big fun of the iNFT prefix. It wasn't even obvious to me that it's for IOTA....It's confusing. Why don't just call it NFT Standard - IRC27 ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I love it! 💯
tips/TIP-0027/tip-0027.md
Outdated
- `IRC27` | ||
|
||
|
||
The schema is defined by one of the following: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this just feels way to limiting and I would be really careful introducing your own system for this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The schema is expandable and versioning is implemented from the offset, introducing schema definitions is extremely advantageous for interoperability, forward and backwards compatibility across dApps in the ecosystem
Removed the section on registry and updated a couple of sections. STILL NEED TO ADD A LINK TO TIP30 - upon submission.
Made a couple of minor edits
Edited out the registry section and updates
Updated example royalties
Updated example royalties
Created new TIP 33 - IOTA Public Token Registry
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to be merged as Draft.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks good, we will get this implemented within Soonaverse within next 2 - 3 weeks. We'll let you know asap if further changes are required.
Hey 👋 im thinking to remove the What do you think? |
As |
I was thinking about adding something 😅 . |
I wouldn’t complicate. You can always store it within uri. Same way as you would set src attribute in html for example |
My bad. I totally forgot the |
Yes, the And i can add everything i like to the So why using an extra attribute which information is already present and add an potentially scam potential? Or am I misunderstanding something? |
I agree that it does not make sense to include the |
Yeah makes sense thinking about it 👍 |
Hi team. I'd like to suggest to add an additional (optional) key in the NFT schema. We are used to thinking of NFTs in relation to digital artworks and in general use cases where a single token can represent an object of value after it has been created and published by the author. However, there are many use cases where a non-fungible token can represent a physical object that belongs to a collection of objects, i.e., a production batch, and which is very interesting to be able to follow the history of the production process from the beginning of the process. From pharmaceutical to fashion to automotive, the number of real-world cases where this scenario applies is endless. Sometimes the life of the post-production object is normally of little interest, especially if they are consumable products, but it is almost always interesting to trace the production process of these products. Addresses can be used to represent the stages into which the production process of each object is divided. Thus transactions that spsot the NFT from one address to another represent optimally the production process. The optional key I suggest adding contains an array of addresses that where NFT can be sent. If this key is present, the transaction that moves an NFT from one address to another must be valid for the array. An "any" operator allows the NFT to be freed from the last address. For example: A tx that moves the NFT from add1 to add2 is valid. |
An additional use case for the suggested key is a public voting process where one person can vote once. In these voting scenarios a voting authority is normaly requred present and required to identify the voters and authorize them to partecipate to the pool process. The vote, in most of the cases need to be secret, but this point is out of topic here. A simple solution to provide an authorization to the voters is to mint and sent to them an NFT that have to send to a final destination address with the vote included in the tx metadata. So in this case the allowed_address_sequence can be a list of two address: voter's address where the NFT is minted, pool address where the NFT have to be sent. |
Hey Stefano, thanks for your input! This sounds like an ideal use case for Smart Contracts. I see the problem, that all dApps needs to check if the address is valid or not. That means, the protocol could just send the NFT to an address which is not allowed. There is no "if/else" here on protocol level, this needs a smart contract. Because of this reason, i would say this should not be part of the NFT standard. You could extend the standard for your applications. If i miss something, please let me know. Is there anything like that on other NFT standards? |
I understand your point. In fact, my first thought was to use a SC for these kinds of scenarios, but objectively for some of these cases it might be too much of a heavy duty. Instead of modifying the NFT standard, it might make more sense to propose a new Unlock condition so that we can limit the displacement of a genenric token on specific addresses? |
On second thought, both Unlock condition and Smartcontract are not safe solutions. In fact, Unlock conditions, if I have not misunderstood, are related to the individual tx, not to the object being moved. This implies that the next "owner" can freely define his own Unlock condition that replaces the previous one. More or less the same applies to Smartcontract, which being deplyoed by an owner, can always be replaced. In my initial idea these validity conditions are to be included in the immutable part of the NFT. Obviously it would be useful for the network to take them into account by considering invalid a tx that moves an NFT to an address not authorized by its author because if the NFT is moved, then there is no way to avoid the new owner to use as he prefers. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM 👍
I've spoke with @Phyloiota the other day as he asked me to review Shimmer OG NFT collection. I've provided him with feedback and he asked me to share it here so here it goes:
I'm not sure if above is something we want to enforce within the specification but it might be worth to consider some of them. Some of them can also be great "suggestions" for artists to follow. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we should discuss and establish specification on how NFT Collection/NFTs are minted and standardize that process.
Hey Adam, thanks for you feedback!
It's defined here - but it should be more specific and the Alias part is missing - https://github.com/Kami-Labs/tips/blob/main/tips/TIP-0027/tip-0027.md#minting-l1-nft-collections
Very Good point - so the example is a bit miss leading and we could need something like homepage
|
Thanks for your feedback ❤️ . I personally think most of this things should be optional. |
Removed collectionId from immutable metadata.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, also Linter passed 👍🏼
Thank you to everyone who worked on TIP-27! 💯 |
This PR creates a TIP about
Decentralised PolicyID registry to prevent fake collectionsmoved to TIP 33rendered version