utxoproof report local-first · static HTML · no JavaScript
DEMO — synthetic dummy data for illustration only. Not real transactions; figures are meaningless for filing.

Complete report

utxoproof full report 2023

The complete picture in one printable document: portfolio first, then tax, holdings, privacy, advisory and provenance detail. Print to PDF from your browser for filing or archiving.

Portfolio overview

The whole portfolio on one page: net worth, allocation across wallets, bank and exchange balances, credit-card liabilities, and the KYC split. Click an account for its UTXOs, then a UTXO for its provenance.

As of 2024-06-01 at 40000.00 EUR/BTC (illustrative demo curve). Click an account to drill into its UTXOs, then a UTXO for provenance.

186,700.00
net worth (EUR)
4.00000000
BTC held
160,000.00
BTC value (EUR)
26,700.00
cash (EUR)
67,500.00
BTC cost basis (EUR)
92,500.00
unrealized gain (EUR)
25%
bank-proven BTC value (40,000.00 EUR; candidates excluded)

Allocation

Ledger Nano — savings (43%)80,000.00Phone spending (43%)80,000.00ING savings (7%)12,500.00KBC checking (6%)11,000.00Kraken EUR balance (2%)3,200.00
160,000
50%
  • kyc — 80,000 EUR
  • mixed — 80,000 EUR

BTC value by KYC status (EUR)

BTC/EUR daily close, last 12 months

2025-10-142026-10-12High 98,425Low 52,694BTC/EUR daily close, last 12 months

Daily close in EUR/BTC from the vendored history (Kraken native, blockchain.info x ECB before Oct 2024).

Holdings by tax behavior

0
0%

Speculation beats buy-and-hold beats accumulating; seasoned means held ≥ 1 year

Holdings by funding channel

0
0%

How fiat entered the system: measured where evidenced, asserted where you tag it, unknown otherwise

Accounts

AccountTypeUTXOsBTCValue (EUR)Share
Ledger Nano — savingswallet12.0000000080,000.0042.8%
Phone spendingwallet22.0000000080,000.0042.8%
ING savingsbank00.0000000012,500.006.7%
KBC checkingbank00.0000000011,000.005.9%
Kraken EUR balanceexchange00.000000003,200.001.7%

Tax report 2023

What you owe for the year. Every disposal is valued at moving-average cost, gains are classified (goede huisvader / speculator) with the reasoning shown, and communal surcharge is applied. Use the totals to fill your return — and verify them with a tax adviser before filing.
Realised gain / loss 4337.67 EUR 5 disposals
Tax (goede huisvader) 1431.43 EUR before communal surcharge
Communal surcharge 100.20 EUR rate 7.00%
Total due 1531.63 EUR verify with a tax adviser

Generated 2026-11-05 17:02 UTC by utxoproof 0.1.0. Cost basis method: moving_average. Classification: goede huisvader. Communal surcharge rate: 7.00%.

Classification

Classification: goede_huisvader
Speculator score: 2 | Passive score: 2
  - 3 consecutive active years.
  - Dollar-cost averaging without leverage.

This is a heuristic aid. Consult a Belgian tax adviser before filing.

Annual summary

ItemEUR
Realised gain/loss (5 disposals)4337.67
Tax (goede huisvader)1431.43
Communal surcharge100.20
Total due1531.63

Disposals

DateTypeBTCPrice (EUR/BTC)Proceeds (EUR)Cost basis (EUR)Gain (EUR)Tax (EUR)
2023-03-20SELL0.5000000025000.0012495.009753.752741.25904.61
2023-05-05SELL0.2500000023000.005750.005037.32712.68235.18
2023-06-01SELL0.5000000018000.008990.0010074.64-1084.640.00
2023-08-20SELL0.1000000030000.002999.002086.48912.52301.13
2023-10-30SELL0.2000000027000.005400.004344.131055.87348.44

Holdings status

A snapshot of what you hold right now: inventory at moving-average cost, current value at the stated price, and the unrealized gain sitting in your wallets. Re-run with a fresh price any time.
Holdings 0.90000000 BTC as of 2026-11-05 17:02 UTC
Current value 36000.00 EUR 40000.00 EUR/BTC
Cost basis 19548.60 EUR average 21720.67 EUR/BTC
Unrealised gain / loss 16451.40 EUR illustrative demo curve

As of 2026-11-05 17:02 UTC at 40000.00 EUR/BTC (illustrative demo curve). Cost basis method: moving_average.

ItemValue
Holdings (BTC)0.90000000
Cost basis (EUR)19548.60
Average cost (EUR/BTC)21720.67
Current value (EUR)36000.00
Unrealized gain/loss (EUR)16451.40

All-time summary

Realised gains year by year plus what is still sitting in inventory at cost. The long view across all imported history.
Realised gains 6165.60 EUR all imported years
Remaining inventory 0.90000000 BTC unspent cost lots
Inventory cost 19548.60 EUR moving-average cost basis

Generated 2026-11-05 17:02 UTC by utxoproof 0.1.0. Realised gains per year plus remaining lot inventory (cost basis only).

Per-year realised gains

YearDisposalsGain (EUR)
202200.00
202354337.67
202411827.93
Total6165.60

Remaining inventory

BTCCost basis (EUR)
0.9000000019548.60

Privacy report

Where your coins stand on KYC. Every unspent output is tagged from its lineage; transactions that first combine KYC and non-KYC inputs are listed as originating mixing events so you can explain them.
kyc 1 unspent outputs
non_kyc 0 unspent outputs
mixed 2 unspent outputs
unknown 0 unspent outputs

Generated 2026-11-05 17:02 UTC by utxoproof 0.1.0. Unspent outputs by KYC status; mixing events highlighted (amber = originating).

KYC summary (unspent)

StatusUTXOs
kyc1
non_kyc0
mixed2
unknown0

Mixing events

TxidInputsKYC inNon-KYC inValue (sat)Originating
C211200000000True
D111150000000False

Advisory

Decision support per UTXO, ranked by tax cost if sold today. Flags mark cheap sales, expensive holds, borrow and estate candidates, privacy risks and speculation taint. Advice, not instructions.
Tax cost if sold today 30525.00 EUR all unspent outputs
Estate candidates 80000.00 EUR seasoned, low-tax lots
Borrow candidates 80000.00 EUR collateral without a sale

As of 2024-06-01 at 40000.00 EUR/BTC (illustrative demo curve). Ranked by tax cost if sold. Selling everything today would cost 30525.00 EUR in tax.

Per-UTXO table

Flags = what to do (recommendations). Tags = what it is (classification).

UTXOAddressBTCHolding (days)Cost (EUR)Value (EUR)Gain (EUR)Tax if sold (EUR)KYCWhat to doWhat it is
E:0—2.00000000109610000.0080000.0070000.0023100.00kycborrow_candidate,estate_candidate,hold_recommendedbuy-and-hold,exchange
D:0—1.5000000045845000.0060000.0015000.004950.00mixedbuy-and-hold,unknown,mixed,privacy-risk
C:1—0.5000000048612500.0020000.007500.002475.00mixedhold_recommendedbuy-and-hold,unknown,mixed,privacy-risk

Summary

ItemEUR
Total tax cost of liquidating30525.00
Estate-candidate value80000.00
Borrow-candidate value80000.00

Provenance C:1

Chain of custody for one UTXO, oldest step first: every hop valued in euros at its date, KYC status per step, mixing highlighted, and the original source evidence linked. The document you hand over when asked where a coin came from.
Current amount 0.50000000 BTC 20000.00 EUR at 40000.00/BTC
KYC status mixed 50% of value
Days held 517 since earliest traced acquisition
Bank-proven coverage 50% weakest tier allocated

Current amount: 0.50000000 BTC (20000.00 EUR at 40000.00/BTC). KYC status: mixed (50%). Days held since earliest traced acquisition: 517. Advisory flags: sell_friendly.

Saga coverage

50% of the target value reaches a bank statement through exact, approximate, or allocated links. Weakest tier in a covered path: allocated. Candidates never raise coverage.

Source UTXOShare of targetTier
A:050.00%allocated
B:050.00%unresolved

Provenance saga (all parents, oldest first)

StepDateBlockEventShareAttributed BTCFull BTCAttributed EURKYCEvidence
12023-01-01—Exchange purchase source50.00%0.250000001.000000005000.00kycA:0
22023-01-02—Coinbase reward (mining) source50.00%0.250000001.000000005250.00non_kycB:0
32023-02-01—Consolidation (2 inputs merged)100.00%0.500000000.5000000012500.00mixedC:1

Cross-domain evidence

Funding direction: bank debit → exchange EUR deposit → trade → BTC withdrawal → chain receipt. These are persisted evidence links; ambiguous legs stay unresolved.

LayerConfidenceFromToEURSatsReasonEvidence
bankexactbank:demo-kraken-bank.csv:2exchange:kraken:deposit:DEMO-D120,000.00—date +0d; amount EUR 20,000.00 exact; direction bank outflow<->deposit; reference DEMO-D1demo-kraken-bank.csv:2; demo-kraken-ledgers.csv:refid:DEMO-D1
exchangeallocatedexchange:kraken:deposit:DEMO-D1exchange:kraken:trade:DEMO-T120,000.00—FIFO EUR balance replaydemo-kraken-ledgers.csv:refid:DEMO-D1; demo-kraken-ledgers.csv:refid:DEMO-T1
exchangeallocatedexchange:kraken:trade:DEMO-T1exchange:kraken:withdrawal:DEMO-W1—100,000,000FIFO BTC balance replaydemo-kraken-ledgers.csv:refid:DEMO-T1; demo-kraken-ledgers.csv:refid:DEMO-W1
chainexactexchange:kraken:withdrawal:DEMO-W1A:0—100,000,000date -2d; amount 100000000 sats exactdemo-kraken-ledgers.csv:refid:DEMO-W1; A:0

Candidate links (never asserted)

No candidate links. Unmatched or ambiguous funding has no asserted edge.

Branch detail (consolidations)

StepParent UTXOBTCShareKYC
3A:01.0000000050.00%kyc
3B:01.0000000050.00%non_kyc

Fan-out siblings

StepSibling UTXOBTCKYC
3C:01.50000000mixed

Evidence references

  • A:0
  • demo-kraken-bank.csv:2
  • demo-kraken-ledgers.csv:refid:DEMO-D1
  • demo-kraken-ledgers.csv:refid:DEMO-T1
  • demo-kraken-ledgers.csv:refid:DEMO-W1

Attachments

FileTransactionNotePreview
2023/dummy-confirmation.pngCdummy withdrawal confirmation2023/dummy-confirmation.png

Provenance D:0

Chain of custody for one UTXO, oldest step first: every hop valued in euros at its date, KYC status per step, mixing highlighted, and the original source evidence linked. The document you hand over when asked where a coin came from.
Current amount 1.50000000 BTC 60000.00 EUR at 40000.00/BTC
KYC status mixed 50% of value
Days held 517 since earliest traced acquisition
Bank-proven coverage 50% weakest tier allocated

Current amount: 1.50000000 BTC (60000.00 EUR at 40000.00/BTC). KYC status: mixed (50%). Days held since earliest traced acquisition: 517. Advisory flags: hold_recommended.

Saga coverage

50% of the target value reaches a bank statement through exact, approximate, or allocated links. Weakest tier in a covered path: allocated. Candidates never raise coverage.

Source UTXOShare of targetTier
A:050.00%allocated
B:050.00%unresolved

Provenance saga (all parents, oldest first)

StepDateBlockEventShareAttributed BTCFull BTCAttributed EURKYCEvidence
12023-01-01—Exchange purchase source50.00%0.750000001.0000000015000.00kycA:0
22023-01-02—Coinbase reward (mining) source50.00%0.750000001.0000000015750.00non_kycB:0
32023-02-01—Consolidation (2 inputs merged)100.00%1.500000001.5000000037500.00mixedC:0
42023-03-01—Self-transfer (simple move between wallets)100.00%1.500000001.5000000045000.00mixedD:0

Cross-domain evidence

Funding direction: bank debit → exchange EUR deposit → trade → BTC withdrawal → chain receipt. These are persisted evidence links; ambiguous legs stay unresolved.

LayerConfidenceFromToEURSatsReasonEvidence
bankexactbank:demo-kraken-bank.csv:2exchange:kraken:deposit:DEMO-D120,000.00—date +0d; amount EUR 20,000.00 exact; direction bank outflow<->deposit; reference DEMO-D1demo-kraken-bank.csv:2; demo-kraken-ledgers.csv:refid:DEMO-D1
exchangeallocatedexchange:kraken:deposit:DEMO-D1exchange:kraken:trade:DEMO-T120,000.00—FIFO EUR balance replaydemo-kraken-ledgers.csv:refid:DEMO-D1; demo-kraken-ledgers.csv:refid:DEMO-T1
exchangeallocatedexchange:kraken:trade:DEMO-T1exchange:kraken:withdrawal:DEMO-W1—100,000,000FIFO BTC balance replaydemo-kraken-ledgers.csv:refid:DEMO-T1; demo-kraken-ledgers.csv:refid:DEMO-W1
chainexactexchange:kraken:withdrawal:DEMO-W1A:0—100,000,000date -2d; amount 100000000 sats exactdemo-kraken-ledgers.csv:refid:DEMO-W1; A:0

Candidate links (never asserted)

No candidate links. Unmatched or ambiguous funding has no asserted edge.

Branch detail (consolidations)

StepParent UTXOBTCShareKYC
3A:01.0000000050.00%kyc
3B:01.0000000050.00%non_kyc

Fan-out siblings

StepSibling UTXOBTCKYC
3C:10.50000000mixed

Evidence references

  • A:0
  • demo-kraken-bank.csv:2
  • demo-kraken-ledgers.csv:refid:DEMO-D1
  • demo-kraken-ledgers.csv:refid:DEMO-T1
  • demo-kraken-ledgers.csv:refid:DEMO-W1

Attachments

FileTransactionNotePreview
2023/dummy-confirmation.pngCdummy withdrawal confirmation2023/dummy-confirmation.png

Descriptor check

Self-check that this tool derives the same addresses as every other BIP84 wallet: descriptors and first addresses are recomputed live from the spec test vector and must match it exactly.

Addresses below are derived live by utxoproof.descriptors from the BIP84 spec-vector account xpub (zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs, fingerprint 73c5da0a). They must match the BIP84 vectors exactly.

Descriptors (Bitcoin Core import)

ChainDescriptor
externalwpkh([73c5da0a/84h/0h/0h]zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs/0/*)
changewpkh([73c5da0a/84h/0h/0h]zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs/1/*)

First addresses (mainnet)

PathAddress
m/84'/0'/0'/0/0bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu
m/84'/0'/0'/0/1bc1qnjg0jd8228aq7egyzacy8cys3knf9xvrerkf9g
m/84'/0'/0'/0/2bc1qp59yckz4ae5c4efgw2s5wfyvrz0ala7rgvuz8z
m/84'/0'/0'/1/0bc1q8c6fshw2dlwun7ekn9qwf37cu2rn755upcp6el