Comment on page

Overview of the Fee Structure in NFT AMMs

There are three parties that can receive fees when a trade is made.
  • First, the pool creator.
  • Second, the protocol itself (
  • Third, any collection that implements royalties through ERC2981 would be able to collect on that. Pool fees can further be split into a flat fee (e.g. 0.5% of the value of the trade), or a carry fee (e.g. protocol fee 20% of the fee that a user charges).
Here is a breakdown of Collection’s fee structure -
We prefer carry fees over flat fees generally for true two-sided AMM activity (TRADE pools). DeFi protocols now have zero or near-zero fees and are run as public goods, and we feel that in two-sided AMM activity, flat protocol fees are poor design. NFTs with a tight width (e.g. 2-5%) between bid/ask are charged exactly the same as NFTs with a loose width (5-15%). What is fairer is that the protocol take should be proportional to the amount of the actual fees the user charges. A more transparent carry model, on the percent of the fees, itself a percent of the actual transaction value. will start with 0% protocol fees, but ultimately we want to make money when the user makes money However, we maintain a flat fee for NFT/TOKEN pools since that is one-time liquidity (e.g., a TOKEN pool may have a bid for an NFT, but after it buys the NFT, it does not sell it again unlike two-sided TRADE pools). Since the pool is not a going concern once the trades are fulfilled, it is conceptually cleaner to have flat fees for these sorts of pools.
Other AMMs
Beneficial party
Flat fee (as percentage of trade)
NFT/TOKEN pools - only limit pools that have one-time liquidity
On ALL pools
Carry fee (as a percentage of user set trade fee, which is itself as percentage of trade)
TRADE pools - these pools can trade infinitely, so we charge a percentage on any buy/sell activities. At inception, this is set to zero, though this can be changed through governance
no notion of carry
User-defined fee
This is set by the owner of each pool, and determines the carry fee above.
This is set by the owner of each pool, and determines the carry fee above.
The user
RoyaltyFee - set as RoyaltyNumerator. Set by default through app to be equal the amount specified by ERC2981. This number is an override
RoyaltyRecipient - set by default to be the recipient by ERC2981. Note that this cannot be overridden by the user if it is set in ERC2981 (to prevent royalty siphoning). It is thus a fallback and not an override if they royalty recipient is not set by the Collection.
no notion of royalty
The NFT collection