Appearance
List & sell
Selling on LootFi is an off-chain signature. Your token stays in your wallet the whole time, no contract escrows it, and creating a listing costs no gas.
The one transaction involved is a one-time approval, before your first listing.
ONCE, EVER EVERY LISTING
┌────────────────────┐ ┌──────────────────────────┐
│ setApprovalForAll │ │ sign an EIP-712 Order │
│ │ │ │
│ • a transaction │ ───► │ • a signature │
│ • costs gas │ │ • costs nothing │
│ • lets the market │ │ • moves nothing │
│ move a token AT │ │ • one token, one price, │
│ the moment of a │ │ one expiry │
│ sale │ │ │
└────────────────────┘ └──────────────────────────┘Step 1 · Approve the marketplace (one time)
Before your first listing you grant LootMarket operator approval on your LootSkins tokens, by sending a setApprovalForAll transaction. This costs gas — a few cents on this chain — and you only do it once per wallet.
What the approval actually grants
setApprovalForAll lets the marketplace contract transfer any LootSkins token you own. That is the standard ERC-721 operator model and it is what every NFT marketplace uses.
The marketplace contract can only exercise it inside fulfillOrder, which requires a valid signature from you for that specific token at that specific price. It cannot move a token you have not signed an order for.
You can revoke it at any time by calling setApprovalForAll(market, false). Revoking instantly makes all your open listings unfillable — see below.
Step 2 · Sign the listing
Choose a token, set a price in ETH, and set an expiry. Your wallet shows an EIP-712 typed-data prompt containing:
| Field | What it is |
|---|---|
maker | Your address. |
collection | The LootSkins contract. |
tokenId | The one token this order sells. |
currency | Native ETH. |
price | Exactly what a buyer pays, in wei. |
expiry | Unix timestamp after which the order is dead. |
nonce | A per-maker number identifying this order, so it can be cancelled. |
Read the prompt. A listing signature names one token and one price; anything asking you to sign something broader is not a LootFi listing.
Listing costs no gas and does not move your NFT
No transaction is sent. No contract takes custody. The token remains in your wallet, transferable by you, right up until someone buys it.
At the moment of sale, the token moves directly from your wallet to the buyer's, atomically with their payment, inside their transaction. There is never a period where a contract holds your token.
Pricing
The price is exactly what the buyer sends. What you receive is the price minus the ERC-2981 royalty and the platform fee — both deducted on-chain at settlement, both currently rated in Fees.
Any reference price shown next to your item is third-party market data, not an offer and not a valuation. See Reference prices.
Expiry
After the expiry timestamp, the order reverts on-chain if anyone tries to fill it. A shorter expiry limits how long a stale price can be taken advantage of; a longer one means fewer relistings. Nothing charges you for either choice.
What kills a listing
Some of these you do deliberately; several happen as a side effect of something else. All of them are safe — the worst case is a buyer's transaction reverting, never a sale you did not intend.
| Cause | Needs a transaction? |
|---|---|
| The expiry passes | No |
| Someone buys it (the nonce is consumed) | — |
| You cancel that nonce | Yes — cancel |
| You raise your minimum nonce past it | Yes — setMinimumNonce |
| You transfer the token away | No |
| You revoke the marketplace's approval | No |
Transferring or revoking silently invalidates listings
fulfillOrder re-checks, at fill time, that you still own the token and that the marketplace is still approved. If either is false, the fill reverts.
So a listing dies the moment you move the token or revoke approval — with no transaction, no notification, and no visible change until someone tries to buy it. That is the safe failure: nobody can buy a skin you no longer own. But if you move a token between wallets, assume its listing is dead and relist it from the new wallet.
Cancelling
Two ways, both transactions, both costing gas.
Cancel one listing — cancel(nonce) marks that single nonce used. Every other order you have signed stays live. This is what the interface's Cancel button does.
Cancel many at once — setMinimumNonce(n) invalidates every order of yours with a nonce below n, in one transaction. This is the "kill all my listings" lever, and it is one transaction regardless of how many orders it invalidates.
setMinimumNonce is not reversible in effect
Raising your minimum nonce permanently invalidates every order beneath it. New listings are signed above the watermark automatically, so future listings still work — but the invalidated ones cannot be revived. Re-sign them if you want them back.
If you only want a listing to stop being fillable and do not want to pay gas, transferring the token or revoking approval achieves that as a side effect. It is less tidy — the order technically still exists and just reverts — but it costs nothing.
Withdrawing a listed token
You cannot withdraw a token that has a live listing
Cancel the listing first, then withdraw.
The reason: deTokenize burns the token, but your signature stays valid and its nonce stays unconsumed. A buyer holding that order would pay gas for a fulfillOrder that can only revert, on a skin that has already left. So the withdrawal preflight refuses while any fillable order exists for that token.
An order that has already expired does not block a withdrawal — it cannot be filled anyway.
See Withdraw your skin.
A note on buying your own listing
You cannot. fulfillOrder reverts with SelfPurchase when the buyer is the maker. See Buy.
Next
- Buy — the other side of the same order.
- Fees — exactly what comes out of a sale.
- Sign an order — the EIP-712 payload, for integrators.
- Marketplace — settlement mechanics in full.