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

Add ERC: Multi-Owner Non-Fungible Tokens (MO-NFT) #539

Open
wants to merge 36 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
8846871
Multi Owners NFT
Jul 13, 2024
f19cb42
correct format
Jul 13, 2024
9b73e1b
correct format
Jul 13, 2024
18c8be9
correct format
Jul 13, 2024
2490372
correct format
Jul 13, 2024
d591c27
update format
Jul 13, 2024
910b33a
change format
Jul 13, 2024
acf7094
update format
Jul 13, 2024
de9d3b0
update Author
Jul 16, 2024
b945e47
Merge branch 'master' into MO-NFT
jamesavechives Jul 16, 2024
3e9fb18
update epi number to 7743
Jul 17, 2024
9ad648e
Merge branch 'MO-NFT' of github.com:jamesavechives/ERCs into MO-NFT
Jul 17, 2024
baf5408
update discussion link
Jul 17, 2024
c5b45ed
Merge branch 'master' into MO-NFT
jamesavechives Jul 20, 2024
9e3f554
Merge branch 'master' into MO-NFT
jamesavechives Jul 24, 2024
9453646
Add ERC : Decentralized Employment System
Aug 4, 2024
9e770b6
rm DES file
Aug 4, 2024
1a0dc1f
remove ERC-721 internal link
Aug 4, 2024
fe9ba8f
markdown link
Aug 4, 2024
2328d66
rm erc-721 link
Aug 4, 2024
78012ba
update format
Aug 4, 2024
1b870b8
Merge branch 'master' into MO-NFT
jamesavechives Aug 4, 2024
b3666e0
Merge branch 'master' into MO-NFT
jamesavechives Aug 19, 2024
c1a42bc
Update ERCS/erc-7743.md
jamesavechives Sep 29, 2024
e7deea5
Revise Rationale Section
Sep 29, 2024
935a421
Revise Interface Definitions
Sep 29, 2024
b9df715
remove the decryption and access control part
Sep 29, 2024
df35471
ERC -> [ERC-721](./eip-721.md)
Sep 29, 2024
80326a6
Merge branch 'master' into MO-NFT
jamesavechives Sep 29, 2024
cdb6dd9
update format
Oct 8, 2024
b17ba27
update test cases
Oct 8, 2024
e5e373f
Merge branch 'master' into MO-NFT
jamesavechives Oct 8, 2024
fa17755
Merge branch 'master' into MO-NFT
jamesavechives Oct 20, 2024
fd6f193
Merge branch 'master' into MO-NFT
jamesavechives Oct 25, 2024
67643cf
Merge branch 'master' into MO-NFT
jamesavechives Nov 1, 2024
14b4190
Merge branch 'master' into MO-NFT
jamesavechives Nov 11, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 109 additions & 0 deletions ERCS/erc-7743.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
---
eip: 7743
title: Multi-Owner Non-Fungible Tokens (MO-NFT)
description: A new type of non-fungible token that supports multiple owners, allowing shared ownership and transferability among users.
author: James Savechives (@jamesavechives) <[email protected]>
discussions-to: https://ethereum-magicians.org/t/discussion-on-eip-7743-multi-owner-non-fungible-tokens-mo-nft/20577
status: Draft
type: Standards Track
category: ERC
created: 2024-07-13
---

## Abstract
This ERC proposes a new standard for non-fungible tokens (NFTs) that supports multiple owners. The MO-NFT standard allows a single NFT to have multiple owners, reflecting the shared and distributable nature of digital assets. This model also incorporates a mechanism for value depreciation as the number of owners increases, maintaining the principle that less ownership translates to more value.

## Motivation
Traditional NFTs enforce a single-ownership model, which does not align with the inherent duplicability of digital assets. MO-NFTs allow for shared ownership, promoting wider distribution and collaboration while maintaining secure access control. This model supports the principle that some valued information is more valuable if fewer people know it, hence less ownership means higher value.

## Specification

### Token Creation and Ownership Model
1. **Minting**: When a digital asset is uploaded, a unique MO-NFT is minted, and the uploader becomes the initial owner.
2. **Ownership List**: The MO-NFT maintains a list of owners. Each transfer adds the new owner to the list while retaining the existing owners.
3. **Transfer Mechanism**: Owners can transfer the token to new owners. The transfer does not remove the original owner from the list but adds the new recipient.

### Transfer of Ownership
1. **Additive Ownership**: Transferring ownership adds the new owner to the ownership list without removing the current owners.
2. **Ownership Tracking**: The smart contract tracks the list of owners for each MO-NFT.

### Value Depreciation
1. **Value Model**: As the number of owners increases, the value of the MO-NFT decreases to reflect the reduced exclusivity.
2. **Depreciation Mechanism**: The value depreciation model is defined based on the asset type and distribution strategy. Less ownership equates to more value, following the principle that valued information or assets become less valuable as they become more widely known or accessible.

### Interface Definitions
The MO-NFT contract implements the following interfaces:

1. **Minting**:
- `function mintToken() public onlyOwner returns (uint256);`

2. **Transfer**:
- `function transferFrom(address from, address to, uint256 tokenId) public override;`
- `function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public override;`
- `function safeTransferFrom(address from, address to, uint256 tokenId) public override;`

3. **Ownership Management**:
- `function isOwner(uint256 tokenId, address account) public view returns (bool);`
- `function getOwnersCount(uint256 tokenId) public view returns (uint256);`
- `function balanceOf(address owner) external view override returns (uint256 balance);`
- `function ownerOf(uint256 tokenId) external view override returns (address owner);`

### [ERC-721](./eip-721.md) Compliance
The MO-NFT standard is designed to be compatible with the [ERC-721](./eip-721.md) standard. It implements required functions such as `balanceOf`, `ownerOf`, `safeTransferFrom`, and `transferFrom` from the `IERC721` interface. Approval functions are intentionally disabled due to the multi-owner nature of MO-NFTs, which differs from traditional [ERC-721](./eip-721.md) logic.

The `supportsInterface` function ensures that the MO-NFT declares compatibility with the [ERC-721](./eip-721.md) standard, allowing it to be integrated with existing tools and platforms that support [ERC-721](./eip-721.md).


## Rationale
The rationale behind the design choices in the MO-NFT standard is as follows:

1. **Multi-Ownership Model**:
- We adopted a multi-owner structure to better reflect the nature of digital assets, which can be copied and shared without losing their original form. This model allows for broader distribution and access, enhancing collaboration among multiple owners while retaining a single NFT identity.

2. **Additive Ownership**:
- The decision to allow ownership transfer to be additive (i.e., not removing existing owners) stems from the concept of shared digital assets. This approach ensures that each transfer does not diminish the original owner's rights, enabling a more inclusive ownership model that suits digital content, where multiple stakeholders may have legitimate claims.

3. **Value Depreciation Mechanism**:
- We introduced the value depreciation model based on the concept that the value of information decreases as it becomes more widely accessible. This mechanism incentivizes exclusivity and ensures that as more owners are added, the token's value adjusts accordingly, aligning with real-world economic principles.

4. **[ERC-721](./eip-721.md) Compatibility**:
- We ensured that the MO-NFT standard maintains compatibility with [ERC-721](./eip-721.md) to allow for seamless integration with existing NFT tools, platforms, and marketplaces. This decision was made to leverage the established infrastructure and ecosystem of [ERC-721](./eip-721.md) while extending its capabilities for multi-ownership.

## Backwards Compatibility
This standard is designed to be backwards compatible with the existing [ERC-721](./eip-721.md) standard. Existing tools and platforms that support [ERC-721](./eip-721.md) should be able to interact with MO-NFTs with minimal modifications.

## Test Cases
These test cases demonstrate the functionality of MO-NFTs:

1. **Minting an MO-NFT and Verifying Initial Ownership**:
- **Input**:
- Call `mintToken()` with the sender as the owner.
- **Expected Output**:
- A new `tokenId` is generated.
- The sender becomes the first owner of the token (`isOwner(tokenId, sender)` returns `true`).
- The total supply increases by 1 (`totalSupply()` reflects the new count).
- The `balanceOf(sender)` increases by 1.

2. **Transferring an MO-NFT and Verifying Additive Ownership**:
- **Input**:
- Call `transferFrom(sender, receiver, tokenId)` where the sender is an existing owner and `receiver` is not an owner.
- **Expected Output**:
- The receiver is added to the list of owners (`isOwner(tokenId, receiver)` returns `true`).
- The sender remains an owner (`isOwner(tokenId, sender)` still returns `true`).
- The total number of owners for the token increases by 1 (`getOwnersCount(tokenId)` reflects the new count).
- The `balanceOf(receiver)` increases by 1, and the `balanceOf(sender)` remains the same.

### Additional Detailed Test Case (Optional):
3. **Failing to Transfer to an Existing Owner**:
- **Input**:
- Call `transferFrom(sender, existingOwner, tokenId)` where `existingOwner` is already listed as an owner of the token.
- **Expected Output**:
- The transfer is reverted with an error message `"Recipient is already an owner"`.
- The state of the ownership list remains unchanged.

## Security Considerations
1. **Data Integrity**: Protect the integrity of the ownership list and associated metadata.
2. **Smart Contract Security**: Follow best practices for smart contract development to prevent vulnerabilities and exploits.

## Copyright
Copyright and related rights waived via [CC0](../LICENSE.md).
Loading