ERC-5505 - EIP-1155 asset backed NFT extension

Created 2022-08-18
Status Stagnant
Category ERC
Type Standards Track
Authors
Requires

Abstract

To propose an extension of smart contract interfaces for asset-backed, fractionalized projects using the EIP-1155 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 compliant contracts MAY implement this EIP for adding functionalities to support total acquisition.

//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. 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.