Wallet-by-wallet cost basis is a way of tracking basis in which each wallet holds its own set of tax lots. Units sold from a wallet are matched against the lots in that wallet, and moving units to another wallet moves their lots, with their acquisition dates and costs, along with them.
Before 2025 many holders tracked basis universally: every tax lot of a token, wherever it sat, was in one pool, and a sale from any wallet could be matched against any lot. Wallet-by-wallet tracking keeps a separate ledger of lots for each wallet. A sale from a wallet can only be matched against the lots that wallet holds, and the wallet's lots are only the units that were bought in it, received in it or transferred into it.
Transfers are what make the approach work or fail. When 1 BTC is moved from wallet A to wallet B, the record has to show which of wallet A's lots moved, and wallet B then holds that lot with its original date and cost basis. If wallet A held three lots and part of one moved, the record has to say which. Without that, wallet B has units with no lot behind them and wallet A has lots with no units.
The same logic applies to custodial accounts; see account-by-account cost basis. The two together are the wallet or account level at which the current rules operate.
Under Regulations section 1.1012-1(j), for digital asset units acquired or disposed of on or after January 1, 2025, units are identified within the wallet or account that holds them. A sale from an unhosted wallet is matched against lots in that wallet, by FIFO unless the taxpayer makes an adequate identification in their own books and records no later than the sale. The lowest-cost lot in the portfolio is irrelevant to a sale from a wallet that does not hold it.
The transition from a universal pool is governed by Revenue Procedure 2024-28. Basis that had not been attached to units wallet by wallet, called unattached basis, is allocated to the units held in each wallet as of January 1, 2025 under a reasonable allocation method that the taxpayer records. The allocation is what gives each wallet its opening set of lots; sales in 2025 and later run against those lots.
From that point every transfer between the holder's wallets has to be recorded as a movement of identified lots. The units keep their basis and their holding period, but only if the record shows which lots moved. A wallet whose lots cannot be traced back to an acquisition or a recorded allocation has units whose basis cannot be substantiated.
A holder moves 0.5 BTC of a 2 BTC holding from a cold wallet to an exchange to sell, without recording which lots moved. The tax software assigns the cheapest lot to the exchange sale, and the cold wallet's own ledger still shows that lot in place. The same low basis is used twice, once now and again when the cold wallet sells, and the basis that should have been consumed is never used at all.
Read our Universal vs Wallet-Based Cost Tracking
CountDeFi provides done-for-you crypto tax accounting, including per-wallet lot ledgers, transfer matching between wallets and the allocation of pre-2025 basis to wallets. See pricing.