BryanLabsBryanLabs
Tax

CARF and DAC8 summary

Exchanges in the EU (under DAC8, from 2026) and in other countries as they adopt CARF report each customer's yearly crypto totals to tax authorities. Here is your own wallet activity in the same shape, so the two can be compared line by line.

Defaulted to USD for United States, where exchanges report under Form 1099-DA (use the 1099-DA reconciliation for that). Values are the report's USD prices restated at the ECB reference rate for each day.

Why you would want this

A self-custody wallet never files a CARF or DAC8 report; only exchanges and brokers do. But what they file about you covers only what happened on their platform. When an exchange reports that you withdrew 500 ATOM, your tax authority sees that, not the staking rewards the ATOM earned in your wallet afterwards. This summary gives you (or your controller) the wallet side in the same element names and codes, so differences are easy to explain.

Amounts are the fair market value at each event, from the same daily prices as every other report, restated into your currency at the European Central Bank reference rate for that day (the previous business day's rate on weekends and holidays). Units are rounded to six decimals and amounts to two, as the schema specifies.

Where each event lands

On chainCARF
Staking rewards and validator commissionCryptoTransferIn, CARF502 Staking income
Receipt tagged airdropCryptoTransferIn, CARF501 Airdrop
Receipt tagged paymentCryptoTransferIn, CARF506 Sale of goods or services
Protocol income, or a receipt tagged income, gift or internal transferCryptoTransferIn, CARF508 Other
Any other receive or IBC transfer inCryptoTransferIn, CARF509 Unknown
Swap or NFT trade, the coin receivedCryptotoCryptoIn
Swap or NFT trade, the coin given upCryptotoCryptoOut
A payment to a protocol, or a send tagged payment or expenseCryptoTransferOut, CARF603 Purchase of goods or services
A send tagged gift, lost or internal transferCryptoTransferOut, CARF605 Other
Any other send or IBC transfer outCryptoTransferOut, CARF606 Unknown
Delegations, unbonding, protocol deposits, escrowNot reported: you still own them
Network feesListed per asset beside the CARF lines; CARF amounts are net of fees

The chain cannot tell whether a counterparty is an exchange, so plain transfers use the schema's own Unknown codes. Tag a row on the report and its code follows the tag. Bought with or sold for fiat (CryptoFiatIn and CryptoFiatOut) never happens on chain; those lines live only on the exchange's report.

Transfer in codes

  • CARF501 Airdrop
  • CARF502 Staking income
  • CARF503 Mining income
  • CARF504 Crypto loan
  • CARF505 Transfer from another RCASP
  • CARF506 Sale of goods or services
  • CARF507 Collateral
  • CARF508 Other
  • CARF509 Unknown

Transfer out codes

  • CARF601 Transfer to another RCASP
  • CARF602 Crypto loan
  • CARF603 Purchase of goods or services
  • CARF604 Collateral
  • CARF605 Other
  • CARF606 Unknown

Source: OECD Crypto-Asset Reporting Framework XML Schema (July 2025): User Guide for Tax Administrations, schema v1.5. EU member states use the same code lists for DAC8. Agents can call GET /api/tax/v1/carf?address=…&year=2026&currency=CHF; see the API docs. US filers want the 1099-DA reconciliation instead.