-
Notifications
You must be signed in to change notification settings - Fork 25
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
Non-Fungible Token standard #141
Comments
Can you update the specification doc to also have a full interface code block for easier readability? |
thanks for your proposal, @arjanvaneersel! I agree with @mradkov it's currently a bit hard to read. suggestions / thoughts from my side for the moment:
I think it makes sense to be compliant to ERC-721 for the most common and basic functions. if some things don't make sense we could drop them or if we have other ideas we could add them. opinions about that? |
@mradkov @marc0olo Included a full code block of the interfaces in the doc, as well as in this issue. Thanks for the suggestions. @marc0olo The idea of MetaInfo is to be similar to the Fungible Token. TokenData is typically for the NFT standard. For that reason I didn't combine them. Also TokenData is an option, not every NFT implementation might need it. Therefore I'm also having some doubts whether it really belongs in MetaInfo if MetaInfo is to be considered a standard by itself and to be similar to the FT. @mradkov, What is your opinion? I implemented an FT compatible MetaInfo based on your suggestion. I agree with all other suggestions of @marc0olo. I will meanwhile dive into AEX-9 to see how things were done there. |
personally I am not sure if a NFT (contract/collection) needs a symbol. IMO a name of the collection is sufficient. also saw some discussions about that for ERC-721 back then. I think it's way more important to think about how we want to deal with the "real" metainfo (properties of the specific NFT ID) |
we should keep the discussion alive here. will hopefully find some time again to have a deeper look. @arjanvaneersel are you planning to provide an update or are you waiting for further responses? @thepiwo maybe you can also share some thoughts here? would appreciate it :) |
@arjanvaneersel btw I wouldn't recommend to duplicate the proposed interface on various places (issue description, separate file, ...) we should discuss a proposal which is written in one specific place IMO. the request of @mradkov, when I understood correctly, was about improving the readability of https://github.com/appinesshq/ae-nft/blob/main/AEX-xx.md (@mradkov correct me if I am wrong 😅 ) |
My planning was to start implementing the first batch of ideas from next
week. Think everybody then had a reasonable amount of time to share ideas.
…On Thu, Sep 23, 2021, 16:26 Marco Walz ***@***.***> wrote:
we should keep the discussion alive here. will hopefully find some time
again to have a deeper look.
@arjanvaneersel <https://github.com/arjanvaneersel> are you planning to
provide an update or are you waiting for further responses?
@thepiwo <https://github.com/thepiwo> maybe you can also share some
thoughts here? would appreciate it :)
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#141 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/ABKAWCZLKCWA5FDIRSQAERDUDMTJPANCNFSM5D2RT6XQ>
.
|
I'd say to make the code and readme style more inline with other ae contracts and AEXs:
Whats the reason to have the Thats the things I found for now, haven't checked all function calls and checks in detail. |
thanks @thepiwo! currently you shouldn't care about the actual implementation. we should agree upon the interface before digging deep into the implementation details. but anyway there are interesting questions. what's your opinion about having mintable as extension? IMO it shouldn't be part of the default standard |
@arjanvaneersel any update here from your side? we decided in our workshop that @thepiwo and I want to actively support you here and get this standard and the implementation ready to be reviewed and tested as soon as possible. do you have some time next week to have a call to discuss this? we can do that on discord ;-) |
Summary (Call between @marc0olo and @thepiwo)
MetadataWe definitely need to discuss how to deal with metadata on item level:
Maybe use an algebraic data type (ADT) for metadata?
|
just had some discussion with @omar-saadoun about that. the metadata topic is really interesting. in the end we both came to the conclusion that it's definitely desired to have following possibilities:
the question is how to ideally reflect this in the contract. maybe we even want to have the possibility to add metadata "internal" in the contract (e.g. stored in a map) like mentioned above. @thepiwo any suggestions here? especially as we want to avoid having a custom URL for each NFT. it totally makes sense for the URI to introduce a baseUrl instead of having a unique URL for each NFT. @omar-saadoun please edit / comment with additional feedback |
@marc0olo I agree, using |
yeah. but when assuming we use a should we use |
Summary Call between @arjanvaneersel and @marc0olo
How to deal with metadata
Init function (deployment)
Mint function
Get metadata
|
Could you elaborate more about |
Kind of like it's defined in the AEX-9 fungible token standard already, see https://github.com/aeternity/AEXs/blob/master/AEXS/aex-9.md#extension-swappable-swappable. We could maybe also define different swap target chains and respective contract addresses like e.g. It's basically an extension that could be used if the developers want to consider a migration to a new chain and/or contract. At least from my understanding. Maybe @thepiwo and @mradkov can elaborate a bit more on the thoughts about this for AEX-9 back then. But we haven't put much thoughts into this right now. Not sure if it's that important. But definitely an interesting topic that might be useful for some people. |
the goal of swappable is to provide a mechanism to swap AEX-9 to a different token standard in the future |
Proposal is updated. Please share your thoughts. |
Hi @arjanvaneersel, thanks for the update! I just had a very quick look and will dig in deeper during the day. Following comments right now:
|
@marc0olo It's not a map with token holders, but a map with token data in |
ahh okay, got it. I remember I would propose to change the naming here then as follows and I still think the Currently
Proposal
Note:
|
@marc0olo I agree with you and what you describe is how I implemented it initially. Amended the proposal and removed token from meta_info. I don't know why I called |
one thing more I just observed when having a quick loog again. I think we currently miss the
|
@marc0olo can you elaborate why a |
@arjanvaneersel thanks for your work, I think the overall proposal looks good now. If we all agree that the current state of the proposal (excl. implementation) is good now I would like to make an in-depth review where I again check every type, throw and so on. |
@thepiwo The idea of metadata_type is that the type is determined at contract level instead of having different tokens with different metadata. The ADT on metadata level is mostly there due to the different kind of types that the metadata types require. Perhaps it's better to abstract metadata down to simply string or map, because I can imagine that how it's formulated now might be confusing. Any thoughts? |
@marc0olo I agree, let's not make batch transfers a part of the standard, but give some examples how one can do it in 3rd party contracts. I already incorporated your earlier suggestion. So I'll update the proposal by removing the batch actions and then @thepiwo should be good to go with his final review. |
@arjanvaneersel also consider this comment please: #141 (comment) what's your take on the restriction discussion with defining the metadata type on contract level? do you see any usecase that requires not restricting it? currently I personally am pro restriction, still |
@marc0olo I tend to say that developers should be free to decide implementations. It's their responsibility to communicate that with users. However, since not of us can come up with a use case where a contract would serve different types of tokens, I think that it's cleaner to define this in the standard. From that perspective it might make sense to reconsider how the metadata ADT is structured and limit it to a string or map type instead of having the different options. I believe that this will lead to cleaner and less ambiguous contracts, thus avoid confusion about where things should be. |
mhh, I personally still think this is a quite elegant and flexible solution that might be useful for many projects. we need to decide how to proceed with his. otherwise we are blocked. @omar-saadoun can you share your opinion about this again? maybe find other NFT experienced people to comment? |
to make my standpoint about metadata clear again. my proposal is:
note
|
I think we can offer this elegance through ADT and we will keep the implementation with a reasonable amount of freedom for developers as they can still decide on map structure or JSON if they opt for URL. We want to offer good options but also keep marketplace's development as simple and anticipatable as possible in this matters. I think the best way to understand why this is option can be better is ObjectId option for real world things. I would definitely want to see that number/serial/id on contract. So, bottom line:
|
@arjanvaneersel when can we expect the final update so that @thepiwo can proceed with the final review? =) |
@marc0olo Updated the proposal. I still have one thing on my mind. I really dislike this:
I dislike it, because someone could select URL on the contract level and then IPFS on the token level or even worse: Internal. But I also wonder: Do we really need the difference between URL and IPFS? IPFS also generates a URL. URL expects So I would suggest to remove IPFS and have only a URL. The schema of the URL will show whether this is an ipfs, http or even different URL. We can't know what the future will bring. Maybe one day there will be a better alternative for IPFS, should we really update this standard every time when a new technology comes out? I think that's not a good practice. So what I would suggest to solve both issues is:
Of course someone can still select a wrong type, but at least it's clear what the intention is, because only on contract level is clear what the metadata is supposed to be. In the current proposal it could be a wrongly selected type at contract level, as well as on token level, so the intention of the developer never gets clear. So in my opinion storing the type on contract level and only value on token level is much more cleaner than what we had before, because it takes a potential ambiguity away. |
The goal of the suggestion was to give a hint to a frontend or consumer of that information whats inside. Matching type and data can be verified by the contract (and defined as MUST in the standard). From not thinking about the endpoint consumer side I am also fine with just using |
thanks @arjanvaneersel! the problem with this discussion is that I don't think we get many opinions about that from the community and have to take assumptions. if you ask me personally I really like what we have. by doing it the way we originally planned every consumer (marketplace or other app) would be able to render the content by knowing what the metadata type stands for (which should also still be possible with your new proposal). I would absolutely distinguish between IPFS and URL for the metadata type. that's just completely different in terms of interpreting it from my view. @thepiwo can you maybe recall why I think every consumer could also interprete this correctly if we define it like Arjan proposed:
as consumer I would check the metadata type on contract level and then interprete like this (should be defined in the standard of course):
is this your point @arjanvaneersel ? I don't see a problem with changing that but need to have confirmed by @thepiwo. but I would favor to keep IPFS as type if possible. for me this makes absolutely sense as explained above |
@marc0olo I think your ideation was to force the consistent same metadata across the contract. |
ok this seems historical to me as we first started without having a concrete @arjanvaneersel I am fine with changing it to:
|
seems like we are close to getting the "final" proposal state reviewed 😎 thanks to everybody involved! |
thanks for updating the proposal @arjanvaneersel ! - I think we are ready to review now 😎 @arjanvaneersel please fork the AEX repository and provide a pull request according to the defined process ;-) ... the AEX number will be define during the review :-) |
@omar-saadoun @arjanvaneersel @thepiwo we should think about an additional extension for royalties IMO. not sure why we haven't discussed so far. for sure it would just be an indicator and we couldn't and shouldn't enforce it. but potential marketplaces could read from royalties extension entrypoint and embrace it accordingly. what do you think? |
I just consulted with @jyeshe regarding metadata and I think we need to update the proposal and use opinions? @arjanvaneersel @thepiwo @omar-saadoun |
Sorry, revisiting the standard it might be not necessary as the mapping to the token_id (int) would be made on the state and the |
yeah the question was rushed. actually we already have what we want I think |
we had to fix the definition of see #146 I will shortly adapt the examples but I think I already identified a problem with SDK / calldata-lib in that regards 😒 - need to double-check here the updated PR and indeed there is a bug we identified. we aim to resolve the problem as soon as possible: |
we recently published the first NFT collection example here: we will shortly come up with a proposal for a new extension called am example of this is deployed on testnet: |
just had a discussion with @thepiwo and I think we should clarify as soon as possible how we wanna deal with events when it comes to minting:
unfortunately we didn't consider this in AEX-141 (yet) and currently have the problem that we defined and use should we change the standard and go the same route as AEX-9 by introducing a special any opinions on that? @arjanvaneersel @thepiwo @omar-saadoun @jyeshe @mradkov @ghallak @radrow background:
|
Since minting is clearly a different type of action than transferring, I would make it a different type of event. |
I guess @thepiwo is happy to hear that. rumors say he'd boykott AEX-141 if we go the zero-address route 😱 |
When the indexing service has a single websocket subscription it is easier to track the status of an NFT. With multiple subscriptions it shall sort the events before processing them in order to know the last owner for example (one owner coming from a |
alright I think we should propose to go the AEX-9 route and avoid implicit minting using zero-address. I will provide a PR with the proposed changes which introduce |
I have another topic to discuss. I am comparing AEX-9 and AEX-141 a bit more and we also have some difference in regards to handling transfers of tokens. AEX-9 explicitly differentiates between entrypoints called by the owner itself vs. calls of 3rd parties on behalf of the owner:
should we also adapt this and be more explicit? I'd really love to also get some feedback of you @arjanvaneersel as you were the main contributor to the standard. AEX-9 introduced a separate extension |
I decided to keep the approval stuff like is. I think it is ok and it makes it better understandable for users switching from ERC-721 to AEX-141. here is the PR for the explicit |
Discussions-To:
https://forum.aeternity.com/t/aeternity-nft-token-standard/9781/16
Content URL
https://github.com/aeternity/AEXs/blob/master/AEXS/aex-141.md
The text was updated successfully, but these errors were encountered: