DCIPs/EIPS/eip-5505.md

78 lines
3.4 KiB
Markdown
Raw Normal View History

---
eip: 5505
title: EIP-1155 asset backed NFT extension
description: Extends EIP-1155 to support crucial operations for asset-backed NFTs
author: liszechung (@liszechung)
discussions-to: https://ethereum-magicians.org/t/eip-draft-erc1155-asset-backed-nft-extension/10437
status: Stagnant
type: Standards Track
category: ERC
created: 2022-08-18
requires: 1155
---
## Abstract
To propose an extension of smart contract interfaces for asset-backed, fractionalized projects using the [EIP-1155](./eip-1155.md) standard such that total acquisition will become possible. This proposal focuses on physical asset, where total acquisition should be able to happen.
## Motivation
Fractionalized, asset backed NFTs face difficulty when someone wants to acquire the whole asset. For example, if someone wants to bring home a fractionalized asset, he needs to buy all NFT pieces so he will become the 100% owner. However he could not do so as it is publicly visible that someone is trying to perform a total acquisition in an open environment like Ethereum. Sellers will take advantage to set unreasonable high prices which hinders the acquisition. Or in other cases, NFTs are owned by wallets with lost keys, such that the ownership will never be a complete one. We need a way to enable potential total acquisition.
## Specification
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.
[EIP-1155](./eip-1155.md) compliant contracts MAY implement this EIP for adding functionalities to support total acquisition.
```solidity
//set the percentage required for any acquirer to trigger a forced sale
//set also the payment token to settle for the acquisition
function setForcedSaleRequirement(
uint128 requiredBP,
address erc20Token
) public onlyOwner
//set the unit price to acquire the remaining NFTs (100% - requiredBP)
//suggest to use a Time Weighted Average Price for a certain period before reaching the requiredBP
//emit ForcedSaleSet
function setForcedSaleTWAP(
uint256 amount
) public onlyOwner
//acquirer deposit remainingQTY*TWAP
//emit ForcedSaleFinished
//after this point, the acquirer is the new owner of the whole asset
function execForcedSale (
uint256 amount
) public external payable
//burn ALL NFTs and collect funds
//emit ForcedSaleClaimed
function claimForcedSale()
public
event ForcedSaleSet(
bool isSet
)
event ForceSaleClaimed(
uint256 qtyBurned,
uint256 amountClaimed,
address claimer
)
```
## Rationale
Native ETH is supported by via Wrapped Ether [EIP-20](./eip-20.md).
After forcedSale is set, the remaining NFTs metadata should be updated to reflect the NFTs are at most valued at the previously set TWAP price.
## Security Considerations
The major security risks considered include
- The execution of the forcedSale is only executed by the contract owner, after a governance proposal. If there is any governance attack, the forcedSale TWAP price might be manipulated on a specific timing. The governance structure for using this extension should consider adding a **council** to safeguard the fairness of the forcedSale.
- Payment tokens are deposited into the contract account when forcedSale is executed. These tokens will then await the minority holders to withdraw on burning the NFT. There might be a potential security risk.
## Copyright
Copyright and related rights waived via [CC0](../LICENSE.md).