Skip to content
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

CIP-0048? | NFT metadata references and payloads #249

Closed
wants to merge 37 commits into from

Conversation

Jack-0
Copy link
Contributor

@Jack-0 Jack-0 commented Apr 21, 2022

Introduces methods to store and reference 721 metadata. For details and questions please contact me here or on the Cardano Forums


see rendered Markdown

@Jack-0
Copy link
Contributor Author

Jack-0 commented Apr 23, 2022

Discussion and example use cases can be found on the Cardano forum.
https://forum.cardano.org/t/cip-extended-721

@KtorZ KtorZ changed the title CIP 48? Extended 721 metadata CIP-0048? | Extended 721 metadata May 11, 2022
@Jack-0
Copy link
Contributor Author

Jack-0 commented Jun 9, 2022

I would mark this as an informational CIP as it recommends a practice within the current 721 metadata which users are free to ignore or implement as willing.

@rphair
Copy link
Collaborator

rphair commented Jun 9, 2022

@Jack-0 not to worry: the term Process doesn't imply a universal process, but some process. Informational CIP's don't "propose a new feature" but that is exactly what this CIP is proposing. So I believe the classification is correct.

I followed the Cardano Forum thread about this but didn't take any sides. For other editors: the URI link for this proposal (also in comment above) probably at this time has a complete discussion of all arguments for & against adoption. Most of the reactions are that "it's not necessary" somehow but that seems to be refuted by a statements like "It's my Tx data and I'm paying for it, so I can do what I want with it."

I would just like the major points in this thread to also be here in this Github discussion so they can be easily referenced at the CIP meetings, to make sure this PR doesn't remain stalled. So @Jack-0 could you please digest those points here along with whatever rebuttals you have (maybe also include each of these in the CIP draft itself if not already)?

A good way to progress this would be to attend the CIP meeting on Discord in which CIP advocates & authors can get the mic, time permitting, and always comment in the text stream... a better platform than Crowdcast which we had at the time you submitted this PR 🤓 https://discord.gg/GhfMM9bf

@Jack-0
Copy link
Contributor Author

Jack-0 commented Jun 15, 2022

Yes I would be happy to. I'll include key points here asap.

@Jack-0
Copy link
Contributor Author

Jack-0 commented Jun 15, 2022

Major points mentioned on the forum post:

A blockchain like Cardano is not for storing jpegs or to archive data files:
This is an opinion. I agree congesting the chain is a bad idea. However, the intention is not for jpegs. Most ‘sane’ developers will understand IPFS or similar decentralized filestores are better in most scenarios.

How do you distinguish between two or more very similar 721s metadata:
Last payload minted is treated as the most relevant. (You can query txhash data for slot etc)

Is it more flexible or more generic than existing standards for NFT meta data:
Yes. Because we give the user multiple ways to reference other transactions or onchain data (it doesn’t have to be in the same policy either).

Could type be implicitly inferred from value:
Yes it could, but I think using the shorthand ‘p’:<policy_id> is cleaner and is a mere 4-5 bytes extra (‘p’:,). As for mime type such as test/plain that could be done by the client but providing a standard helps avoid confusion.

Is it backwards compatible:
Backwards compatibility due to the version 2.0 tag this just expands upon EIP721 (which is explain in cip25)

More compact than CBOR:
This could be argued. The choice to use json is as such because it’s popular for web dev and extend the current 721 standard. Using some other format could save a few bytes but at the cost of usability (json parsing is easy and commonplace on the web).

Future compatibility:
The standard could also easily be updated in the future by simply altering the version tag.

Personal note:
Lot of the criticism seems to be narrow. I believe most people see the word NFT and assume this is meant for profile picture type NFT’s. Although this can create some interesting use cases for those projects most will stick to using 721 (version 1) with IPFS. The intended use is for innovative ideas for nfts (mentioned in forum post). I believe references in combination with IPFS could create some powerful tooling for developers.

How this CIP can also be used to reduce chain data:
https://forum.cardano.org/t/cip-extended-721/99646/10?u=jack7e

Opensource query example
https://github.com/pixel-pool/extended721

@Jack-0
Copy link
Contributor Author

Jack-0 commented Jun 15, 2022

I also was just glancing over the 'Smart NFTs' proposal #263.
I believe this new Extended metadata CIP solves the issues raised here without coupling itself to a specific language like JS.

Copy link
Member

@KtorZ KtorZ left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this CIP currently meets the required quality we would demand of a CIP, and I would strongly suggest to spend more time polishing it on various aspects:

  • I found quite many typos or confusing sentences; I fixed a few but there are more left.
  • There are many "holes" in the specification at the moment which would lead to potentially many different incompatible implementations. Such a standard should be very precise on how the data is specified and interpreted. Few recommendations:
    • Avoid double-notations (e.g. references or r; chose one);
    • Avoid references to other similar systems in the specification itself (e.g. mention of ext2) unless you clearly point to another specification from which you re-use pieces. It's fine to mention as part of the rationale or abstract, but in the specification it can be quite confusing especially if the other system is only vaguely referred to.
    • Define terms and operations that are ambiguous (e.g. 'concatenate')
    • Be consistent in the wording being used, don't use two different words to refer to the same concept (e.g. pointers vs links).
    • Avoid doubts / open-questions (e.g. "not sure if..."), or clearly mark them as "TODO" to make them points to address.

* Provide a mechanism to reference on chain data stored in a different policy

# Specification
Please note I offer optional single char names to allow futher reduction in metadata size if desired
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Avoid first-person voice in CIPs.

Suggested change
Please note I offer optional single char names to allow futher reduction in metadata size if desired
Please note that some tags can be specified as single char names to allow further reduction in metadata size if desired.

|---|---| --- |
|references, refs, r | contains data tag and src tag | ```'r':{ "data:"text/plain","src":[0,1] }```|
|payload, p | contains raw data | ```'p':{ "0":["h","e","l","l","o"], "1":"world" }``` |
|version| this is described in 721 | not sure if it should be version 1.1? instead of 2|
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since this is an optional extension of the standard, it wouldn't make sense to use the same versioning scheme as CIP-0025 because there might be other proposed extensions which either conflict or are simply used in total separation from this one. Say we have two mutually exclusive extensions for CIP-0025 with versions 2.1 and 2.2. Now, shouldn't 2.2 implies that 2.1 is also used? What if, no, people just want to use 2.1?

I think CIP-0025 lacks extensibility mechanisms; something that can let new extensions be specified in an additive manner (e.g. an extra field extensions: ['CIP-0048']).

|version| this is described in 721 | not sure if it should be version 1.1? instead of 2|

*inside the refences tag*
|tags that are reseved inside references |description | example
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
|tags that are reseved inside references |description | example
|tags that are reserved inside references |description | example

|tags that are reseved inside references |description | example
|---|---| --- |
|data| contains the data type MIME | for example if base 64, data:"text/plain;base64"|
|src|contains a list of poitners to payloads | ```"src":[0,1]``` or ``` "src":["payload0","payload1"]```|
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
|src|contains a list of poitners to payloads | ```"src":[0,1]``` or ``` "src":["payload0","payload1"]```|
|src|contains a list of pointers to payloads | ```"src":[0,1]``` or ``` "src":["payload0","payload1"]```|

|policy, p | references another policy. If none, assume current policy | ```'r':{"data:"text/plain","src":{[0,1]},"p":"<POLICY_ID>}"```|
|txhash, tx | references a specific tx hash (optional) | ```'r':{"data:"text/plain","src":{[0,1]},"tx":"<TX_HASH>}"```|
|type | the format/type of the data inside the payload |```'r':{"data:"image/jpeg","src":{[0,1]},"type":"ipfs"```|
|b, back, backup | fallback, if a link to the data is used in the 'src' tag and is broken revert to a fallback link. | ```'r':{"src":{[0,1]},"b":{[2,3]}} ``` or for multiple fallbacks use ```'r':{"src":{[0,1]},"b":"{'0':{[2,3]}, '1'{[4,5]} }"``` |
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How is a "broken" data defined?

|src|contains a list of poitners to payloads | ```"src":[0,1]``` or ``` "src":["payload0","payload1"]```|
|policy, p | references another policy. If none, assume current policy | ```'r':{"data:"text/plain","src":{[0,1]},"p":"<POLICY_ID>}"```|
|txhash, tx | references a specific tx hash (optional) | ```'r':{"data:"text/plain","src":{[0,1]},"tx":"<TX_HASH>}"```|
|type | the format/type of the data inside the payload |```'r':{"data:"image/jpeg","src":{[0,1]},"type":"ipfs"```|
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What difference is made between data and type?

|utf-8| data is directly in payload as utf-8 |
|b64 | data is in base 64 encoded in payload |
|reference? | advance feature, points to a reference |
|none| assume data is raw and using the defined media type |
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems like each of those types has a precise semantic, what is it?

2. Check the version tag
3. If a payload is found append that to an map or some data structure
4. Given a nft find there references
5. Concatenate the data for all given references
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How is "concatenate" defined here? What if the data isn't text or bytes?

```
# Retrieve payload information using references
1. Find all transactions with the 721 label
2. Check the version tag
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What should the version tag be?

}
```
# Retrieve payload information using references
1. Find all transactions with the 721 label
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the scope of research here? A block? The whole chain? Should only payload under the same policy be considered?

@rphair rphair added the State: Waiting for Author Proposal showing lack of documented progress by authors. label Aug 16, 2022
@rphair
Copy link
Collaborator

rphair commented Aug 16, 2022

@Jack-0 marking "Waiting for Author" since editor consensus at CIP meeting # 51 today was that this proposal is technically sound but that the presentation & explanation needs to be cleaned up according to @KtorZ's recent review. 🙏

@Jack-0
Copy link
Contributor Author

Jack-0 commented Aug 27, 2022

I'm going to review this again. It's been a couple months since I wrote this and I can see some ways to improve this whilst also simplifying the specification. Thanks for the feedback I'll be incorporating it, I really like the extensions tag suggestion. @rphair @KtorZ

@rphair rphair removed the State: Waiting for Author Proposal showing lack of documented progress by authors. label Oct 2, 2022
@rphair
Copy link
Collaborator

rphair commented Oct 13, 2022

@Jack-0 a naming collision for CIP-0049 with #250 came up at this week's CIP meeting so we've removed the pending CIP number from #343. Consequently in your last comment, so it provides a proper index for readers without confusing that reference, can you please also remove CIP-0049 from the heading? (e.g. simply "NFT metadata extension tag")

@Jack-0
Copy link
Contributor Author

Jack-0 commented Oct 13, 2022

I have done that, assuming nothing needs changing with this CIP.

If for some reason we decide that #343 is not appropriate then this CIP would not use such a feature and it would just be yet another CIP that defines optional properties. I was hoping 343 would bring some clarity to NFT optional metadata properties.

@rphair
Copy link
Collaborator

rphair commented Oct 13, 2022

that's all fine... I was just asking (to avoid confusion in the repository) if you would please remove the terms CIP-0049 from this comment, where it currently says:

For reviewers:

...

CIP-0049 NFT extension tag

and

PR CIP-49

@Jack-0
Copy link
Contributor Author

Jack-0 commented Oct 23, 2022

Would also like to mention CIP 68 as it would be worth considering Reference and Payload usage in the Datum metadata standard

@rphair
Copy link
Collaborator

rphair commented Dec 6, 2022

@Jack-0 in the last hour's CIP meeting we discussed (mainly with @KtorZ) how we might finally get this one out of the queue. Though it would otherwise be in a state where it could be merged as a document for NFT developers to "take it or leave it" (since there is no documented support from existing projects or NFT marketplaces), it seems this is dependent on #343 which in turn requires modifications to CIP-0025.

So for now we can only proceed once @alessandrokonrad @SmaugPool can comment here and/or in #343 about how they feel about adding support for the NFT metadata extension tag.

And @Jack-0 I think I've asked this question before (when you were separating this PR from #343) but still don't know if it's possible that this mechanism could work without that extension tag.... if so please indicate that clearly here & we then might be free to go ahead and finally merge this.

Copy link
Collaborator

@rphair rphair left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Jack-0 likewise with #343 (review) I'm marking this Waiting for Author with the intent to close as superseded by the pending CIP-0088 (also inviting that author to contribute to the discussion here).

We can keep this alive if someone can point out there is any feature provided, or use case handled, which is not addressed in CIP-0088. Otherwise with no other supportive action taken we will probably close this soon.

@rphair rphair added the State: Waiting for Author Proposal showing lack of documented progress by authors. label Mar 16, 2023
@KtorZ KtorZ added Category: Tokens Proposals belonging to the 'Tokens' category. and removed Candidate CIP labels Mar 18, 2023
@rphair rphair added the State: Likely Deprecated Close if confirmed deprecated (or long waiting). label Mar 25, 2023
@Jack-0
Copy link
Contributor Author

Jack-0 commented Mar 25, 2023

In reply to #249 (comment)

This proposal that adds support for linking multiple nfts via references and payloads will work without the ext property, and this can be omitted from the standard it was simply introduced to help the 'developer' make sense of the meta before attempting to parse (providing a meta meta property in essence) but cip-88? might also be on that now. Which would deprecate my proposal for meta data extension tags

Copy link
Collaborator

@Crypto2099 Crypto2099 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just some thoughts about how the specification of CIP-0048 could be amended to work well with the proposed CIP-0088. Happy to discuss, review, and iterate.

Comment on lines +11 to +13
## Important note

This CIP mentions the `ext` json key defined by [CIP49](https://github.com/cardano-foundation/CIPs/pull/343/files) which is an outcome of work on CIP48.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This section may be unnecessary if we transition to CIP-88 to support a "signal" that these references are in use.

Comment on lines +28 to +35
# Specification

### **Inside the 721 metadata JSON**

| reserved | description | scope |
| -------- | ------------------------------------------------------ | ------------------------- |
| refs | references tag, defines where to find the onchain data | Inside `<asset_name>` tag |
| p | contains raw data (on chain data). | Inside `<policy_id>` tag |
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe that we can eliminate both the refs and p definitions within individual token metadata here if we switch to a URI-schema to signal support by way of CIP-88. More details to be shown below.

Comment on lines +98 to +126
## General structure

```json
{
"721": {
"ext": ["cip48"], // tells 'user' cip48 is in use within the metadata
"<policy_id>": {
"<asset_name>": {
"project": "<string>",
"name": "<string>",
"image": "<ref_name | uri | array>" // image is defined by refs or a uri
// references
"refs": [
{
"name": "<ref_name>",
"mediaType": "text/plain",
"src": ["<payload_id>", "<payload_id>"] // array of required payload ids (ordered)
}
]
},
// payload
"p": {
"<payload_id>": ["<data>", "<data>"], // payload0
"<payload_id>": ["<data>"] // payload1
}
}
}
}
```
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the best way to embed references in existing metadata structures would be via a structured URI format as defined in the spec. Rather than just using a name and forcing all parsers to scan for references a defined URI schema would make it easier to detect.

URI Format

uriSchema = {
  scheme : string .size (4..64) ; Examples: ar://, ipfs://, etc
  path * : string .size (1..64) ; Examples: [ar/ipfs hash]
}

Hypothetical CIP-48 URI format:

uriSchema = ["cip48://","referenceA"]

In this way a downstream parser may quickly and easily identify a CIP-48-specific reference only on fields that match the format.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Crypto2099 do I understand correctly, with this new approach, that there would be no need for the corresponding proposal that has long accompanied this one (which details the external metadata references)?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I believe the OP and myself agree that the ext flag would be made redundant if CIP-88 were implemented as both have the same function of signaling intent to support a further extension to CIP-25.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

great then, I'll remove the Likely Deprecated tag from this CIP and leave it on #343.

Comment on lines +47 to +82
### **Optional `type` tag for `refs`**

The default CIP-48 behavior is to assume the assets parent `<policy_id>` contains all the payloads.

Optionally we define `type` and two options `policy` and `txhash`. To allow for non-default behavior

- `policy`
- Defines an external policy (instead of the default behavior of using the parent policy)
- example
```json
"refs": [
{
"name": "...",
"mediaType": "...",
"type": {
"policy": "<some_external_policy>"
}
}
]
```
- `txhash`
- Defines an array of transaction hashes (instead of the default behavior of using the parent policy)
- example
```json
"refs": [
{
"name": "...",
"mediaType": "...",
"type": {
"txhash": ["<mint_txhash>", "<mint_txhash>"]
}
}
]
```
- `txhash` is faster than parsing all transactions in a given policy.
- `txhash` can dramatically reduce onchain data usage if duplicated data is referenced here _(however, the bytes required to define the reference would have to be less than the reference data itself)_
Copy link
Collaborator

@Crypto2099 Crypto2099 Mar 27, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we presume that the majority of references could be declared at a top-level utilizing CIP-88, this is just some rough thoughts but perhaps we could expand the references "type" to optionally point to another on-chain pointer or to a direct payload.

{
  48: {
    0: '1.0.0', ; Version?
    1: [ ; Array of references
      {
        "name": "referenceA", ; Name of the reference
        "type": "pointer | payload", ; Maybe an enum of accepted options?
        "payload": { ; Example of a direct payload reference
          "mediaType": "text/plain",
          "content": "My Cool NFT Project"
        },
        "payload": { ; Example of a tx pointer reference?
          "type": "tx",
          "content": "[txhash]",
          "context": "metadata" | "datum"
        },
        "payload": { ; Example of a token point reference?
          "type": "token",
          "content": [(policy_id),(asset_id)],
          "context": "metadata" | "datum"
        }
      }
    ]
  }
}

@rphair rphair removed the State: Likely Deprecated Close if confirmed deprecated (or long waiting). label Mar 28, 2023
Copy link
Collaborator

@rphair rphair left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Jack-0 we talked about moving this forward at the CIP meeting today and I summarised that you & @Crypto2099 as of 3 weeks ago were working on making this compatible with CIP-88 / #467.

This review is to clean up the formatting as per CIP-0001 which was updated since last year, so we can merge it once you & @Crypto2099 can confirm here the two CIPs are compatible... so we also need you to address his #249 (review). (cc @KtorZ)

@@ -0,0 +1,249 @@
---
CIP: 48?
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
CIP: 48?
CIP: 48

@@ -0,0 +1,249 @@
---
CIP: 48?
Title: 721 References and Payloads
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Title: 721 References and Payloads
Title: NFT metadata references and payloads

For consistency with PR title.

---
CIP: 48?
Title: 721 References and Payloads
Authors: Jack (ada9000, https://forum.cardano.org/u/jack7e/, @ada9000_ twitter)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Authors: Jack (ada9000, https://forum.cardano.org/u/jack7e/, @ada9000_ twitter)
Authors:
- Jack <some@real.email.example.org>

There's no means to embed URLs in header text, which makes social links impossible. Even if getting an anonymous email to use here, we need something that looks like an email address if only so our web site builders work properly. This is always a list even if having only one member.

CIP: 48?
Title: 721 References and Payloads
Authors: Jack (ada9000, https://forum.cardano.org/u/jack7e/, @ada9000_ twitter)
Comments-URI: https://forum.cardano.org/t/cip-extended-721/
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Comments-URI: https://forum.cardano.org/t/cip-extended-721/
Discussions:
- https://forum.cardano.org/t/cip-extended-721
- https://github.com/cardano-foundation/CIPs/pull/249

Title: 721 References and Payloads
Authors: Jack (ada9000, https://forum.cardano.org/u/jack7e/, @ada9000_ twitter)
Comments-URI: https://forum.cardano.org/t/cip-extended-721/
Status: Draft
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Status: Draft
Status: Proposed

}
```

## Notes
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
## Notes
### Notes

- The `image` tag can still be used as a thumbnail if required.
- If there are multiple `refs` defined the references that are _NOT_ defined in the `image` tag have the same behavior as the `files` tag currently defined in CIP25

# Example
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Example
### Example

Comment on lines +237 to +240
# Backwards compatibility

Handled via the use of the `"ext"` tag defined in CIP-48.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Backwards compatibility
Handled via the use of the `"ext"` tag defined in CIP-48.

I think we've established that the tag will not be used, right? However compatibility would be handled is a good item to included in the Rationale section which still needs to be defined below.

Comment on lines +241 to +249
# Further considerations

- Later we may want to use different reference types, maybe even plutus contract references. Due to this I have defined the `type` tag inside the `refs` (references) tag.
- `p` is used instead of **payload** to reduce bytes. Specifically `p` is not used within the `<asset_name>` tag therefore readability is less of a priority than data size. Unlike `refs` which is defined in the `<asset_name>` tag
- JSON is kept over CBOR or alternatives as this CIP is encapsulated in the 721 metadatum tag and JSON is easier for developers to adopt

### Duplicate data

There could be issues with duplicate payloads. To solve the payload defined in the most recently minted tx takes priority.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Further considerations
- Later we may want to use different reference types, maybe even plutus contract references. Due to this I have defined the `type` tag inside the `refs` (references) tag.
- `p` is used instead of **payload** to reduce bytes. Specifically `p` is not used within the `<asset_name>` tag therefore readability is less of a priority than data size. Unlike `refs` which is defined in the `<asset_name>` tag
- JSON is kept over CBOR or alternatives as this CIP is encapsulated in the 721 metadatum tag and JSON is easier for developers to adopt
### Duplicate data
There could be issues with duplicate payloads. To solve the payload defined in the most recently minted tx takes priority.
## Rationale: how does this CIP achieve its goals?
### Further considerations
- Later we may want to use different reference types, maybe even plutus contract references. Due to this I have defined the `type` tag inside the `refs` (references) tag.
- `p` is used instead of **payload** to reduce bytes. Specifically `p` is not used within the `<asset_name>` tag therefore readability is less of a priority than data size. Unlike `refs` which is defined in the `<asset_name>` tag
- JSON is kept over CBOR or alternatives as this CIP is encapsulated in the 721 metadatum tag and JSON is easier for developers to adopt
### Duplicate data
There could be issues with duplicate payloads. To solve the payload defined in the most recently minted tx takes priority.

Just sketching out a Rationale from the points already included here... maybe also some of what you already wrote above regarding your design decisions.

Especially I think in the Rationale section you should include:

  • why you originally solved this problem with the extra tag, and
  • why you abandoned that idea when CIP88 came along.

Comment on lines +241 to +249
# Further considerations

- Later we may want to use different reference types, maybe even plutus contract references. Due to this I have defined the `type` tag inside the `refs` (references) tag.
- `p` is used instead of **payload** to reduce bytes. Specifically `p` is not used within the `<asset_name>` tag therefore readability is less of a priority than data size. Unlike `refs` which is defined in the `<asset_name>` tag
- JSON is kept over CBOR or alternatives as this CIP is encapsulated in the 721 metadatum tag and JSON is easier for developers to adopt

### Duplicate data

There could be issues with duplicate payloads. To solve the payload defined in the most recently minted tx takes priority.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Finally (last section) include a copyright notice of your choice as defined here: https://github.com/cardano-foundation/CIPs/blob/master/CIP-0001/README.md#licensing

Copy link
Collaborator

@rphair rphair left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(missed a section in above review: something we check for sooner in the submission process these days)


### Duplicate data

There could be issues with duplicate payloads. To solve the payload defined in the most recently minted tx takes priority.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
There could be issues with duplicate payloads. To solve the payload defined in the most recently minted tx takes priority.
There could be issues with duplicate payloads. To solve the payload defined in the most recently minted tx takes priority.
## Path to Active

As per https://github.com/cardano-foundation/CIPs/blob/master/CIP-0001/README.md#path-to-active. I don't understand the industry well enough to advise on this, but if @Jack-0 you're not sure of acceptance or commercial implementation targets then maybe @Crypto2099 could suggest some.

@rphair
Copy link
Collaborator

rphair commented May 2, 2023

@Jack-0 after review at the CIP meeting today, following last month of inactivity with no response to last review trying to get the document itself in line with existing CIP standards, and without @Crypto2099 providing a bridge to CIP88 which is itself moving forward, this is again marked for deprecation and we intend to close it soon.

@rphair rphair added the State: Likely Deprecated Close if confirmed deprecated (or long waiting). label May 2, 2023
@rphair
Copy link
Collaborator

rphair commented May 16, 2023

Final call for any reservations at CIP meeting today regarding deprecating this & the related PR (#343 (comment)). @Jack-0 please address the last review if you decide to pursue this further.

@rphair rphair closed this May 16, 2023
@rphair
Copy link
Collaborator

rphair commented Jul 10, 2023

For anyone following up, some current progress in token indirection (to store greater amounts of on-chain data and consolidate common elements such as rendering and software) being considered here: #530

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Category: Tokens Proposals belonging to the 'Tokens' category. State: Likely Deprecated Close if confirmed deprecated (or long waiting). State: Waiting for Author Proposal showing lack of documented progress by authors.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants