Let's say I want to create a non-fungible token which represents a ticket to a venue. And I don't want ticket scalpers to buy tickets and resell these tickets for a higher price. It should only be possible to resell the ticket for the same or a lower price.

Does an ERC standard exist where one can set the maximum reselling price?

If not, how could this be achieved? The best way I can think of right now is to copy the ERC721 contract and modify the transfer function. But then I loose all the benefits from ERC721 compatibility...


The ERC721 standard defines the token. Similarily ERC20 standard defines a different type of token. Neither of them define how the token is sold or under what circumstances it is transferred around - the standard simply enables transfers when needed.

So what typically happens is that a separate selling contract (or in the case of ERC20 ICOs - a crowdsale contract) is created. In the case of ERC20 the process is quite straightforward: initially the crowdsale contract holds all the tokens which are for sale and when someone sends Ethers to the contract is calls the token contract to transfer the appropriate amount of tokens to the buyer.

I'm not so familiar with the ways how ERC721 tokens are being sold but I'd imagine it's more one-off sales. So there's a selling contract where seller sends the token and says what price it wants for it. Then a buyer sends the requested amount of Ether to the contract and the contract calls the ERC721 token contract to transfer the token and transfers the Ethers to the buyer.

As for your specific case I'd suggest that you create a selling contract which simply doesn't allow reselling of the token for a higher price. That is, if the seller uses that contract - typically nothing prevents him from using any means he wants in selling the token. You could either write the token so that it allows transfers only from a certain address (the seller contract) and/or you can instruct your users to only sell their tokens through this one contract.

| improve this answer | |

Yes. You can do this. And this use case is supported by the standards.

If you are making something and need help call me.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.