Skip to content

Withdraw your skin

Withdrawing — detokenizing — burns your token and has the underlying CS2 skin traded back to your Steam account. It is the redemption the whole protocol exists to make good on.

Two things to internalise before you start:

The burn is irreversible, and the return needs you to accept a trade

deTokenize destroys the token in the block it mines. There is no undo, no admin recovery, and no way to re-mint it.

After the burn, a trade offer is sent to your saved Steam trade URL. The skin does not appear in your inventory by itself — you have to accept that offer in Steam.

Before you can withdraw

Three preconditions, all checked by a preflight before the burn is enabled:

  1. You are the on-chain owner of the token. Not an approved operator, not the address that deposited it originally — the current ownerOf. Ownership is read from the chain, and if it cannot be confirmed right now, the withdrawal is refused rather than guessed at.
  2. The token is not listed. Any live, fillable order for it blocks the withdrawal. Cancel the listing first — see List & sell.
  3. A custody account actually holds the item. Confirmed against Steam before you are allowed to burn anything, so you cannot destroy a token that could not be honoured.

You also need a saved trade URL and a Steam account able to receive trades. See Getting started.

The preflight exists to protect you from an unbackable burn

It runs first, on purpose. If it fails, nothing has happened — you still hold the token, you have paid nothing but a page load, and the reason is shown.

Common refusals: you are not the on-chain owner · the token has a live listing · ownership could not be confirmed right now · no trade URL on file · Steam is unavailable or throttling. Most are transient. See Troubleshooting.

The burn

deTokenize(uint256[] tokenIds) on LootSkins.

   preflight ✓


   deTokenize([id, id, …])         ← you send this, you pay gas

        ├─ requires: you are the DIRECT owner of every id
        ├─ requires: msg.value ≥ withdrawFee × count
        ├─ burns every id
        └─ emits Detokenized(owner, tokenIds)


   the Detokenized event drives the return


   trade offer sent to YOUR saved trade URL


   you accept it in Steam  ──►  skin is back in your inventory

Up to 50 per call

MAX_BATCH is 50. A call with more ids than that reverts, as does an empty array. Split larger withdrawals into several calls.

Direct owner only — deliberately

An approved operator cannot burn on your behalf

deTokenize requires msg.sender to be the direct owner of every token in the call. Operator approval — including the approval you granted the marketplace — is intentionally not accepted.

The reason is that the return offer is routed to the address the burn event names. Accepting an operator burn would mean routing someone's skin to whoever happened to be approved. So the burn must come from the owning address itself, and a smart-contract wallet or an escrow holding your token cannot burn it for you.

The fee, and the refund that does not exist

deTokenize is payable and charges withdrawFee per token.

The current withdrawFee is 0. Verified on-chain — read withdrawFee() on LootSkins yourself; the owner can change it at any time.

Excess value is NOT refunded — send exactly fee × count

The contract requires at least withdrawFee × tokenIds.length and keeps whatever you send above it. There is no refund path, unlike a marketplace purchase.

At the current fee of 0, send 0. If the fee is ever raised, compute the exact amount: read withdrawFee(), multiply by the number of ids in your call, and send precisely that.

You pay gas for the burn transaction itself regardless of the fee.

After the burn

A trade offer from a custody account arrives at your saved trade URL, containing the item.

Accept it in Steam. Nothing on LootFi's side can accept it for you — the same reason nothing can accept a deposit offer for you.

If the offer does not arrive promptly, the usual causes are that your trade URL was regenerated in Steam (which invalidates the saved one), your account temporarily cannot receive trades, or Steam is throttling. Withdrawals are tracked durably and retried; a delay is not a lost skin. See Withdrawal lifecycle and Troubleshooting.

Your returned item gets a fresh Steam trade cooldown

It arrived by trade, so Valve applies its usual holding period before you can trade it onward — including depositing it again. That is Steam's rule, not ours. See Trade protection.

What comes back

The same physical asset, not an equivalent one:

  • the same float value and exterior;
  • the same paint seed / pattern index;
  • the same applied stickers, patches, and charms, in the same slots;
  • the same name tag, if it had one;
  • the same StatTrak counter, at whatever value it held on deposit.

That is the point of the one-token-one-asset binding described in What is LootFi. There is no pool of interchangeable skins to draw a substitute from.

The item is not used, played with, or altered while in custody. Nothing is applied to it and nothing is removed.

Batches

Selecting several tokens burns them in one deTokenize call and returns them together. The same rules apply to every id in the call: you must be the direct owner of all of them, none may be listed, and all must be confirmed in custody. If any id fails a check, the whole transaction reverts and nothing is burned.

Next

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