Last updated April 2026

How ChainTax works

Every classification rule, price source, and tax calculation explained. No black boxes — if you or your accountant want to verify a number, start here.

On-chain classification

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.

Exchanges

ProtocolClassificationConfidence
Coinbase CSVCapital GainHigh
Binance CSVCapital GainHigh
Kraken CSVCapital GainHigh

DEX / Swaps

ProtocolClassificationConfidence
Uniswap V2 & V3Capital GainHigh
Uniswap V1Capital GainHigh
1inch V2–V6Capital GainHigh
CurveCapital GainHigh
MooniswapCapital GainHigh
CoW ProtocolCapital GainHigh
Generic swap detectionCapital GainMedium

Staking / Yield

ProtocolClassificationConfidence
LidoCapital GainHigh
Rocket PoolCapital GainHigh
Coinbase cbETHCapital GainHigh
EthenaTransferHigh
SynthetixIncomeHigh
Atlas MineIncomeHigh

Lending

ProtocolClassificationConfidence
Aave V1–V3TransferHigh

NFT Marketplaces

ProtocolClassificationConfidence
OpenSea Seaport 1.5/1.6Capital GainHigh
Treasure TroveCapital GainHigh

Bridges / Transfers

ProtocolClassificationConfidence
Hop, Arbitrum, Optimism, Base, Polygon bridgesTransferHigh
WETH wrap/unwrapTransferHigh
Fren PetTransferHigh
RealmTransferHigh
Treasure CraftingTransferHigh
ETH2 Beacon depositTransferHigh

Other

ProtocolClassificationConfidence
Nexus MutualCapital GainHigh
Balancer V1 & V2Capital GainHigh
GMXCapital GainHigh
Rhino.fiCapital GainHigh
GitcoinCapital GainHigh
Compound V2TransferHigh

Fallbacks

ProtocolClassificationConfidence
Pattern matchingTransferHigh
Generic swap heuristicCapital GainMedium
AI fallbackCapital GainLow
EthereumArbitrumOptimismBasePolygon

Exchange CSV imports

Centralised exchange transactions bypass the on-chain classification engine entirely. Upload a CSV and ChainTax handles the rest.

Auto-detection

ChainTax sniffs the first 10 lines of your CSV to identify Coinbase, Binance, Kraken, or Koinly format automatically. No manual configuration needed.

Pre-classified by parser

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.

Shared S104 pools

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.

Deduplication

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.

Tax event types

Each classified transaction produces one of five event types. The tax treatment is determined by HMRC guidance, not by ChainTax.

TypeTax treatmentExamples
Capital GainCapital Gains Tax at 18% basic / 24% higher (from 30 Oct 2024)Token swaps, sells, LP removals, liquid staking burns, NFT sales
IncomeIncome Tax at 20% / 40% / 45%Staking rewards, LP fee collection, vesting claims, CRV rewards
TransferNon-taxable — no disposal occursBridges, WETH wrap/unwrap, Aave supply/withdraw, game interactions
LiquidityAdjusts your cost basis pool — no tax yetLP deposits (tokens leave your pool, LP token enters)
Needs reviewFlagged for you to checkUnrecognised contracts — you can edit the classification manually

HMRC matching rules

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.

1. Same-day rule

CRYPTO22200

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.

2. 30-day B&B rule

CRYPTO22250

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.

3. Section 104 pool

CRYPTO22200

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 (CRYPTO22800).

Capital gains tax rates

PeriodBasic rateHigher rateHMRC ref
From 30 Oct 202418%24%Autumn Budget 2024
Before 30 Oct 202410%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.

Annual exempt amount

2024/25 & 2025/26: £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.

How prices are sourced

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.

  1. 1Price cachePreviously fetched prices are stored to avoid redundant API calls.
  2. 2DefiLlamaFree historical token prices in USD, converted to GBP using ECB exchange rates via Frankfurter.app. FX rates are validated within a 0.5–2.0 sanity range.
  3. 3CoinGeckoFallback when DefiLlama has no data for a token. Uses the CoinGecko historical API.
  4. 4Graceful nullIf no price is available from any source, the event is flagged with an amber notice. It does not affect other calculations.

Confidence levels

Every event carries a confidence level so you know exactly how much to trust each number.

High

All amounts decoded from on-chain logs and priced from cache or primary source.

Medium

Partial decoding or fallback price source used. Review recommended.

Low

Unable to fully decode amounts. Oracle pricing may be skipped to avoid guessing.

DeFi income treatment

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 (CRYPTO40250). 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.

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.

SA108 mapping

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.

BoxContentChainTax source
13.1Number of crypto disposalsCount of Capital Gain events
13.2Total disposal proceedsSum of proceeds
13.3Total allowable costsProceeds minus gain (HMRC-matched)
13.4Total gainsSum of positive gains
13.5Total lossesSum of negative gains (absolute)
13.6Net gains or losses13.4 minus 13.5 (after loss offset)
13.7Gains via real-time serviceUsually zero
13.8Tax paid on 13.7Usually zero
Box 51Split-year CGT rate adjustmentGains 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 →

Known limitations

No tax tool is perfect. Here's what ChainTax cannot yet handle automatically — and what you should check manually or discuss with your accountant.

  • Aave interest (aTokens) accrues via balance changes, not individual transactions. If you earned aToken interest, you'll need to add it manually as an income event.
  • Lido stETH rebase rewards happen at protocol level and are rarely visible in your transaction history. Most Lido staking rewards aren't captured automatically.
  • Some protocols return ETH via internal calls (Nexus Mutual, Rocket Pool, cbETH). We recover these via debug tracing in most cases, but when trace data is unavailable the event is flagged for your review.
  • GMX V2 uses complex batched operations that can't be fully decoded. Position operations are flagged as lower confidence for review.
  • NFT cost basis is not tracked across purchases — if you buy an NFT and later sell it, the acquisition cost is conservatively set to zero. This means you may overtax slightly on NFT disposals.
  • Income tax uses progressive bands (20%/40%/45%) when you provide your salary. Without salary, a flat rate is used. If your combined income crosses bands, double-check the calculation.
  • Five EVM chains supported: Ethereum, Arbitrum, Optimism, Base, and Polygon. Other chains (Solana, Avalanche, etc.) are not yet covered.

Disclaimer

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. ChainTax is not liable for any errors in your tax return.

Reference: HMRC Cryptoassets Manual (CRYPTO10000–CRYPTO45700)

See it in practice

Try our free transaction explainer to see how any on-chain transaction is classified. Or import your exchange trades and scan your wallets for a full HMRC-ready report.