-
Notifications
You must be signed in to change notification settings - Fork 8
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
expand guidelines, add examples #8
Conversation
@mr-zwets when you get a chance, please let me know what you think about these additional examples and guidance sections! |
so using the new I'm slightly confused the first type in the Great to also have an example One open question posed by @A60AB5450353F40E is why a token-identity has the TokenId both as key for the snapshot history and then repeated again under |
I believe this is to match the result of |
In addition to this q, is there a way to add integrity checks of linked external content, like if I add a link to some picture, where do I put the hash of it? |
Thanks for the the review @mr-zwets and @A60AB5450353F40E! @mr-zwets RE
Yeah, as @A60AB5450353F40E commented, the goal is to have consistency with how on-chain contracts might parse commitments. You can also technically have negative or invalid numbers in commitments, so we have to standardize how that gets handled too; in the client guidelines, we recommend that those cases use the hex encoding in their "NFT ticker symbol", e.g.
Thanks for the question, I should fix the fungible token example to demonstrate that. The basic idea is that a particular asset's "identity" can stay consistent over time, while the actual tokens might need to be reissued using a new category. The clearest example of this is issuing pull-based dividends: the latest token category may change quarterly or even more frequently, and metadata registries will help wallets keep track of the changes and identify dividend covenants to swap their old fungible tokens for the new ones + dividend payment. It's also likely that some tokens will simply need to be one-off reissued occasionally for technical or security reasons (e.g. an issuance wallet/covenant has a bug or a hacked).
I added a rationale section to discuss the options here: https://github.com/bitjson/chip-bcmr/blob/a0faefd109abe008bee44d827de69a82d242e680/readme.md#use-of-absolute-uris TLDR: Best option currently is IPFS, which already builds in a hash for integrity! We could rig on another set of fields in various places to support integrity checks for
It's not trivial to choose an encoding or add support in all clients, so I'm cautious about adding that via "recommended" URI identifier. Of course, you can always choose to standardize your own ( |
Thanks for these responses! For sequential NFTs, I don't see the rational for the requirement to include only positive integer identifiers. An NFT set simply incrementing the hexadecimal in the commitment field would now not display an icon or other metadata for large sections of the collection so the use of scriptnumbers becomes required. |
I think The "key" in the BCMR actually matches the raw TX serialization of the commitment. So one issuer could have "", "01", "02", ..., "79", "8000", "8100" if the NFTs will be consumed by contracts that parse the commitment as while another could have "00", "01", "02", ...,"79", "80", "81" if the NFTs will be consumed by blockchain-external programs that parse the commitment as |
Thanks @mr-zwets and @A60AB5450353F40E for the comments! Sorry for the stream of consciousness below: I'm not certain yet what my preferred "best practice" is for commitment schemes of NFT ticker symbolsIt seems especially valuable to standardize a baseline mapping between commitment contents and numbered "ticker symbols", e.g. Parsable NFT ticker symbolsLonger term, it will be possible for the more specialized "parsable" NFTs to also have comprehensible ticker symbols. E.g. on-chain options contracts might mirror those from legacy finance: On encoding positive integer NFT identifiersThere are really two options for creating sets of unique NFTs:
Some benefits of encoding individual NFT identifiers as VM numbers:
Some downsides of using the VM number encoding:
As @A60AB5450353F40E notes, the registry schema (and our proposed NFT ticker symbol scheme) supports associating metadata with non-VM-number commitments either way. So we're really only deciding on a standard recommendation for issuers. Still thinking on it, but having written this, I'm leaning back toward recommending encoding as VM numbers 🤔 |
Yeah, incrementing an When redoing my "Emerald DAO" in CashScript I discovered that you can open yourself up to malleability if you're not careful:
Yeah, this. BCMR's non-parsed NFTs will just map raw commitment to a "key" in the map and display appropriate picture or w/e. This is just a recommendation on what method to use to generate incrementing keys to enforce uniqueness:
Some issuers may want to use random unique keys for w/e reason, like:
Whatever method they choose to enforce uniqueness of the whole commitment, they can use the "non-parsed" NFT metadata variant. |
I see why minting covenants would use VM numbers as commitment & I also see why 'NFT ticker symbols' are valuable.
I guess my issue is then simply with this:
Instead it could simply say that the NFT ticker symbol becomes the This way using VM-numbers can remain optional if NFT sets wants nice 'NFT ticker symbols', because for that we have to chose a parsing standard and VM numbers seem to make the most sense. I hope this is a good compromise 👍 |
Could we add something to the schema that specifies how the full field is to be interpreted by apps?
|
Ok interesting, thanks for sharing those findings @A60AB5450353F40E!
Ah, thank you @mr-zwets! Right, that provision doesn't make sense anymore. I think I forgot to clean that up from an earlier draft. So NFT ticker symbols can be used in all cases if no
I'm not sure if I'm following, does the handling described in NFT Ticker Symbols work? Essentially: attempt to encode the NFT's key in And of course, UIs can always just display hex-encoded commitment wherever, so the goal of NFT ticker symbols is to standardize a readable, short form. Edit: Actually, NFT Ticker Symbols is really verbose/jumbled from a previous draft. Going to rewrite that now too. New draft: NFT Ticker SymbolsWhere appropriate, user interfaces may indicate a ticker symbol for any NFT. If a particular NFT has no defined Like ticker symbols for fungible tokens, NFT ticker symbols use only capital letters, numbers, and hyphens (regular expression:
|
The new improved draft is good! I think it's very clear |
@mr-zwets @A60AB5450353F40E – Ok! I think that last commit resolves some of the final issues for this version, would you mind reviewing? I added a lot of clarification around ticker symbols and client handling of payout/dividend-paying assets, plus some rationale from our conversation above. |
Thanks for the Noticing that in 'NFT Ticker Symbols' it now says to always use One thing others have pointed out is that in the |
Yeah, you're right – I've been stuck on whether that would have any general use case beyond the "trading card" type of NFTs (expecting larger images to just be placed in How about: ?
|
Alright, I'll plan to merge this by tomorrow if there's nothing else we need to fix. Following this PR, I think we can cut v2.0.0 and commit to avoiding breaking changes for a while. |
No description provided.