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.

Transaction classification

Every on-chain transaction is run through a deterministic priority chain of 24 protocol-specific classifiers. The first matching rule wins. No machine learning, no guesswork — the same input always produces the same output.

  1. 1Internal transfersMovements between your own wallets are detected automatically — no tax event
  2. 2Bridge detectionCross-chain bridges (Hop, Arbitrum, Optimism, Base, Polygon, ETH2 Beacon) are non-taxable transfers
  3. 3Uniswap V2 & V3Swaps, LP adds/removes, and fee collection — the most common DeFi protocol, fully supported
  4. 41inch V2–V6Aggregator swaps across all supported versions
  5. 5CurveMulti-pool swaps and CRV reward claims
  6. 6LidostETH staking deposits, rebase rewards, and wstETH wrapping
  7. 7Aave V1–V3Lending and borrowing operations — non-taxable (no disposal occurs)
  8. 8SynthetixFee claims, vesting rewards, synth exchanges, and sUSD minting
  9. 9Nexus MutualNXM bonding curve buy/sell transactions
  10. 10Balancer V1 & V2Pool swaps, joins, and exits via Vault and Exchange Proxy
  11. 11Rocket PoolrETH deposits and burns — liquid staking with exchange-rate tracking
  12. 12Coinbase cbETHcbETH liquid staking burns
  13. 13GMXSwaps and position operations on Arbitrum
  14. 14Rhino.fiOTC trading operations
  15. 15EthenaUSDe staking, sUSDe vault operations, and sENA reward distributions
  16. 16CoW ProtocolBatch-settled swaps via CoW Swap
  17. 17OpenSea SeaportNFT marketplace purchases and sales
  18. 18Treasure TroveArbitrum NFT marketplace — buy/sell via MAGIC token
  19. 19Uniswap V1Legacy exchange swaps
  20. 20GitcoinGrant donations treated as disposals at market value
  21. 21Mooniswap1inch AMM direct pool swaps
  22. 22Pattern matchingWETH wrap/unwrap, POAP mints, token transfers, approvals, contract deploys, and more
  23. 23Generic swap detectionCatches swaps on unrecognised DEXes by analysing token transfer patterns
  24. 24AI fallbackOptional — uses AI to classify anything the rules above didn’t catch
  25. 25Needs reviewAnything unmatched is flagged for you to review and edit manually
EthereumArbitrumOptimismBasePolygon

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

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

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

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.

Capital gains tax rates

PeriodBasic rateHigher rate
From 30 Oct 202418%24%
Before 30 Oct 202410%20%

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, 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.

HIGH confidence

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

MEDIUM confidence

Partial decoding or fallback price source used. Review recommended.

LOW confidence

Unable to decode amounts. Oracle pricing skipped entirely 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. 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.

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.
  • 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.
  • NFTs on OpenSea (Base) and Treasure Trove (Arbitrum) are supported. NFTs on other marketplaces may need manual review.
  • Five EVM chains supported: Ethereum, Arbitrum, Optimism, Base, and Polygon. Other chains (Solana, Avalanche, etc.) are not yet covered.
  • CEX transactions (Coinbase, Binance, Kraken) are not supported — ChainTax is on-chain only. You can import CEX data via Koinly CSV.

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 DeFi transaction is classified. Then scan your wallet for a full HMRC-ready report.