← Back to Blog

How CS2 Trade-Up Contracts Actually Work

TradeUpBot Team||6 min read

Trade-up contracts are one of the few ways to consistently extract value from the CS2 skin market without relying on case opening luck. But most people get the mechanics wrong, and that costs them money.

The Basic Mechanic

You feed 10 weapon skins of the same rarity tier into a trade-up contract, and you get back 1 skin of the next higher rarity. Mil-Spec inputs produce a Restricted output. Restricted inputs produce Classified. And so on up the chain.

Knife and glove trade-ups are the exception: you only need 5 Covert skins, and the output is a knife or glove from the matching case collection pool.

The key constraint: all 10 inputs must be the same rarity, but they can come from different collections. This is where strategy comes in. The output skin is randomly selected from the next-rarity skins in all collections represented by your inputs, weighted by how many inputs came from each collection.

If you use 7 skins from the Fracture Collection and 3 from the Prisma Collection, you have a 70% chance of getting a Fracture output and 30% chance of a Prisma output. That weighting is the foundation of every profitable trade-up.

The Float Formula

This is where most people's understanding breaks down. The output float is not simply the average of your input floats. The actual formula is:

output_float = (avg_adjusted_float * (max_float - min_float)) + min_float

Where avg_adjusted_float is the average of each input's adjusted float value:

adjusted_float = (input_float - input_min_float) / (input_max_float - input_min_float)

The min_float and max_float in the output formula refer to the output skin's float range, not the inputs. Most weapon skins have a range of 0.00 to 1.00, but many don't. An AWP | Asiimov has a minimum float of 0.18 and maximum of 1.00. A Glock-18 | Fade ranges from 0.00 to 0.08.

This means the same set of inputs can produce wildly different output floats depending on which output skin you get. A set of inputs that produces a 0.04 float on a standard 0.00-1.00 skin might produce a 0.21 float on an Asiimov — pushing it from Field-Tested into Battle-Scarred territory.

Why Condition Boundaries Matter

CS2 has five wear conditions with hard float boundaries:

  • Factory New: 0.00 - 0.07
  • Minimal Wear: 0.07 - 0.15
  • Field-Tested: 0.15 - 0.38
  • Well-Worn: 0.38 - 0.45
  • Battle-Scarred: 0.45 - 1.00

A skin at float 0.0699 is Factory New. A skin at float 0.0701 is Minimal Wear. The visual difference is invisible, but the price difference can be 2-5x or more. This is the single most important concept in trade-up profitability.

When you're selecting inputs, you're targeting a specific output float. If you need the output to be Factory New, you need that float under 0.07. Getting it to 0.0695 instead of 0.0705 can be the difference between a $200 output and a $50 output.

Collection Rules

The output skin must exist at the next rarity tier within the same collection as the input. If a collection has no skins at the next tier, you can't use skins from that collection in a trade-up. Each collection contributes its proportional share of possible outcomes.

This is why some collections are vastly more valuable for trade-ups than others. A collection where the next-tier skins are all high-value gives you good outcomes regardless of which one you hit. A collection with one expensive skin and four cheap ones is a gamble.

Common Mistakes

Using average market prices instead of actual listing prices. Steam Community Market averages include outliers and don't reflect what you'll actually pay. A skin listed at $8.50 average might have the specific float you need listed at $12.

Ignoring marketplace fees. CSFloat charges a 2% seller fee, DMarket has a 2% seller fee plus 2.5% buyer fee, and Skinport takes 12% from sellers. If your trade-up has a 5% expected profit margin, fees can flip it to a loss.

Not accounting for float ranges of the output skin. Running a trade-up calculator with generic float values and assuming the output will be Factory New, then getting Minimal Wear because the output skin has a non-standard float range.

Assuming listings will still be available. Marketplace listings are live inventory. By the time you calculate a trade-up, find all 10 inputs, and start buying, some may already be sold. Always verify before purchasing.

The Bottom Line

Trade-ups are deterministic math. Given the exact float values of your inputs and the float range of the output skin, you can calculate the exact output float before you commit. There's no hidden RNG in the float calculation — only in which output skin you receive when multiple collections are involved. The profitable trade-ups come from understanding this math and finding inputs where the numbers work in your favor.