Royalties
Royalties are not a suggestion. They are the entire revenue model for holders. Every secondary sale routes 10% of the price through the Vault.
Where the mint funds go
100% of mint proceeds go directly to the deployer's wallet. Not to the holder pool. Not to a treasury. The contract sends them straight via a single, isolated function:
function mint(uint256 quantity) external payable nonReentrant {
if (!mintOpen) revert MintClosed();
if (quantity == 0) revert InvalidQuantity();
if (mintedBy[msg.sender] + quantity > MAX_PER_WALLET) revert WalletCapExceeded();
if (_totalMinted() + quantity > SUPPLY) revert SupplyExceeded();
if (msg.value != MINT_PRICE * quantity) revert WrongPrice();
if (address(vault) == address(0)) revert ZeroAddress();
unchecked { mintedBy[msg.sender] += quantity; }
_mint(msg.sender, quantity);
vault.receiveMint{value: msg.value}();
}The Vault's receiveMint is only callable by the NFT contract and only deposits to the deployer balance:
function receiveMint() external payable onlyGlyphs {
deployerBalance += msg.value;
emit RoyaltyReceived(msg.sender, msg.value, 0, msg.value);
}Why it matters: the holder pool is fed only by secondary trading volume, not by minting. Minting is the deployer's revenue. Trading is the holders' revenue. Clean separation.
EIP-2981
Turtle Fees implements EIP-2981 — the on-chain royalty standard. Marketplaces query the NFT contract before completing a sale and learn:
- Receiver: the Vault contract
- Royalty: 10% (1000 bps)
function royaltyInfo(uint256, uint256 salePrice)
external view override
returns (address receiver, uint256 royaltyAmount)
{
return (address(vault), (salePrice * ROYALTY_BPS) / 10_000);
}Which marketplaces honor it
| Marketplace | Honors EIP-2981 |
|---|---|
| OpenSea | ✅ Yes (creator-set, on-chain) |
| Magic Eden | ✅ Yes |
| LooksRare | ✅ Yes |
| X2Y2 | ✅ Yes |
| Element | ✅ Yes |
| Blur | ⚠️ Optional (0.5% min) |
| Sudoswap AMM | ❌ No |
Realistic capture rate: ~75–85% of theoretical royalties. Blur volume is significant in 2026 and they cap enforcement at 0.5%. We do not use Operator Filter — that would block Blur entirely and kill liquidity, which hurts every holder more than it helps.
Why 10% (and not 5%)
Most projects do 5% royalties. We do 10% — and 90% of it goes back to holders. Net to holders: 9% of every sale.
| Project | Royalty | Holder cut | Net to holder |
|---|---|---|---|
| Most legacy PFPs | 2.5–5% | 0% | 0% |
| Souls-style yield projects | ~5% | ~80% | ~4% |
| Turtle Fees | 10% | 90% | 9% |
Higher royalty + holder split = sustained yield as long as people trade.
Why we don't use Operator Filter
Operator Filter is a list-based blocker that prevents transfers via non-compliant marketplaces. It was popular in 2022–2023 but in 2026 it is widely seen as anti-user:
- Blocks holders from listing on Blur (largest pro trader marketplace)
- Locks NFTs into specific marketplaces
- Breaks composability with newer protocols
We chose EIP-2981 standard over Operator Filter. You lose 15–25% of theoretical royalty but keep 100% of liquidity. The math favors holders.