75 lines
3.5 KiB
Markdown
75 lines
3.5 KiB
Markdown
---
|
|
eip: 3754
|
|
title: A Vanilla Non-Fungible Token Standard
|
|
description: NFTs for representing abstract ownership
|
|
author: Simon Tian (@simontianx)
|
|
discussions-to: https://github.com/ethereum/EIPs/issues/3753
|
|
status: Stagnant
|
|
type: Standards Track
|
|
category: ERC
|
|
created: 2021-08-21
|
|
---
|
|
|
|
## Abstract
|
|
In this standard, a non-fungible token stands as atomic existence and encourages
|
|
layers of abstraction built on top of it. Ideal for representing concepts like
|
|
rights, a form of abstract ownership. Such right can take the form of NFT options,
|
|
oracle membership, virtual coupons, etc., and can then be made liquid because of
|
|
this tokenization.
|
|
|
|
## Motivation
|
|
Non-fungible tokens are popularized by the [ERC-721](./eip-721.md) NFT standard
|
|
for representing "ownership over digital or physical assets". Over the course of
|
|
development, reputable NFT projects are about crypto-assets, digital collectibles,
|
|
etc. The proposed standard aims to single out a special type of NFTs that are
|
|
ideal for representing abstract ownership such as rights. Examples include the
|
|
right of making a function call to a smart contract, an NFT option that gives
|
|
the owner the right, but not obligation, to purchase an ERC-721 NFT, and the prepaid
|
|
membership (time-dependent right) of accessing to data feeds provided by oracles
|
|
without having to pay the required token fees. An on-chain subscription business
|
|
model can then be made available by this standard. The conceptual clarity of an
|
|
NFT is hence improved by this standard.
|
|
|
|
## Specification
|
|
```
|
|
interface IERC3754 {
|
|
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
|
|
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
|
|
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
|
|
|
|
function balanceOf(address owner) external view returns (uint256);
|
|
function ownerOf(uint256 tokenId) external view returns (address);
|
|
function approve(address to, uint256 tokenId) external;
|
|
function getApproved(uint256 tokenId) external view returns (address);
|
|
function setApprovalForAll(address operator, bool approved) external;
|
|
function isApprovedForAll(address owner, address operator) external view returns (bool);
|
|
function transferFrom(address from, address to, uint256 tokenId) external;
|
|
function safeTransferFrom(address from, address to, uint256 tokenId) external;
|
|
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) external;
|
|
}
|
|
```
|
|
|
|
## Rationale
|
|
The NFTs defined in the [ERC-721](./eip-721.md) standard are already largely
|
|
accepted and known as representing ownership of digital assets, and the NFTs by
|
|
this standard aim to be accepted and known as representing abstract ownership.
|
|
This is achieved by allowing and encouraging layers of abstract utilities built
|
|
on top of them. Ownership of such NFTs is equivalent with having the rights to
|
|
perform functions assigned to such tokens. Transfer of such rights is also made
|
|
easier because of this tokenization. To further distinguish this standard
|
|
from [ERC-721](./eip-721.md), data fields and functions related to `URI` are
|
|
excluded.
|
|
|
|
## Backwards Compatibility
|
|
There is no further backwards compatibility required.
|
|
|
|
## Reference Implementation
|
|
https://github.com/simontianx/ERC3754
|
|
|
|
## Security Considerations
|
|
The security is enhanced from ERC721, given tokens are minted without having to
|
|
provide `URI`s. Errors in dealing with `URI`s can be avoided.
|
|
|
|
## Copyright
|
|
Copyright and related rights waived via [CC0](../LICENSE.md).
|