Reminder: in the long run asset transfer fees are probably a bad idea
One idea that comes up over and over again in various application-layer mechanism designs is generating revenue by putting fees on transfers. The most recent example of this is NFTs, where there is a built-in mechanic that when the NFT is resold, some percentage of the sale value (or some fixed amount) is simultaneously transferred to the original creator of the NFT. However, there have also been previous examples of this, coins that have a built-in "sales tax" to fund revenue for some purpose.
This is attractive, as it seems to guarantee ongoing funding for the NFT creator or any project that uses such a scheme. However, there are large flaws in using such mechanisms:
- Transfer fees are trivially circumventable with wrapper contracts. If you have an asset with a transfer fee, and you want to sell it, you simply transfer the asset to a wrapper contract. The wrapper contract itself issues a token (an ERC20 or an ERC721, depending on what type the underlying asset is), and it has a rule that anyone who holds the wrapper contract can withdraw the underlying asset. With this trick, the transfer fee is only paid once (and the sale price appears to be zero or arbitrarily close to zero if zero is disallowed), and after that point, the asset itself appears to never move: it's just stuck inside the wrapper contract. It's only the wrapper contract's token that gets transferred, fee-free.
- We want to move to smart contract wallets (eg. social recovery wallets), and smart contract wallets are themselves effectively sellable wrappers. One way to deal with problem (1) is to only allow externally-owned accounts (EOAs) to hold an asset, so "users" can hold it but contracts cannot. The problem, however, is that this would exclude smart contract wallets, and smart contract wallets have amazing properties so we would like to move toward an ecosystem where the default user account is a smart contract wallet. But if you allow smart contract wallets, then you allow tradeability, because a smart contract itself can be sold (via using key expiry or social recovery or other means to change its key).
- There are legitimate (non-sale) reasons to transfer your asset to another wallet. Perhaps you simply want to move from one wallet provider to another, and the two wallets use different schemes such that a direct key export becomes impractical. Such transfers should not be taxed, and yet with a transfer tax they are.
A better alternative to transfer taxes is to just use Harberger taxes (see also: this podcast with Anthony Lee Zhang). In a Harberger tax, the owner of the NFT or other asset sets a sale price for which anyone can buy the asset from them, and they get regularly taxed proportionally to that sale price (eg. the tax could be 3% of the sale price per year). The tax does not depend on knowing when ownership is transferred, making it robust to the issues above.
See also: "This Artwork is Always on Sale" by Simon de la Rouviere, an experiment which implements this idea.