Abstract
This EIP introduces a new type of Non-Fungible Token (NFT) called Dynamic Fractional Non-Fungible Token (DF-NFT), which represents on-demand resource usage rights. DF-NFTs are generated by fractionalizing an ERC-721 Non-Fungible Token that represents a shareable usage right for a set of resources bound to physical assets or resources, such as computing resources bound to a PC, smartphone, or IOT device. The goal is to facilitate the recycling of a shareable usage right for resources in a decentralized, secure, and traceable manner.
The proposal outlines a set of functions that define two array variables: resource classification and quantities, which dynamically record the classification and corresponding available quantities of various resources that share usage rights. An implementation allows changing the current resource quantities for a given ERC-721 NFT (Parent NFT), along with the generation or burning of a DF-NFT. This proposal extends the existing EIP-721 standard.
Motivation
The sharing economy has experienced significant growth in recent years, resulting in the emergence of new business models such as car-sharing (e.g., Uber) and home-sharing (e.g., AirBnb), among others. However, the current lack of a decentralized way to represent and trade shared usage rights for physical assets or resources creates a fragmented and inefficient market with high barriers to entry and limited access to a global audience.
DF-NFTs offer a solution that enables individuals to own fractional resource usage rights dynamically, facilitating efficiency, secure, and transparency. This allows for wider participation in the sharing economy on a larger scale.
Specification
interface IDFNFT{
/**
-
@dev Mint a ParentNFT that represents a shareable usage right for a set of resources
-
@param resourceNames Classification of various resources
-
@param resourceQuantities Available quantities of various resources
*/
function mintParentNFT(address to, string memory resourceNames, uint256 memory resourceQuantities) external;
/**
-
@dev Get the token ID of a DF-NFT’s ParentNFT
-
Check if tokenId is the token ID of a DF-NFT
-
@param tokenId The token ID of a DF-NFT
*/
function getParentTokenId(uint256 tokenId) external view returns (uint256);
/**
-
@dev Generating a DF-NFT
-
Check if parentTokenId is the token ID of a ParentNFT
-
Check if the user is eligible for generating a DF-NFT
-
Check if resourceQuantities of ParentNFT meets the user’s demand
-
Reduce the resourceQuantities of ParentNFT accordingly after generating a DF-NFT that represents fractional resource usage right
-
@param parentTokenId The token ID of a ParentNFT
-
@param user Address of the user who requests resource usage right on demand
-
@param resourceNames Classification of resources requested by the user
-
@param resourceQuantities Quantities of resources requested by the user
*/
function newDFNFT(uint256 parentTokenId, address user, string memory resourceNames, uint256 memory resourceQuantities) external;
/**
-
@dev Burning a DF-NFT
-
Check if the user is eligible for burning a DF-NFT
-
Check if tokenId is the token ID of a DF-NFT
-
Increase the resourceQuantities of ParentNFT accordingly after burning a DF-NFT that represents fractional resource usage right
-
@param tokenId The token ID of a DF-NFT
*/
function burnDFNFT(uint256 tokenId) external;
}
We’re looking for feedback before designing a more detailed EIP draft.
Thoughts and comments are much appreciated!
Thanks for your attention.