exo-digital-labs / ERC721R

https://erc721r.super.site/
MIT License
241 stars 61 forks source link

Suggestion #18

Closed wiasliaw closed 1 year ago

wiasliaw commented 2 years ago

replace refundAddress to address(this)

I know it is convenient to let an EOA to do something with refunded NFT. However, it may caught some bad things.

  1. Presale and public sale is the primary market. Refund should place NFT back into primary market and user can choose to mint NFT or choose to buy NFT which refunded by other.
    function buyRefunded(uint256 amount, uint256[] memory ids) external payable {
        ...
    }
  2. For the issue of NFT remaining in contract, contract owner can claim NFT after presale, public sale and refund end for future use.
    function claim(uint256[] memory ids) external onlyOwner {
        require(TIMELOCK);
    }
lawweiliang commented 2 years ago

First point

Love your idea. However, with this, it incur a lot of cost on project owner site. If there is 300 refund nft, project owner need to pay 300 nft gas fee in order to claim back all the nft and sell it over to the market. A lot of project owner are going to say no no to this.

Need your input @wiasliaw

Question that I will ask myself is what critical problem will the project get if nft was return to EOA account? Would you mind to share a little bit more on the critical problems part and be more specific?

Previously, we are worrying that the project owner drain the fund by keep calling the refund function but this problem was solved by @tina1998612 over here https://github.com/exo-digital-labs/ERC721R/pull/9


Second Point

Yeah, I am totally agree with you. We are working on it. Probably will put it on contract extended section. Here are the issues https://github.com/exo-digital-labs/ERC721R/issues/13 and https://github.com/exo-digital-labs/ERC721R/issues/12. Maybe you can discuss with project owner @elie222 and see how you can contribute on this part. 👍

elie222 commented 2 years ago

Hey, I think it could be cool to offer an extension like this, but not sure I'd like to see this in the core.

Often when someone refunds it's a sign that the market doesn't want that NFT or the market can't handle that number of NFTs on sale. In many projects the floor price drops below mint price within a few days of mint. This is a sign that the project was overvalued and there wasn't enough demand for it. Too many NFTs existed or the price was too high. By refunding to the contract owner they can avoid putting them back on sale till the market is capable of absorbing the extra NFTs. For a project to have unsold items in its contract is unhealthy for the project (no secondary trading can really happen in this period as you may as well by from the contract).

wiasliaw commented 2 years ago

@lawweiliang I agree with the cost on project owner. I think place back NFT into primary market is workable by calling ERC721.safeTransferFrom(). Contract owner needs to call approveForAll with ERC721 contract address. For user, they can prevent from taxing by market place like Opensea in primary market.

Another thought is if there are large amount of refunded token, is there any need to claim tokens out of the contract? If need, why to claim out all the token, not claim some of token?


Question that I will ask myself is what critical problem will the project get if nft was return to EOA account? Would you mind to share a little bit more on the critical problems part and be more specific?

It depends on which type of ERC721. If it is a farming or governance NFT, contract owners might have too much power or reward.

wiasliaw commented 2 years ago

@elie222

For a project to have unsold items in its contract is unhealthy for the project.

I think that refunded item in contract owner's address has the same meaning of unsold item.

elie222 commented 2 years ago

@elie222

For a project to have unsold items in its contract is unhealthy for the project.

I think that refunded item in contract owner's address has the same meaning of unsold item.

The difference is that the owner doesn't need to put them back on sale. In our case for example, we intend to hold those NFTs as the market doesn't want them. If a buyRefunded function exists then people can keep buying from it (at the same price as mint price I assume) which isn't necessarily healthy.

I'm trying to understand the benefit of returning the NFTs to the contract's ownership rather than to another address that can choose to do what they like with the NFTs?

A team could always choose to implement it this way but it feels like the default should be to return to the contract owner / refund address

wiasliaw commented 2 years ago

@elie222

I think owner can choose the way to handle the refunded token. i.e. in public for unrevealed token, owner might choose to place back token into market. Let token in owner's hand is a waste. But after token is revealed, owner might choose to hold that token, because the market doesn't want them.

lawweiliang commented 2 years ago

I think owner can choose the way to handle the refunded token. i.e. in public for unrevealed token, owner might choose to place back token into market. Let token in owner's hand is a waste. But after token is revealed, owner might choose to hold that token, because the market doesn't want them.

@wiasliaw

Yup, for my project, I will treat refunded item as unsold item. Even if the token haven't been revealed, if there is returns, I will sell the token to the secondary market. So the return token would not be sitting there and do nothing.


Thing are getting way more complex if send the return token to other contract and cause even more vulnerability. I still prefer simple and straight forward method. If owner not able to sell the NFT, return the picture back to the owner. What he/she want to do with the NFT, up to him/her. Peace.

lawweiliang commented 2 years ago

@lawweiliang I agree with the cost on project owner. I think place back NFT into primary market is workable by calling ERC721.safeTransferFrom(). Contract owner needs to call approveForAll with ERC721 contract address. For user, they can prevent from taxing by market place like Opensea in primary market.

Technically, yup. Possible. I understand your concern. For me personally, I still prefer straight forward way. Primary market not able to sell, then sell it over secondary market. Easy for us to explain to the community as well. Further, when you explain it to project owner, they will prefer simple and cheaper way. 👍

Another thought is if there are large amount of refunded token, is there any need to claim tokens out of the contract? If need, why to claim out all the token, not claim some of token?

Why need claiming? At the end, owner still want to get back the nft. Why not directly send the refund token to owner address? Wouldn't it be better?

wiasliaw commented 2 years ago

Yeap. remain here for further discussion.

elie222 commented 2 years ago

For Exodia we did return it for sale btw. For CryptoFighters we don't want them back on primary contract though