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
ERC-4799 Non-Fungible Token Ownership Designation Standard #4800
Conversation
All tests passed; auto-merging...(pass) eip-4799.md
|
EIPS/eip-4799.md
Outdated
The following defines a standard interface for NFT wrapping contracts - contracts with which users can escrow their NFTs and receive a new provably authentic wrapped NFT that represents their ownership. This allows for the introduction of additional functionality for any preexisting NFT, without sacrificing authenticity. | ||
|
||
The standard works by exposing an interface that allows client applications to track a chain of authenticity from the original NFT contract to the final owner. The owner can transfer their NFT to an ERCX contract, which then assigns ownership according to its own code - say, back to the original owner. Then, applications that want to know who the owner of an NFT is will ask the original contract, and upon being told that the owner is an ERCX contract, will ask that ERCX contract who the owner of that token is - in our example, still the original owner. In this way, the original owner will still receive all the utility associated with their NFT, there is still only one owner for a given NFT, but the owner can now enjoy any added functionality provided by the implementation of the ERCX contract (say, the ability to rent ownership of their NFT). | ||
|
||
The standard works by exposing an interface that allows client applications to track a chain of authenticity from the original NFT contract to the final owner. Here is an example of a simple rental contract. The owner, Owner A can transfer their NFT to an ERCX contract, which then assigns ownership according to its own code - say, back to the Owner B. Then, applications that want to know who the owner of an NFT is will ask the original contract, and upon being told that the owner is an ERCX contract, will ask that ERCX contract who the owner of that token is - in our example, still the original owner. In this way, the original owner will still receive all the utility associated with their NFT, there is still only one owner for a given NFT, but the owner can now enjoy any added functionality provided by the implementation of the ERCX contract (say, the ability to rent ownership of their NFT). |
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'd try to collapse this down a bit. The abstract should be a terse technical summary describing what the EIP specifies.
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.
Cut this down to a single paragraph
EIPS/eip-4799.md
Outdated
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. | ||
|
||
```solidity | ||
// SPDX-License-Identifier: UNLICENSED |
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.
Should likely be CC0-1.0
to match the surrounding document.
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.
Updated
EIPS/eip-4799.md
Outdated
|
||
import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; | ||
|
||
interface IERCXNFT is IERC165 { |
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.
Might be worth re-ordering these interfaces so that they are read in the order they are required?
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.
Had put the other one first since it's the core proposal, but re-ordered to be read in the order they are required
EIPS/eip-4799.md
Outdated
|
||
## Rationale | ||
|
||
#### |
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.
What's 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.
Removed
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.
Some really small nits left. Unfortunately I can't just apply them for you since I'm not a maintainer on this repo 😅
I think this'll be good to merge after!
EIPS/eip-4799.md
Outdated
|
||
## Security Considerations | ||
|
||
##### Long/Cyclical Chains of Ownership |
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.
##### Long/Cyclical Chains of Ownership | |
### Long/Cyclical Chains of Ownership |
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.
Updated
EIPS/eip-4799.md
Outdated
|
||
## Backwards Compatibility | ||
|
||
The `IERC4799NFT` interface is backwards compatible with `IERC721`, as `IERC721` implicitly extends `IERC4799NFT`. This means that the ERC-4799 standard, which wraps NFTs that implement `ERC4799NFT`, is fully backwards compatible with ERC721. |
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 `IERC4799NFT` interface is backwards compatible with `IERC721`, as `IERC721` implicitly extends `IERC4799NFT`. This means that the ERC-4799 standard, which wraps NFTs that implement `ERC4799NFT`, is fully backwards compatible with ERC721. | |
The `IERC4799NFT` interface is backwards compatible with `IERC721`, as `IERC721` implicitly extends `IERC4799NFT`. This means that the ERC-4799 standard, which wraps NFTs that implement `ERC4799NFT`, is fully backwards compatible with ERC-721. |
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.
Updated
EIPS/eip-4799.md
Outdated
|
||
## Rationale | ||
|
||
To maximize the future compatibility of the wrapping contract, we first defined a canonical NFT interface. We created `IERC4799NFT`, an interface implicitly implemented by virtually all popular NFT contracts, including all deployed contracts that are ERC-721 compliant. This interface represents the essence of an NFT: a mapping from a token identifier to the address of a singular owner, represented by the function `ownerOf`. |
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.
To maximize the future compatibility of the wrapping contract, we first defined a canonical NFT interface. We created `IERC4799NFT`, an interface implicitly implemented by virtually all popular NFT contracts, including all deployed contracts that are ERC-721 compliant. This interface represents the essence of an NFT: a mapping from a token identifier to the address of a singular owner, represented by the function `ownerOf`. | |
To maximize the future compatibility of the wrapping contract, we first defined a canonical NFT interface. We created `IERC4799NFT`, an interface implicitly implemented by virtually all popular NFT contracts, including all deployed contracts that are [ERC-721](./eip-721.md) compliant. This interface represents the essence of an NFT: a mapping from a token identifier to the address of a singular owner, represented by the function `ownerOf`. |
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.
Updated
hey @SamWilsn, addressed those changes - what are next steps here? |
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.
Nothing on your end, at least to get the draft merged!
…4800) * eip-4800 initial commit * Update EIPS/eip-4800.md * rename file * add discussions-to link * rework to designate ownership through a generic target token * include link to erc-721 * update abstract Co-authored-by: Micah Zoltu <micah@zoltu.net> Co-authored-by: isaacbuckman <isaacbuckman4@gmail.com>
…4800) * eip-4800 initial commit * Update EIPS/eip-4800.md * rename file * add discussions-to link * rework to designate ownership through a generic target token * include link to erc-721 * update abstract Co-authored-by: Micah Zoltu <micah@zoltu.net> Co-authored-by: isaacbuckman <isaacbuckman4@gmail.com>
When opening a pull request to submit a new EIP, please use the suggested template: https://github.com/ethereum/EIPs/blob/master/eip-template.md
We have a GitHub bot that automatically merges some PRs. It will merge yours immediately if certain criteria are met: