ERC-7628:ERC-721 Ownership Shares Extension

Abstract

This extension defines an interface that adds balance functionalities to ERC-721 tokens, enabling functions and events for balance querying, transfer, and approval akin to ERC-20 tokens.

Motivation

Some NFTs require defining shares of a corresponding right for each token, such as ownership stakes in a company. Each token holder can be considered a shareholder of this right and they wish to be able to conveniently query and trade these shares. However, the current ERC-721 standard lacks built-in support for token balances, leading to difficulties and limitations in managing and trading these rights. By introducing balance functionalities akin to ERC-20, we can provide a universal solution for ERC-721 tokens, enabling holders to easily query and trade their corresponding shares of rights, thereby fostering broader adoption and circulation of NFTs.

3 Likes

Impressive. Implementing access control through smart contracts on the blockchain ensures decentralized and tamper-resistant authorization, reducing reliance on centralized entities and mitigating single points of failure.

Why is this needed when 1155, 6551, and 7590 already exist? What problem does it solve that those do not?

2 Likes

I have renamed the proposal to ‘ERC-721 Ownership Shares Extension’, which better aligns with the motivation.

The proposal aims to find a middle ground between ERC-721 and ERC-1155. While ERC-1155 can represent the share of an asset held by a particular address, tokens lack uniqueness. On the other hand, ERC-721 provides uniqueness for each token, but they lack attributes to represent the share of an asset.

Both 6551 and 7590 are mapped to other token assets. I think it would be more straightforward to simply add an additional attribute.

Couple of non-editorial points I want to address before moving this into last call. First, @Swader 's comment needs some more discussion. Why introduce an entire new standard when you can encode the exact same information in ERC-1155 and have better wallet support?

You say ERC-1155 tokens lack uniqueness, but you can represent an NFT as a token-id with a total supply of one, and its shares as a separate token-id with multiple shares.

ERC-7628 is less general purpose than ERC-1155 and requires even more work in wallets to properly support. Instead of building a new token system from scratch, I’d recommend a much simpler extension to ERC-1155:

interface ERC1155OwnershipShares /* is ERC1155 */ {
    function sharesOf(uint256 tokenId) public view returns (uint256 nftTokenId);
}

Given a fungible token id, sharesOf would return the token id of the NFT that is fractionally owned.


The other question I’d like to ask is why totalShares returns the total number of shares across all NFTs? That doesn’t seem like a particularly useful number. Wouldn’t it make more sense to return the total number of shares for a particular NFT?

1 Like

https://github.com/ethereum/ERCs/pull/793 seems vaguely similar to this proposal. Might be a potential area for collaboration?

The id space of ERC-3525: Semi-Fungible Token can be used to achieve that behavior.
Good idea, best today as an OZ/solmate extension.