Every classification rule, price source, and tax calculation explained. No black boxes — if you or your accountant want to verify a number, start here.
Every on-chain transaction is run through a deterministic priority chain of protocol-specific classifiers. The first matching rule wins. No machine learning, no guesswork — the same input always produces the same output.
| Protocol | Classification | Confidence |
|---|---|---|
| Coinbase CSV | Disposal | |
| Binance CSV | Disposal | |
| Kraken CSV | Disposal |
| Protocol | Classification | Confidence |
|---|---|---|
| Uniswap V2 & V3 | Disposal | |
| Uniswap V1 | Disposal | |
| 1inch V2–V6 | Disposal | |
| Curve | Disposal | |
| Mooniswap | Disposal | |
| CoW Protocol | Disposal | |
| Generic swap detection | Disposal |
| Protocol | Classification | Confidence |
|---|---|---|
| Lido | Disposal | |
| Rocket Pool | Disposal | |
| Coinbase cbETH | Disposal | |
| ether.fi, Renzo, Kelp (LRT) | Disposal | |
| Ethena | Transfer | |
| Synthetix | Income | |
| Atlas Mine | Income |
| Protocol | Classification | Confidence |
|---|---|---|
| Aave V1–V3 | Transfer |
| Protocol | Classification | Confidence |
|---|---|---|
| OpenSea Seaport 1.5/1.6 | Disposal | |
| Treasure Trove | Disposal |
| Protocol | Classification | Confidence |
|---|---|---|
| Hop, Arbitrum, Optimism, Base, Polygon bridges | Transfer | |
| WETH wrap/unwrap | Transfer | |
| Fren Pet | Transfer | |
| Realm | Transfer | |
| Treasure Crafting | Transfer | |
| ETH2 Beacon deposit | Transfer |
| Protocol | Classification | Confidence |
|---|---|---|
| Nexus Mutual | Disposal | |
| Balancer V1 & V2 | Disposal | |
| GMX | Disposal | |
| Rhino.fi | Disposal | |
| Gitcoin | Disposal | |
| Compound V2 | Transfer |
| Protocol | Classification | Confidence |
|---|---|---|
| Pattern matching | Transfer | |
| Generic swap pattern matching | Disposal | |
| AI fallback | Disposal |
Centralised exchange transactions bypass the on-chain classification engine entirely. Upload a CSV and ChainTax handles the rest.
ChainTax sniffs the first 10 lines of your CSV to identify Coinbase, Binance, Kraken, Crypto.com App, or Koinly format automatically. No manual configuration needed.
Each exchange parser understands the source format — buys, sells, converts, rewards, fees. Events are created directly at high confidence without needing the on-chain engine.
Exchange trades feed into the same Section 104 cost basis pools as your on-chain activity. A Coinbase buy and a Uniswap swap of the same token share one pool — exactly as HMRC requires.
Three layers of dedup — within a CSV, across imports, and against existing data — prevent double-counting if you upload the same file twice or import overlapping date ranges.
You are always in control of your classification. Anything ChainTax got wrong can be edited — and anything the automatic engine missed can be added by hand.
Transactions imported from a CSV (or added by hand) have no blockchain, so the chain slot shows a short exchange tag instead — CB for Coinbase, BN for Binance, KR for Kraken, and CSV for Koinly.
An indigo Mnext to a type badge means you've edited the classification on that row. It's orthogonal to the confidence chip — a high-confidence row you've overridden still shows its original chip.
When you re-run auto-classification, any event you've edited is preserved — ChainTax never overwrites your work. Reset an override from the row's edit panel if you want the automatic result back.
Each classified transaction produces one of five event types. The tax treatment is determined by HMRC guidance, not by ChainTax.
| Type | Tax treatment | Examples |
|---|---|---|
| Disposal | Capital Gains Tax at 18% basic / 24% higher (from 30 Oct 2024) | Token swaps, sells, LP removals, liquid staking burns, NFT sales |
| Income | Income Tax at 20% / 40% / 45% | Staking rewards, LP fee collection, vesting claims, CRV rewards |
| Transfer | Non-taxable — no disposal occurs | Bridges, WETH wrap/unwrap, Aave supply/withdraw, game interactions |
| Liquidity | Disposal of the deposited tokens — gains count toward Capital Gains Tax; the LP token enters your pool at market value | LP deposits (tokens leave your pool, LP token enters) |
| Needs review | Flagged for you to check | Unrecognised contracts — you can edit the classification manually |
When you sell or swap a crypto asset, HMRC has strict rules for calculating your profit or loss. Most crypto tax tools get this wrong — especially the 30-day rule. ChainTax applies all three rules automatically in the correct order. See them applied to your own transactions in the UK crypto tax calculator.
Acquisitions and disposals on the same calendar day are matched first. This prevents buying and selling the same asset on the same day to manipulate cost basis.
If you dispose of an asset and re-acquire the same asset within 30 days, the disposal is matched against that re-acquisition — not the Section 104 pool.
Remaining disposals draw from the Section 104 pool — an average cost basis across all acquisitions of that asset. HMRC does not permit FIFO or LIFO.
All dates use UK time (Europe/London) to correctly handle BST boundaries near tax year ends. Losses are carried forward and offset against future gains down to the annual exempt amount only (TCGA 1992).
| Period | Basic rate | Higher rate | HMRC ref |
|---|---|---|---|
| From 30 Oct 2024 | 18% | 24% | Autumn Budget 2024 |
| Before 30 Oct 2024 | 10% | 20% | CRYPTO22100 |
Tax year 2024/25 is a split year — each disposal is taxed at the rate applicable on its disposal date. ChainTax checks every disposal against the 30 October 2024 boundary automatically. For 2025/26 and 2026/27 the 18%/24% rates apply to the whole year — only 2024/25 needed a split-year (Box 51) adjustment.
2024/25, 2025/26 & 2026/27: £3,000
2023/24: £6,000
2022/23: £12,300
Gas fees (including L2 base fees on Optimism and Base) are treated as an HMRC allowable cost (CRYPTO22150), reducing your taxable gain per disposal.
Every token is priced in GBP at its transaction date. The oracle follows this waterfall — each step is tried only if the previous one has no data.
Every event carries a confidence level so you know exactly how much to trust each number.
All amounts decoded from on-chain logs and priced from cache or primary source.
Partial decoding or fallback price source used. Worth a quick check.
Unable to fully decode amounts. Oracle pricing may be skipped to avoid guessing.
Staking rewards (Lido stETH rebases, Synthetix fee claims) and LP fee collections (Uniswap V3) are classified as miscellaneous income at fair market value on the date received (CRYPTO21200). Income tax is applied progressively when you provide your salary: 20% basic / 40% higher / 45% additional. Without salary data, a flat rate is applied at your selected band.
When your salary plus DeFi income crosses a band boundary, the calculation splits the income across both bands automatically — verify the band breakdown if you're close to a boundary.
Income events also enter the Section 104 acquisition pool at FMV — this means staking rewards you receive today affect your cost basis when you eventually sell that asset. DeFi income goes on SA100 (main return), not SA108.
From 2024/25, HMRC's SA108 form has dedicated crypto boxes (13.1–13.8) for the first time. ChainTax maps directly to every box — including the Box 51 split-year CGT rate adjustment that most tools miss.
| Box | Content | ChainTax source |
|---|---|---|
| 13.1 | Number of crypto disposals | Count of Disposal events |
| 13.2 | Total disposal proceeds | Sum of proceeds |
| 13.3 | Total allowable costs | Proceeds minus gain (HMRC-matched) |
| 13.4 | Total gains | Sum of positive gains |
| 13.5 | Total losses | Sum of negative gains (absolute) |
| 13.6 | Net gains or losses | 13.4 minus 13.5 (after loss offset) |
| 13.7 | Gains via real-time service | Usually zero |
| 13.8 | Tax paid on 13.7 | Usually zero |
| Box 51 | Split-year CGT rate adjustment | Gains split by 30 Oct 2024 boundary |
Unpriced disposals (where no market price was available) are excluded from all SA108 boxes and tracked separately. Read the full SA108 guide →
A report is a snapshot of one tax year. Alongside it, ChainTax keeps a live view of what you still hold, valued against the same Section 104 cost basis your report uses — so the two reconcile. Sign in and open Holdings to see your own.
Every token you still hold is priced at today’s GBP rate from the same oracle used across ChainTax, and set against its Section 104 pooled cost. The unrealised gain or loss on each position is simply value minus cost — never a guess.
Fungible tokens are valued live; NFTs are listed at their recorded cost basis only — ChainTax does not invent a floor price it can’t verify. A holding with no current market price is shown honestly as unpriced, not counted as a loss.
A daily snapshot records your portfolio value and cost basis from the day you start — there is no invented back-history. The chart is honest about having little to show on day one and fills in as the days pass.
Export your holdings to CSV, or hand your accountant a read-only, frozen snapshot via a revocable share link — the same sharing model as your report.
The holdings view is a live read on where you stand — not tax advice, and not a filing.
From your Holdings page you can model a hypothetical “what-if” disposal — see how selling some of a holding today would change your Capital Gains Tax position for the current tax year. It is a calculator you choose to run. Nothing is saved, nothing is filed, and ChainTax never tells you whether to buy or sell.
You pick an amount of a token you still hold. ChainTax estimates the proceeds at today’s price, works out the gain or loss, and shows the marginal effect on your current-year CGT and how much of your tax-free allowance it would use.
The hypothetical sale is appended to your real Section 104 pools and run through the sameHMRC matching your report uses — same-day, then the 30-day bed & breakfast rule, then the Section 104 pool. Because a today-dated disposal is chronologically last, it slots in after everything you have already done rather than reshuffling how your existing transactions were matched.
Units come from your synced holdings; the price is the latest available GBP price from the same oracle used across ChainTax (cache → Kraken → DefiLlama → CoinGecko). If a token has no current price it can’t be simulated.
It is not advice, and it is not a filing. Figures are estimates that assume the disposal happens now at the shown price — actual results depend on the real disposal date, price, and fees. Modelling the current tax year uses figures from an unlocked report for that year.
A simulation is a calculation tool, not tax or financial advice. Whether to dispose of an asset — and any timing around the 30-day bed & breakfast rule — is a decision for you and a qualified tax adviser. ChainTax does not recommend disposals and does not receive anything if you make one.
No tax tool is perfect. Here's what ChainTax cannot yet handle automatically — and what you should check manually or discuss with your accountant.
ChainTax is a tax calculation tool and does not provide financial, legal, or tax advice. The figures generated are estimates based on on-chain data and published HMRC guidance.
Always verify your figures with a qualified tax adviser before filing your Self Assessment return — every disposal shows its working, so they can check each number line by line.
Reference: HMRC Cryptoassets Manual (CRYPTO10000–CRYPTO100000)
Every rule, every price source, every tax calculation — now applied to your wallet. Scan a wallet free or try the transaction explainer without signing up.