Skip to content

Core concepts

Six terms carry most of the weight on this site. Each one is defined precisely here, because each one is routinely confused with something adjacent.

For a plain alphabetical list, see the Glossary.

Custody account

A Steam account, operated by LootFi, that holds deposited skins.

When you deposit, a custody account sends you the trade offer and receives your items. It keeps them for as long as a token backs them, and trades them back when someone burns that token.

What a custody account does not do:

  • It does not trade your items with anyone else.
  • It does not lend, stake, or list them on the Steam Community Market.
  • It does not open your cases or apply your stickers.

This is the trust assumption

A custody account is controlled by a private operator, not by a smart contract. Nothing on-chain can force it to return an item. The protocol makes custody auditable and misbehaviour visible, not impossible.

Details, without softening: Custody model and Trust & security.

This site deliberately does not publish which Steam accounts serve as custody accounts or how many there are. Always confirm an incoming trade offer against what the LootFi interface told you to expect, and never accept an offer you did not initiate.

Trade protection, escrow, and holds

Three different Steam mechanisms, all of which delay a freshly traded item, and all of which people call "the hold". They are not the same thing and they do not add up.

Trade protection is Valve's protection window on a completed trade. It applies to the trade itself, runs roughly seven days, and exists so a compromised account's trades can be reversed. During it, the item has left the sender and has not settled with the receiver.

Escrow (trade hold) is a per-account delay Valve imposes when an account does not meet its security requirements — most commonly, a Steam Mobile Authenticator that has not been active long enough. It is measured in days and reported by Steam on the trade offer itself.

Recent-authenticator hold is a longer hold Valve applies when an account's mobile authenticator was recently added or moved to a new device.

They run concurrently, so the wait is the MAX, not the sum

All three are windows measured from the same trade. An item is free when the longest of them expires — a 7-day protection window and a 5-day escrow do not make 12 days, they make 7.

The one that bites is the one you did not expect to apply. See Hold calculation for exactly how the unlock time is derived, and Escrow & holds for how to avoid escrow entirely.

The escrow on your side is yours to fix, and only yours. It is a property of the depositing account, reported by Steam, and no setting on LootFi's side shortens it. An account with a long-established mobile authenticator does not trigger it; a fresh one does. See Account requirements.

Token id

The unique uint256 that identifies your ERC-721 on Robinhood Chain.

It is not random and not sequential across the whole collection. It packs two things:

   tokenId = (category << 248) | sequence

   ┌────────┬──────────────────────────────────────────────┐
   │ 8 bits │                  248 bits                    │
   │category│                  sequence                    │
   └────────┴──────────────────────────────────────────────┘
     0..7      a per-category counter, allocated at mint

Two consequences follow, and both matter:

  1. The category is permanent. It is baked into the id at mint time and can never be corrected — not by an upgrade, not by an admin. This is why an item whose category cannot be determined confidently is held for review instead of guessed. See What you can deposit.
  2. A token id is never reused. Minting an existing id reverts on-chain, and the chain — not any off-chain record — is the authority on which ids exist.

Gun is category ordinal 0

If you are writing code that reads a category, test for absence explicitly. 0 is a real, extremely common category, and a truthiness check treats it as missing. The same trap applies to paintSeed: 0, which is a real seed.

Full encoding, including how to decode one yourself: Token IDs.

Fingerprint

An opaque identity string that binds one token to one physical Steam asset.

Think of it as the answer to "which exact item is this?" — stable for a given asset in a given inventory, and unique across the whole protocol under an enforced uniqueness constraint. Two deposits can never resolve to the same fingerprint, so one physical skin can never back two tokens.

The important subtlety: Steam reassigns an item's asset id when it changes hands, and it does not publish the post-trade id until the protection window ends. So a deposit's fingerprint is computed from the asset the custody account actually receives, not from the id the item had in your inventory. A deposit that Steam has not yet given a post-trade identity to waits — it is not fingerprinted against a placeholder, because a placeholder could collide with a real item later.

A fingerprint is an internal binding. It is not something you need to quote, and its format is not part of the integration surface. What you can rely on is the guarantee it enforces: one token, one asset.

Order

A signed, off-chain instruction that lets a specific token be bought at a specific price. Also called a listing.

An order is an EIP-712 typed-data structure containing the maker, the collection, the token id, the currency, the price, an expiry timestamp, and a nonce. You sign it in your wallet. Signing costs nothing and sends no transaction.

An order holds no funds and moves no tokens

Signing an order does not transfer your NFT into escrow, and it does not lock it. The token stays in your wallet, and you can still transfer it, and the order just becomes unfillable if you do.

The order only does anything when a buyer submits it on-chain together with payment. At that moment the marketplace contract re-checks everything — that you still own the token, that the marketplace is still approved, that the nonce is unused, that the order has not expired — and either settles atomically or reverts.

An order dies in any of these ways, and several of them need no action from you:

  • Its expiry passes.
  • It is filled (its nonce is consumed).
  • You cancel that nonce, or raise your minimum nonce past it.
  • You transfer the token away.
  • You revoke the marketplace's approval.

See List & sell to create one and Buy to fill one. Integrators: Sign an order.

Detokenize (burn)

Destroying a token to reclaim the skin behind it.

deTokenize(uint256[]) on LootSkins burns up to 50 tokens in one call. The burn is irreversible on-chain: the token is gone the moment the transaction mines. A Detokenized event names the owner and the ids, and that event is what drives the return trade offer.

Three constraints people trip over:

  • Direct owner only. An approved operator cannot burn on your behalf, by design — the return is routed to whoever the contract records as the burner, so that address has to be the real owner.
  • The item is not returned automatically to your inventory. A trade offer is sent to the trade URL you saved, and you have to accept it in Steam.
  • Burning is not "selling back". There is no counterparty and no payment. You end up with the skin, not with ETH.

See Withdraw your skin and Withdrawal lifecycle.

Next

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