Skip to content

Fees & royalties ​

Every cost in the protocol, with the arithmetic and how to verify each value on-chain. For the user-facing summary see Fees.

What is charged, and when ​

ActionCost
Deposit a skinFree. The mint transaction is paid by the protocol.
Approve the marketplaceGas only, once per wallet
List a tokenFree. A listing is a signature, not a transaction.
Cancel a listingGas only
BuyRoyalty + platform fee, both taken out of the sale price
Withdraw (burn)withdrawFee per token — currently 0 — plus gas

There is no deposit fee, no minting fee charged to the user, no listing fee, and no subscription.

Sale arithmetic ​

On every fill, LootMarket computes:

royaltyAmount  = royaltyInfo(tokenId, price).amount     // ERC-2981, from LootSkins
platformFee    = price * platformFeeBps / 10_000
sellerProceeds = price - royaltyAmount - platformFee

Paid in that order — royalty receiver, then fee recipient, then seller — before the NFT transfers. If royaltyAmount + platformFee ever exceeded price, the fill reverts with FeeExceedsPrice rather than underflowing the seller.

Current values ​

ValueRead it with
Platform fee200 bps (2%)platformFeeBps() on LootMarket
Creator royalty500 bps (5%)royaltyInfo(tokenId, price) on LootSkins
Seller receives93% of the sale price—

Both are owner-settable, so treat this table as a snapshot and read the chain when the number matters.

Worked example — a 0.05 ETH sale ​

price            0.050000 ETH   50000000000000000 wei
royalty  5%      0.002500 ETH    2500000000000000 wei  → royalty receiver
platform 2%      0.001000 ETH    1000000000000000 wei  → fee recipient
                 ────────────
seller          0.0465   ETH   46500000000000000 wei  → maker

buyer pays       0.050000 ETH + gas

Send more than price and the excess is refunded in the same transaction, so overpaying costs nothing but the gas to move it.

The 10% hard cap ​

solidity
uint16 public constant MAX_PLATFORM_FEE_BPS = 1_000;   // 10%

Checked in both initialize and setPlatformFee, so no owner action can set the platform fee above 10%. An attempt reverts with FeeTooHigh. This is a compile-time constant — changing it would require a contract upgrade, which is publicly observable.

The ERC-2981 royalty has its own cap, MAX_ROYALTY_BPS = 1000 (10%), enforced in both initialize and setDefaultRoyalty on LootSkins. An attempt above it reverts with RoyaltyTooHigh.

Both caps together are what bound a fill: royalty and platform fee can never consume more than 20% of a sale, so a seller always keeps at least 80% of the price they signed for — no owner action can change that without a contract upgrade, which is publicly observable.

Royalty is advisory at the token level ​

LootSkins implements ERC-2981, which is a lookup standard, not an enforcement mechanism. The token contract does not block a transfer that skips royalty.

  • Selling through LootMarket: royalty is read and paid on every fill.
  • Selling anywhere else, or transferring directly: whether royalty is honoured is entirely up to that venue.

Withdrawal fee ​

withdrawFee on LootSkins is charged per token on deTokenize and is currently 0.

Excess is not refunded

Unlike a marketplace fill, deTokenize does not refund overpayment. Read withdrawFee() immediately before calling and send exactly fee × ids.length. Sending more means losing the difference.

Collected fees accumulate in the contract and are swept by the owner via withdrawFees, which emits FeesWithdrawn.

Gas ​

Robinhood Chain is an Arbitrum Nitro L2; typical operations cost a fraction of a cent. Always estimate gas per transaction rather than hardcoding a limit — the Nitro fee model prices L1 data separately, and a hardcoded limit that works today can fail after a calldata change.

LootFi is not affiliated with, endorsed by, or sponsored by Valve Corporation. Counter-Strike and Steam are trademarks of Valve Corporation.