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

ERC-4799 Non-Fungible Token Ownership Designation Standard #4800

Merged
merged 7 commits into from Apr 7, 2022
Merged

ERC-4799 Non-Fungible Token Ownership Designation Standard #4800

merged 7 commits into from Apr 7, 2022

Conversation

davidbuckman
Copy link
Contributor

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:

  • The PR edits only existing draft PRs.
  • The build passes.
  • Your GitHub username or email address is listed in the 'author' header of all affected PRs, inside .
  • If matching on email address, the email address is the one publicly listed on your GitHub profile.

@eth-bot
Copy link
Collaborator

eth-bot commented Feb 14, 2022

All tests passed; auto-merging...

(pass) eip-4799.md

classification
updateEIP
  • passed!

@davidbuckman davidbuckman changed the title EIP-4800 Non-Fungible Token Wrapping Standard ERC-4800 Non-Fungible Token Wrapping Standard Feb 14, 2022
EIPS/eip-4800.md Outdated Show resolved Hide resolved
EIPS/eip-4800.md Outdated Show resolved Hide resolved
@davidbuckman davidbuckman changed the title ERC-4800 Non-Fungible Token Wrapping Standard ERC-4799 Non-Fungible Token Wrapping Standard Feb 23, 2022
EIPS/eip-4799.md Outdated
Comment on lines 16 to 20
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).
Copy link
Contributor

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.

Copy link
Contributor Author

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
Copy link
Contributor

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.

Copy link
Contributor Author

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 {
Copy link
Contributor

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?

Copy link
Contributor Author

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

####
Copy link
Contributor

Choose a reason for hiding this comment

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

What's this?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Removed

@davidbuckman davidbuckman changed the title ERC-4799 Non-Fungible Token Wrapping Standard ERC-4799 Non-Fungible Token Ownership Designation Standard Mar 20, 2022
Copy link
Contributor

@SamWilsn SamWilsn left a 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
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
##### Long/Cyclical Chains of Ownership
### Long/Cyclical Chains of Ownership

Copy link
Contributor

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.
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
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.

Copy link
Contributor

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`.
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
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`.

Copy link
Contributor

Choose a reason for hiding this comment

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

Updated

@davidbuckman
Copy link
Contributor Author

hey @SamWilsn, addressed those changes - what are next steps here?

Copy link
Contributor

@SamWilsn SamWilsn left a 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!

@kodiakhq kodiakhq bot merged commit 6ba68e9 into ethereum:master Apr 7, 2022
PowerStream3604 pushed a commit to PowerStream3604/EIPs that referenced this pull request May 19, 2022
…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>
nachomazzara pushed a commit to nachomazzara/EIPs that referenced this pull request Jan 13, 2023
…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants