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
Turtle Fees lives on Robinhood Chain, and the marketplace landscape there works in holders' favor:
| Marketplace | Honors EIP-2981 |
|---|---|
| OpenSea (live on Robinhood Chain since launch week) | ✅ Yes (creator-set, on-chain) |
Realistic capture rate: near-total. OpenSea — the first major marketplace on Robinhood Chain — honors creator-set on-chain royalties. Royalty-optional venues like Blur have no deployment on the chain today. If new marketplaces arrive, EIP-2981 travels with the token: any compliant venue pays the Vault automatically. We do not use Operator Filter — blocking venues kills 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.