Royalties

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:

Glyphs.sol
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:

Vault.sol
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)
Glyphs.sol
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

MarketplaceHonors 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.

ProjectRoyaltyHolder cutNet to holder
Most legacy PFPs2.5–5%0%0%
Souls-style yield projects~5%~80%~4%
Turtle Fees10%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.

The VaultDon't Trust, Verify