Replies: 9 comments 23 replies
-
As discussed in the community dev call on the 21/09/2022 the desired features for an NFT schema should be:
If someone believes there are other desired features we should support please comment below. |
Beta Was this translation helpful? Give feedback.
-
So, I have a number of thoughts around NFTs, and while they might not be directly applicable to the protocol, the protocol should be designed in such a way that there is an obvious means of supporting these features within wallets and layers that the protocol would support. Supply and PrecisionIt's unclear if it should be assumed necessarily that NFTs will only be 1-of-1 NFTs, or, unique assets. For reference, see this chart: For collective assets, it would be nice to have a serializable field for each token, such as, a means to indicate its order, similar to @casey's Ordinals project. Sort of how vehicles or baseball cards have a factory serial number. In addition, although in some ways, precision is merely cosmetic, this is factored in upon token creation. For example, if I wanted fractional ownership of 1 special bitcoin, I would specify a supply of 1 and a precision of 8, so there could be 100M shares of this bitcoin. Internally, of course, this value would be normalized to an integer. ProvenanceProvenance, containing a list of previous owners, unless they wish to stay anoymous, prices of how many sats or tokens this was swapped for (if specified), and dates of sale. While some of this could be determined from state transitions contained within consignments, a convenience method for retrieving this data from the schema would be nice. Attachments / HashesAttachments could be embedded within the contract, though being able to provide a mime type would be preferable over magic number detection. Also, restricting the types of attachments might also be appropriate. These could be more for thumbnailing and previews within wallets. Hashes are more complex, since they also need a provider. A provider could be an identifier on a DHT which is quite ephemeral but more trustworthy, since only peers that have the content would respond to requests for the content hash. A provider could also be a set of "bootstrap peers" that is more durable and can be specified in a field in the asset manifest, but not necessarily reliable. ManifestPerhaps it's desirable to reduce the amount of metadata embedded within the contract to just a single hash. If only a single hash need be provided, ideally it should be a reference to a manifest file with a number of different fields that can be optionally retrieved by clients that support those fields and types. The alternative is to embed the manifest within the contract, to skip a lookup step. Ideally the fields in this manifest format are agreed upon in advance by stakeholders within a documented specification, and is also versioned to evolve over time, with the understanding that not all fields need to be parsed and handled by clients. ContentAsset content could be in a number of different mixed types, and could include images, video, audio, text, and files or code (in tar format), and any one of these could be associated with the other (such as cover art for a music album). Executable binary blobs are probably best avoided. The contexts in which this media would appear should also be specified, so as to provide icons, previews, or thumbnails. There could also be a quality field, for original, lossless, desktop, web, or mobile-optimized formats. Dimensions should also be associated with each of these, (width/height, length, depth). Finally, there should be an explicit mime type, and magic number detection should need to be relied upon. CarbonadoI'd like to raise attention to a flat file format I've devised for the purpose of persisting, replicating, and transmitting valuable data in a durable, encrypted, and reliable way. I call it Carbonado, and more on it can be found here: https://github.com/diba-io/carbonado One interesting feature is that it's encrypted by default, and one property of ecies encryption is that a public key can be used to encrypt a file, but a secret key is needed to decrypt it. This is the opposite behavior than libsodium cryptobox provides, but both are a form of authenticated encryption. The wallet providing keys for Carbonado files would have different derivation paths for:
All files have a Bao hash, and this is used to verify data integrity, in addition to verifying hash-stream replication proofs. The 32-byte Blake3/Bao hash also makes the file content-addressable, and is usually what the file name would contain, in addition to 10 bits for the number of bits needed to pad the file, a number between 0 and 1023, which corresponds to the Bao slice format. This is then removed by Zfec forward error correction. Updating of fieldsSimilar to Renumeration, a means of indicating to a client that there is new information via the use of a UTXO specified with a single use seal should also be possible for updating metadata fields for a particular asset. Whether this is for all fields or only specific ones should also be considered, since it'd be unfortunate if we intended manifest hash fields to be capable of being updated, but instead, a token issuer just dramatically increases supply to the point of inflating the token, unbeknownst to existing tokenholders. For precision this isn't so bad, since it's more like a "split", though this is confined only to decimal (factor of 10) splits. Dynamic NFTsFor dynamic NFTs, things like associating a "parent" NFT would be useful, in addition to a timelock, and maybe some AluVM code that could execute upon certain actions, times, or other intrinsic inputs. There could also be an option for the owner of the NFT to be able to update certain properties of it themselves using their own keys, in addition to the issuer having that capability. Anyway, those are all my thoughts regarding NFTs. |
Beta Was this translation helpful? Give feedback.
-
Currently in the RGB20 genesis schema we have the following fields:
To support all the NFT types listed by @cryptoquick probably the easiest way is to leave The Dynamic NFT features seem to me as adding a lot of complexity, so it would probably make sense to reserve it for a separate future schema. Looking forward for your thoughts on this. |
Beta Was this translation helpful? Give feedback.
-
For reference, this is the RGB21 draft that @dr-orlovsky wrote few years ago. Looks like it already has most of the features we are looking for. We should probably just reintroduce |
Beta Was this translation helpful? Give feedback.
-
I think a helpful reference for what metadata should be included within the RGB21 metadata could be the OpenGraph spec for social previews: The one thing I would change over the opengraph spec is to avoid URLs and instead use hashes or provide the actual content itself. Also, I don't think Ticker is a good field for an NFT, maybe it should be "Identifier". Name should be fine though. I'm not sure if Renomination is applicable, but it might be nice to have a owned_rights field that can be used to update the metadata. An optional UTXO could be made and spent with an anchor to a new set of metadata. Maybe we could use strict encoding for this more rich "extended metadata" (perhaps It should be developed with wallet compatibility, future extensibility, and finally, with the consideration that web URLs and centralized locators of that nature shouldn't be included or relied upon. Ideally, either the content is included, or a hash is provided, along with a list of bootstrap peers to look that hash up, and a protocol defined in which to do so. |
Beta Was this translation helpful? Give feedback.
-
We created a draft of the RGB21 repo, in particular the schema has the following fields:
Please provide your feedback for fields that we could add, remove or change. |
Beta Was this translation helpful? Give feedback.
-
@dr-orlovsky can you add your comments here on what you would like to change in the proposed RGB21 schema? |
Beta Was this translation helpful? Give feedback.
-
Due to evidence that the previously proposed schema does not meet everyone's expectations (e.g. @dr-orlovsky expressed the need to not allow fungible collectibles and to have the engraving feature implemented in a more strict way), we renamed the schema as RGB121, so that we can avoid collisions and confusion with a future RGB21 schema which will provide the requested features. |
Beta Was this translation helpful? Give feedback.
-
I did a RGB21 interface proposal which covers "unique", "collective", "fractional" and "fungible" types of collectible items: #137 BTW the main difference between "fungible" collectible and fungible financial asset is the fact that fungible collectible tracks its identity, so proper name would be "collective with fractional ownership". |
Beta Was this translation helpful? Give feedback.
-
The goal of this discussion is to define the list of steps that need to be taken in order to complete the support for NFTs and help coordinate their development.
Initial support for NFTs should already be there. There's a summary discussion which points to LNPBP 0021. The discusson on data containers also seems relevant.
With version 0.8 of the components being released in the latest months and to kick off the effort to complete NTF support in RGB, what are the steps that remain to be done as of September 2022?
Beta Was this translation helpful? Give feedback.
All reactions