If you sold, swapped, or moved any crypto in 2025, the way the IRS expects you to track its cost basis quietly changed underneath you. For years, most US taxpayers pooled everything together — all their Bitcoin as one lot, all their ETH as another, spread across every exchange and wallet they'd ever used. That "universal" habit stopped being allowed on January 1, 2025. From that date, basis has to be tracked wallet by wallet, account by account.
The change came with a one-time offer attached: a safe harbor, under Rev. Proc. 2024-28, that let you snapshot every wallet as of January 1, 2025, and formally allocate your existing basis across them. Most people never made that allocation deliberately — their software did something on their behalf, or nothing did — and the coins they sell in 2025 and beyond now inherit whatever basis story that snapshot happened to tell. If the story is wrong, the gains on your return are wrong, and unlike a lot of tax choices, this one was designed to be irrevocable.
This is not tax advice. It's an explanation of what the rules actually say, with links to the primary IRS documents, so you can figure out which questions to bring to a professional. For decisions about your own return, talk to one.
What changed on January 1, 2025
The mechanics live in the 2024 final regulations, T.D. 10000. Section 1.1012-1(j) of those regulations sets ordering rules for deciding which units of a digital asset you've sold when you hold several lots bought at different times or prices — and it applies to all acquisitions and dispositions of digital assets on or after January 1, 2025.
The key phrase is that the rules apply to units "held within a single wallet or account." That's the whole shift. Before, many taxpayers read the older IRS FAQs as permitting a universal or multi-wallet approach: identify a unit to sell, or apply first-in-first-out, across your entire holdings regardless of where the coins physically sat. Rev. Proc. 2024-28 spells out the transition, applying "the specific identification or FIFO rules to units held within a single wallet or account." Universal pooling is gone. Each wallet is now its own ledger, and if you don't specifically identify which units you're selling, the default is FIFO inside that one wallet — not across your whole portfolio.
This matters more than it sounds. Under universal accounting, it barely mattered which wallet a coin lived in; the pool absorbed everything. Under per-wallet accounting, the question becomes concrete: does this specific wallet hold documented basis for the specific coins it's selling? A coin sitting in the wrong wallet, with its basis stranded elsewhere, is exactly how a sale gets reported at a $0 cost basis — the phantom-gain problem we've written about at length elsewhere. The migration didn't create that failure mode; it made the wallet boundary the line where basis either connects or breaks.
The safe harbor and the snapshot
Because a hard switch would leave millions of taxpayers with basis records that no longer matched reality, the IRS issued Rev. Proc. 2024-28 alongside the regulations. Its stated purpose is to provide "a safe harbor under § 1012(c)(1) of the Internal Revenue Code on which taxpayers may rely to allocate unused basis of digital assets to digital assets held within each wallet or account of the taxpayer as of January 1, 2025."
Read that carefully. It doesn't hand you a basis figure. It lets you take the basis you already have — your "unused basis," the original cost of coins you still held and hadn't yet sold — and assign it to the wallets those coins actually sit in. The procedure defines "as of January 1, 2025" precisely: "immediately after the close of the taxpayer's day on December 31, 2024." That instant is your snapshot. However many units of each asset each wallet held at that moment is fixed, and your job is to reasonably match units of unused basis to those remaining units, wallet by wallet.
Three constraints are worth knowing before you assume your snapshot is fine.
First, the allocation is irrevocable. Section 4.02 requires a taxpayer to "treat any allocation under this revenue procedure as irrevocable for all purposes of section 1012." You don't get to redo it later because a different split would have produced a smaller gain.
Second, the safe harbor covers the allocation, not the amount. Section 5.04 states plainly that it "does not apply to the taxpayer's calculation of the amount of unused basis, which must be substantiated separately by the taxpayer pursuant to section 6001." It protects how you spread basis across wallets — but you still need real records proving what you paid. If your purchase history has gaps, the safe harbor doesn't paper over them.
Third, it runs asset by asset. The procedure treats Bitcoin and Ether as different types, and you apply the safe harbor separately to each.
Two ways to actually allocate basis per wallet
Rev. Proc. 2024-28 gives two methods, and the difference between them is mostly about how much control you keep — and how early you had to decide.
The first is a specific unit allocation. Here you point particular lots of unused basis at particular wallets: this batch bought in 2019 at $8 lives in my hardware wallet, that batch from 2021 at $60 lives on the exchange. It's complete, per the procedure, on the date your books and records first record the specific characteristics of the basis units assigned to each wallet. It's the precise option, and the one that lets you deliberately place high-basis or long-held lots where you want them.
The second is a global allocation. Instead of hand-placing lots, you write down a rule — an ordering — and let it distribute basis mechanically. The procedure's own example: identify the units of unused basis with the earliest acquisition dates, and for each date the highest basis, then allocate them successively to wallet A, then B, then C. The catch is timing. A global allocation "must describe the global allocation method in the taxpayer's books and records before January 1, 2025," and any method that lets you "exercise discretion on or after January 1, 2025" is explicitly not a valid global allocation. The rule, not your later judgment, does the sorting.
The deadlines differ too, and they're easy to miss. A specific unit allocation must be finished before the earlier of two events: your first sale, disposition, or transfer of that asset type on or after January 1, 2025, or the due date (including extensions) of your 2025 return. That first clause bites hard — if you sold any Bitcoin in early January 2025, your window to allocate Bitcoin basis effectively closed at that sale. A global allocation is more forgiving, allowing completion by the later of those two dates, but only if you described the method in writing before 2025 began.
What breaks during the migration
The gap between how these rules read on paper and how anyone's records actually look is where the trouble lives, and a few patterns show up again and again.
The first is that the snapshot was never really taken. Few taxpayers sat down on New Year's Eve 2024 and recorded unit counts per wallet. Their software may have carried a per-wallet position forward, or may have kept pooling in the background and only surfaced the problem when a 2025 sale produced a basis that didn't reconcile. If no deliberate, documented allocation exists, there's a real question about whether the safe harbor applies at all — and the procedure is clear that failing its requirements "may result in the assessment of additional tax, penalties, and interest."
The second is stranded basis. Per-wallet tracking gives a transfer between your own wallets a consequence it never used to have. Move a long-held coin from an exchange to cold storage without your software linking the two legs, and the basis stays behind in the wallet the coin left, while the receiving wallet shows a coin with no history. Coinbase and CoinTracker's 2026 Crypto Tax Readiness Report, a survey of 3,000 US users, found 71% had moved crypto between wallets or platforms — every one of those moves is a place a migration can strand basis. Koinly's forum has documented cases where long-held coins surfaced as short-term gains after a single transfer went unlinked across the switchover.
The third is confusion about what your broker will and won't do. The IRS acknowledged that many exchanges weren't technically ready on day one to accept specific-identification instructions, so it issued Notice 2025-7, later extended by Notice 2026-20. Together they let you make an adequate identification of broker-held units using alternative methods — including a standing order recorded in your own books and records — during a relief period that now runs from January 1, 2025 through December 31, 2026. Absent that identification, the broker applies FIFO within the account by default. The relief is real breathing room, but it's specific to units in a broker's custody; it doesn't reach coins in your own unhosted wallet, and it doesn't change how the safe harbor allocation works.
Layered on top is a reporting change everyone will feel next. Form 1099-DA, the new broker report for digital assets, covers gross proceeds for transactions on or after January 1, 2025, with cost basis reporting phasing in for transactions on or after January 1, 2026. So the first wave of these forms, for the 2025 tax year, largely shows what you sold for — not what you paid. The basis half of the equation is still on you, per wallet, and any mismatch with a broker's numbers is now visible to the IRS. When that basis field does start populating, it's often blank or wrong for self-custody and transferred-in coins — the same broken-chain patterns described above.
How to check your own migration
You don't need special tooling to sanity-check where you stand; an evening of careful looking catches most of the damage.
Start by asking whether an allocation was ever made. Look in your tax software or records for anything dated to the end of 2024 or the start of 2025 that assigns basis per wallet. If nothing exists, that's a conversation to have with a professional — not because you're necessarily out of compliance, but because you want to know which method, if any, you're relying on.
Next, reconcile unit counts at the snapshot. For your two or three largest holdings, confirm how many units each wallet held as of December 31, 2024, and check that the basis assigned to each wallet is attached to units that were actually there. A wallet showing basis for coins it didn't hold at the snapshot, or coins with no basis at all, is a flag.
Then trace your biggest 2025 disposals. Sort this year's sales by proceeds and inspect the largest few, asking where each wallet's basis came from. A large sale reporting a $0 or near-$0 basis, or an acquisition date that lines up with a transfer rather than a purchase, is the migration failing in a way that costs money — the same broken-chain pattern behind a missing purchase history warning.
Tracing those disposals by hand is the part people abandon halfway. Run my free scan to have your Ethereum wallets traced on-chain instead — read-only, no sign-up, with a tx-hash on every transfer that broke a basis chain.
Finally, don't assume the irrevocable choice was made in your favor. Because the allocation can't be redone, it's worth confirming before you file that the split you're stuck with reflects what you paid and how long you held. If it doesn't, that's a question for a professional now, while there's still room to substantiate your real basis under section 6001.
The reassuring part is that this is checkable. The basis either connects to real, documented acquisitions or it doesn't, and every break is visible if you know where to look. Finding them before filing beats discovering them in an IRS notice.
FAQ
Do I have to switch to per-wallet cost basis tracking for crypto?
Yes. Under the 2024 final regulations, the universal or multi-wallet method is no longer allowed for digital asset transactions on or after January 1, 2025. Basis and holding period are now determined wallet by wallet or account by account. If you don't specifically identify which units you're selling, the default is first-in-first-out applied within the individual wallet or account, not across your whole portfolio.
What is the safe harbor in Rev. Proc. 2024-28, and did I miss the deadline?
The safe harbor let you allocate your existing unused basis across your wallets as of a January 1, 2025 snapshot, so your per-wallet records had a clean starting point. The allocation had to be reasonable and made as of that date, though the deadline to finalize it depended on the method — a specific unit allocation had to be complete before your first 2025 sale of that asset or your 2025 return's due date, while a global allocation required writing the method down before 2025 began. Many people relied on it through their software without realizing it. Whether you can still rely on it, and whether it was done correctly, is worth confirming with a tax professional, because the allocation is irrevocable.
Does the safe harbor fix a missing cost basis?
No. The safe harbor only governs how you spread basis you already have across your wallets. Rev. Proc. 2024-28 says explicitly that it does not apply to calculating the amount of unused basis, which you must substantiate separately under section 6001. If your purchase records have gaps, allocating them per wallet doesn't fill those gaps — it just decides which wallet the gap lands in. The underlying missing-basis problem still has to be solved with real records.
This is not tax advice, and none of the above is a substitute for a qualified tax professional who can look at your actual records.
If you'd rather see whether your per-wallet basis actually holds together — every stranded lot surfaced before a broken allocation becomes a phantom gain on a filed return — Verilot Check reads your Ethereum wallets directly on-chain and shows which transfers between your own addresses broke the chain, with a tx-hash on every line. Free and read-only — no wallet connection, no sign-up, up to 5 wallets and 500 events per scan, Ethereum mainnet today. Run my free scan.