Naar hoofdinhoud springen

Kant-en-klare Beancount crypto-transactietemplates

Invulbare Beancount-templates, elk met een laadbaar voorbeeld, voor crypto-aankopen, verkopen, swaps, transfers, staking, DeFi-leningen, mining en airdrops.

Deze gids biedt praktische Beancount-sjablonen en praktijkvoorbeelden voor veelvoorkomende cryptocurrency-scenario's. Kopieer en pas deze sjablonen aan voor uw eigen crypto-boekhouding.

Hoe lees je deze blokken​

Elk omkaderd blok hieronder is een van drie dingen, en ze zijn niet onderling uitwisselbaar:

  • Sjablonen bevatten [TUSSEN_HAAKJES]-plaatsaanduidingen en YYYY-MM-DD-datums. Ze worden niet geladen totdat u echte waarden invult — de haakjes zijn geen Beancount-syntaxis.
  • Voorbeelden staan direct onder hun sjabloon, hebben echte datums en bedragen, en zijn geschreven om te laden. Elk voorbeeld vereist nog steeds dat de rekeningen die het raakt geopend zijn, waarvoor het Sjabloon voor Rekeningstructuur hieronder dient. De enige uitzondering is het reconciliatieblok, dat saldi verifieert die alleen uw eigen grootboek kan vervullen.
  • Het Flash Loan Arbitrage-blok is pseudocode, en is als zodanig gelabeld waar het voorkomt.

Twee conventies lopen door alle blokken heen:

  • Inkomstenrekeningen bevatten creditposten, dus ze zijn negatief. Een gerealiseerde winst is een negatieve boeking naar Income:CapitalGains:…; een gerealiseerd verlies is een positieve boeking naar Expenses:CapitalLoss:…. Dit omdraaien is de meest voorkomende manier waarop een crypto-boeking niet in balans raakt.
  • Een vergoeding wordt één keer als kosten geboekt en één keer als vermindering van kasgeld. De brutopbrengst gaat naar de kasrekening, de vergoeding gaat er weer uit, en het verschil is wat daadwerkelijk op uw rekening terechtkomt.

Verken een live cryptocurrency-voorbeeldgrootboek:

Cryptocurrency Voorbeeldgrootboek in een nieuw tabblad openen

Basissjabloon voor opzet​

Sjabloon voor rekeningstructuur​

; =============================================================================
; CRYPTOCURRENCY ACCOUNT SETUP TEMPLATE
; =============================================================================
 
; Bank Accounts
1970-01-01 open Assets:Checking
 
; Exchange Accounts
1970-01-01 open Assets:Crypto:Coinbase:USD
1970-01-01 open Assets:Crypto:Coinbase:BTC
1970-01-01 open Assets:Crypto:Coinbase:ETH
1970-01-01 open Assets:Crypto:Binance:USD
1970-01-01 open Assets:Crypto:Binance:BTC
1970-01-01 open Assets:Crypto:Binance:ETH
1970-01-01 open Assets:Crypto:Binance:BNB
1970-01-01 open Assets:Crypto:Binance:ADA
 
; On-Chain and Mining Accounts
1970-01-01 open Assets:Crypto:Ethereum:ETH
1970-01-01 open Assets:Crypto:Polygon:ETH
1970-01-01 open Assets:Crypto:Mining:BTC
 
; Wallet Accounts
1970-01-01 open Assets:Crypto:Wallet:Ledger:BTC
1970-01-01 open Assets:Crypto:Wallet:Ledger:ETH
1970-01-01 open Assets:Crypto:Wallet:MetaMask:ETH
1970-01-01 open Assets:Crypto:Wallet:MetaMask:USDC
1970-01-01 open Assets:Crypto:Wallet:MetaMask:UNI
 
; DeFi Protocol Accounts
1970-01-01 open Assets:DeFi:Uniswap:ETH-USDC-LP
1970-01-01 open Assets:DeFi:Compound:CUSDC
1970-01-01 open Assets:Staking:Ethereum:ETH
 
; Income Accounts
1970-01-01 open Income:Crypto:Staking:ETH
1970-01-01 open Income:Crypto:Mining:BTC
1970-01-01 open Income:Crypto:Airdrops
1970-01-01 open Income:Crypto:DeFi:Yield
1970-01-01 open Income:CapitalGains:Crypto
1970-01-01 open Income:CapitalGains:LongTerm
 
; Expense Accounts
1970-01-01 open Expenses:Crypto:Fees:Trading
1970-01-01 open Expenses:Crypto:Fees:Network
1970-01-01 open Expenses:Crypto:Fees:Withdrawal
1970-01-01 open Expenses:Crypto:Bridge:Fees
1970-01-01 open Expenses:Crypto:Mining:Electricity
1970-01-01 open Expenses:CapitalLoss:Crypto
 
; Commodity Definitions
1970-01-01 commodity BTC
  name: "Bitcoin"
  asset-class: "cryptocurrency"
 
1970-01-01 commodity ETH
  name: "Ethereum"
  asset-class: "cryptocurrency"
 
1970-01-01 commodity USDC
  name: "USD Coin"
  asset-class: "stablecoin"
 
; Compound writes this receipt token "cUSDC", but a Beancount commodity
; and every account component must start with a capital letter or a digit,
; so the ledger spells it CUSDC and keeps the display name in metadata.
1970-01-01 commodity CUSDC
  name: "cUSDC (Compound USD Coin)"
  asset-class: "defi-receipt"

Handelssjablonen​

Basis aankoop van cryptocurrency​

; Template: Buy cryptocurrency on exchange
YYYY-MM-DD * "Buy [AMOUNT] [CRYPTO] on [EXCHANGE]"
  Assets:Crypto:[EXCHANGE]:[CRYPTO]     [AMOUNT] [CRYPTO] {[PRICE] USD}
  Assets:Crypto:[EXCHANGE]:USD         -[TOTAL_COST] USD
  Expenses:Crypto:Fees:Trading          [FEE] USD
  Assets:Crypto:[EXCHANGE]:USD         -[FEE] USD
 
; Example: Buy 1 BTC on Coinbase
2024-01-15 * "Buy 1 BTC on Coinbase"
  Assets:Crypto:Coinbase:BTC      1.0 BTC {45000.00 USD}
  Assets:Crypto:Coinbase:USD  -45000.00 USD
  Expenses:Crypto:Fees:Trading    50.00 USD
  Assets:Crypto:Coinbase:USD     -50.00 USD

Verkoop van cryptocurrency​

; Template: Sell cryptocurrency on exchange
YYYY-MM-DD * "Sell [AMOUNT] [CRYPTO] on [EXCHANGE]"
  Assets:Crypto:[EXCHANGE]:[CRYPTO]    -[AMOUNT] [CRYPTO] {[COST_BASIS] USD} @ [SALE_PRICE] USD
  Assets:Crypto:[EXCHANGE]:USD          [GROSS_PROCEEDS] USD
  Expenses:Crypto:Fees:Trading          [FEE] USD
  Assets:Crypto:[EXCHANGE]:USD         -[FEE] USD
  Income:CapitalGains:Crypto           -[GAIN] USD  ; a loss is a positive Expenses:CapitalLoss:Crypto instead
 
; Example: Sell 0.5 BTC with a gain
2024-03-20 * "Sell 0.5 BTC on Coinbase"
  Assets:Crypto:Coinbase:BTC     -0.5 BTC {45000.00 USD} @ 48000.00 USD
  Assets:Crypto:Coinbase:USD   24000.00 USD  ; gross proceeds, 0.5 * 48,000.00
  Expenses:Crypto:Fees:Trading    30.00 USD
  Assets:Crypto:Coinbase:USD     -30.00 USD  ; the fee leaves the same cash account
  Income:CapitalGains:Crypto   -1500.00 USD  ; 24,000.00 proceeds - 22,500.00 basis

De vervreemde partij is $ 22.500,00 waard tegen kostprijs, de verkoop brengt $ 24.000,00 bruto op, en $ 30,00 daarvan gaat naar de beurs — dus $ 23.970,00 aan kasgeld komt binnen en $ 1.500,00 aan winst wordt gerealiseerd. Verreken de vergoeding niet met de winst: de vergoeding is al een kost, en deze een tweede keer aftrekken is wat de transactie uit balans brengt.

Crypto-naar-crypto-handel​

; Template: Trade one crypto for another
YYYY-MM-DD * "Trade [AMOUNT1] [CRYPTO1] for [AMOUNT2] [CRYPTO2]"
  Assets:Crypto:[EXCHANGE]:[CRYPTO1]   -[AMOUNT1] [CRYPTO1] {[COST_BASIS] USD}
  Assets:Crypto:[EXCHANGE]:[CRYPTO2]    [AMOUNT2] [CRYPTO2] {[NEW_PRICE] USD}
  Income:CapitalGains:Crypto           -[GAIN] USD  ; taxable event; a loss is a positive Expenses:CapitalLoss:Crypto
  Expenses:Crypto:Fees:Trading          [FEE] USD
  Assets:Crypto:[EXCHANGE]:USD         -[FEE] USD
 
; Example: Trade BTC for ETH
2024-02-10 * "Trade 1 BTC for 20 ETH on Binance"
  Assets:Crypto:Binance:BTC     -1.0 BTC {46000.00 USD}
  Assets:Crypto:Binance:ETH      20 ETH {2400.00 USD}
  Income:CapitalGains:Crypto  -2000.00 USD  ; 48,000.00 received - 46,000.00 basis
  Expenses:Crypto:Fees:Trading    40.00 USD
  Assets:Crypto:Binance:USD      -40.00 USD

Een crypto-naar-crypto-handel vervreemdt het eerste goed, dus realiseert winst precies zoals een verkoop voor kasgeld: 20 ETH verworven tegen $ 2.400,00 is $ 48.000,00 aan ontvangen waarde tegen $ 46.000,00 aan BTC-basis. De $ 40,00 vergoeding wordt in kasgeld betaald en verandert de winst niet.

Overboeking-sjablonen​

Overboeking van exchange naar wallet​

; Template: Transfer crypto from exchange to wallet
YYYY-MM-DD * "Transfer [AMOUNT] [CRYPTO] from [EXCHANGE] to [WALLET]"
  Assets:Crypto:[EXCHANGE]:[CRYPTO]      -[AMOUNT] [CRYPTO] {[COST_BASIS] USD}
  Assets:Crypto:Wallet:[WALLET]:[CRYPTO]  [AMOUNT] [CRYPTO] {[COST_BASIS] USD}
  Expenses:Crypto:Fees:Withdrawal         [FEE] [CRYPTO] {[COST_BASIS] USD}
  Assets:Crypto:[EXCHANGE]:[CRYPTO]      -[FEE] [CRYPTO] {[COST_BASIS] USD}
 
; Example: Transfer BTC to Ledger
2024-01-20 * "Transfer 1 BTC from Coinbase to Ledger"
  Assets:Crypto:Coinbase:BTC      -1.0 BTC {45000.00 USD}
  Assets:Crypto:Wallet:Ledger:BTC  1.0 BTC {45000.00 USD}
  Expenses:Crypto:Fees:Withdrawal  0.0005 BTC {45000.00 USD}
  Assets:Crypto:Coinbase:BTC      -0.0005 BTC {45000.00 USD}

Een overboeking is geen vervreemding, dus realiseert niets: dezelfde {45000.00 USD} kostprijs reist mee met de munten en de ontvangende rekening erft de basis. Twee gevolgen volgen hieruit. De opnamevergoeding wordt in BTC betaald en wordt tegen diezelfde kostprijs als kost geboekt, dus realiseert ook geen winst — als uw behandeling anders zegt, prijs de vergoeding dan met @ en voeg een winstboeking toe. En de verzendende rekening moet al 1,0005 BTC tegen die exacte kostprijs bevatten, niet 1,0, omdat de vergoeding uit dezelfde partij komt. Een vermindering zonder overeenkomende partij slaagt er niet in te boeken, hoe goed de totalen ook kloppen.

Overboeking tussen exchanges​

; Template: Transfer between exchanges
YYYY-MM-DD * "Transfer [AMOUNT] [CRYPTO] from [EXCHANGE1] to [EXCHANGE2]"
  Assets:Crypto:[EXCHANGE1]:[CRYPTO]  -[AMOUNT] [CRYPTO] {[COST_BASIS] USD}
  Assets:Crypto:[EXCHANGE2]:[CRYPTO]   [AMOUNT] [CRYPTO] {[COST_BASIS] USD}
  Expenses:Crypto:Fees:Network         [FEE] [CRYPTO] {[COST_BASIS] USD}
  Assets:Crypto:[EXCHANGE1]:[CRYPTO]  -[FEE] [CRYPTO] {[COST_BASIS] USD}
 
; Example: Transfer ETH from Coinbase to Binance
2024-02-05 * "Transfer 10 ETH from Coinbase to Binance"
  Assets:Crypto:Coinbase:ETH   -10 ETH {2500.00 USD}
  Assets:Crypto:Binance:ETH     10 ETH {2500.00 USD}
  Expenses:Crypto:Fees:Network  0.01 ETH {2500.00 USD}
  Assets:Crypto:Coinbase:ETH   -0.01 ETH {2500.00 USD}

Staking-sjablonen​

Ethereum-staking​

; Template: Stake ETH
YYYY-MM-DD * "Stake [AMOUNT] ETH"
  Assets:Crypto:Wallet:MetaMask:ETH    -[AMOUNT] ETH {[PRICE] USD}
  Assets:Staking:Ethereum:ETH           [AMOUNT] ETH {[PRICE] USD}
  Expenses:Crypto:Fees:Network          [FEE] ETH {[PRICE] USD}
  Assets:Crypto:Wallet:MetaMask:ETH    -[FEE] ETH {[PRICE] USD}
 
; Example: Stake 32 ETH
2024-01-10 * "Stake 32 ETH on Ethereum 2.0"
  Assets:Crypto:Wallet:MetaMask:ETH    -32 ETH {2500.00 USD}
  Assets:Staking:Ethereum:ETH           32 ETH {2500.00 USD}
  Expenses:Crypto:Fees:Network          0.01 ETH {2500.00 USD}
  Assets:Crypto:Wallet:MetaMask:ETH    -0.01 ETH {2500.00 USD}

Staking-beloningen​

; Template: Receive staking rewards
YYYY-MM-DD * "[CRYPTO] Staking Rewards - [PERIOD]"
  Assets:Staking:[PROTOCOL]:[CRYPTO]    [AMOUNT] [CRYPTO] {[PRICE] USD}
  Income:Crypto:Staking:[CRYPTO]       -[VALUE] USD  ; [VALUE] = [AMOUNT] * [PRICE]
 
; Example: ETH staking rewards
2024-02-01 * "ETH Staking Rewards - January"
  Assets:Staking:Ethereum:ETH     0.08 ETH {2600.00 USD}
  Income:Crypto:Staking:ETH     -208.00 USD  ; 0.08 * 2,600.00

Een beloning is inkomen ontvangen in natura, dus de twee boekingen beschrijven dezelfde gebeurtenis van beide kanten: 0,08 ETH arriveert met een basis van $ 2.600,00 per eenheid, en de overeenkomstige $ 208,00 aan inkomen is een creditpost — negatief. De {2,600.00 USD} is een externe prijs die u zelf moet aanleveren; Beancount registreert die, haalt die niet op. Noteer die van de beurs of index die u daadwerkelijk gebruikt, en houd dezelfde bron het hele jaar aan.

Die $ 208,00 is ook vanaf nu de kostprijs van de beloning. Wanneer u de 0,08 ETH uiteindelijk verkoopt, is alleen de beweging sinds deze datum een winst — de $ 208,00 is al als inkomen belast en mag niet tweemaal worden erkend. Of het inkomen belastbaar is bij ontvangst of bij vervreemding verschilt per jurisdictie; het grootboek registreert de feiten in beide gevallen.

DeFi-sjablonen​

Uniswap-liquiditeitsverschaffing​

; Template: Add liquidity to Uniswap pool
YYYY-MM-DD * "Add liquidity to [TOKEN1]-[TOKEN2] pool"
  Assets:Crypto:Wallet:MetaMask:[TOKEN1]    -[AMOUNT1] [TOKEN1] {[PRICE1] USD}
  Assets:Crypto:Wallet:MetaMask:[TOKEN2]    -[AMOUNT2] [TOKEN2] {[PRICE2] USD}
  Assets:DeFi:Uniswap:[TOKEN1]-[TOKEN2]-LP   [LP_AMOUNT] [LP_TOKEN] {[LP_PRICE] USD}
  Expenses:Crypto:Fees:Network               [FEE] ETH {[ETH_PRICE] USD}
  Assets:Crypto:Wallet:MetaMask:ETH         -[FEE] ETH {[ETH_PRICE] USD}
 
; Example: Add ETH-USDC liquidity
2024-01-15 * "Add liquidity to ETH-USDC pool"
  Assets:Crypto:Wallet:MetaMask:ETH     -10 ETH {2500.00 USD}
  Assets:Crypto:Wallet:MetaMask:USDC  -25000 USDC @ 1.00 USD
  Assets:DeFi:Uniswap:ETH-USDC-LP        100 UNI-V3-ETH-USDC {500.00 USD}
  Expenses:Crypto:Fees:Network          0.02 ETH {2500.00 USD}
  Assets:Crypto:Wallet:MetaMask:ETH    -0.02 ETH {2500.00 USD}

Reconcilieer dit één goed tegelijk: $ 25.000,00 aan ETH plus $ 25.000,00 aan USDC gaat eruit, $ 50.000,00 aan LP-token komt erin, en de gasvergoeding verplaatst $ 50,00 aan ETH van de wallet naar een kost. Het stablecoin-deel draagt @ 1.00 USD omdat het zonder kostprijs wordt aangehouden — zonder de prijsannotatie is het gewicht 25.000 USDC, wat geen dollars kan wegstrepen. In veel jurisdicties is het storten in een pool zelf een vervreemding van beide tokens; deze boeking draagt de basis bewust mee, dus voeg de winstboekingen toe als uw behandeling die vereist.

Compound-leningen​

; Template: Supply assets to Compound
YYYY-MM-DD * "Supply [AMOUNT] [TOKEN] to Compound"
  Assets:Crypto:Wallet:MetaMask:[TOKEN]  -[AMOUNT] [TOKEN] @ [TOKEN_PRICE] USD
  Assets:DeFi:Compound:C[TOKEN]           [C_AMOUNT] C[TOKEN] {[C_PRICE] USD}
  Expenses:Crypto:Fees:Network            [FEE] ETH {[ETH_PRICE] USD}
  Assets:Crypto:Wallet:MetaMask:ETH      -[FEE] ETH {[ETH_PRICE] USD}
 
; Example: Supply USDC to Compound
2024-01-20 * "Supply 10000 USDC to Compound"
  Assets:Crypto:Wallet:MetaMask:USDC  -10000 USDC @ 1.00 USD
  Assets:DeFi:Compound:CUSDC             500 CUSDC {20.00 USD}
  Expenses:Crypto:Fees:Network          0.008 ETH {2500.00 USD}
  Assets:Crypto:Wallet:MetaMask:ETH    -0.008 ETH {2500.00 USD}

Twee dingen zorgen dat deze laadt. Het USDC-deel draagt @ 1.00 USD zodat beide zijden van de ruil in dezelfde valuta wegen — zonder dat ziet Beancount $ 10.000,00 aan CUSDC verschijnen tegen 10.000 eenheden USDC die verdwijnen, wat verschillende goederen zijn en niet wegstrepen. En het ontvangsttoken is CUSDC, niet cUSDC: een kleine beginletter is een lexerfout in zowel een rekeningcomponent als een goedsymbool, hoe het protocol het ook spelt in zijn eigen interface.

Mining-sjablonen​

Mining-beloningen​

; Template: Receive mining rewards
YYYY-MM-DD * "[CRYPTO] Mining Reward - [POOL/SOLO]"
  Assets:Crypto:Mining:[CRYPTO]     [AMOUNT] [CRYPTO] {[PRICE] USD}
  Income:Crypto:Mining:[CRYPTO]    -[VALUE] USD  ; [VALUE] = [AMOUNT] * [PRICE]
 
; Example: Bitcoin mining reward
2024-01-15 * "BTC Mining Reward - Slush Pool"
  Assets:Crypto:Mining:BTC    0.01 BTC {45000.00 USD}
  Income:Crypto:Mining:BTC  -450.00 USD  ; 0.01 * 45,000.00

Mining-uitgaven​

; Template: Mining operational expenses
YYYY-MM-DD * "Mining [EXPENSE_TYPE] - [PERIOD]"
  Expenses:Crypto:Mining:[EXPENSE_TYPE]  [AMOUNT] USD
  Assets:Checking                       -[AMOUNT] USD
 
; Example: Mining electricity costs
2024-01-31 * "Mining Electricity - January"
  Expenses:Crypto:Mining:Electricity  800.00 USD
  Assets:Checking                    -800.00 USD

Airdrop-sjablonen​

Token-airdrops​

; Template: Receive token airdrop
YYYY-MM-DD * "[TOKEN] Airdrop from [PROJECT]"
  Assets:Crypto:Wallet:[WALLET]:[TOKEN]  [AMOUNT] [TOKEN] {[PRICE] USD}
  Income:Crypto:Airdrops                -[VALUE] USD  ; [VALUE] = [AMOUNT] * [PRICE]
 
; Example: UNI token airdrop
2024-03-01 * "UNI Airdrop from Uniswap"
  Assets:Crypto:Wallet:MetaMask:UNI   400 UNI {8.00 USD}
  Income:Crypto:Airdrops            -3200.00 USD  ; 400 * 8.00

Net als bij een stakingsbeloning wordt de erkende waarde van de airdrop de kostprijs ervan. Registreer de prijs die u kunt verdedigen — de eerste liquide notering van het token, van een bron die u benoemt — in plaats van een rond getal.

Geavanceerde sjablonen​

Flashlening-arbitrage​

Dit blok is pseudocode, geen sjabloon. Het schetst de volgorde van waardebewegingen binnen een flash loan. Het laadt niet, zelfs niet nadat u waarden hebt ingevuld, omdat de lege regels tussen de groepen de transactie beëindigen — Beancount rapporteert een syntaxisfout op de boekingen die erop volgen. Registreer een echte flash loan als één enkele transactie zonder lege regels (label de delen met ingesprongen ;-commentaar), en laat de tussenliggende delen weg die binnen hetzelfde blok tot nul uitkomen.

Pseudocode: flash loan arbitrage
 
  borrow      Assets:Crypto:Temp:FlashLoan       +[LOAN_AMOUNT] [TOKEN]
              Liabilities:DeFi:[PROTOCOL]:Flash  -[LOAN_AMOUNT] [TOKEN]
 
  execute     Assets:Crypto:Temp:FlashLoan       -[LOAN_AMOUNT] [TOKEN]
              Assets:Crypto:Temp:Arbitrage       +[RETURN_AMOUNT] [TOKEN]
 
  repay       Liabilities:DeFi:[PROTOCOL]:Flash  +[LOAN_AMOUNT] [TOKEN]
              Assets:Crypto:Temp:Arbitrage       -[LOAN_PLUS_FEE] [TOKEN]
 
  keep        Assets:Crypto:Wallet:[WALLET]:[TOKEN]  +[PROFIT] [TOKEN]
              Income:Crypto:Arbitrage                -[PROFIT_USD] USD

Alles wat de lening raakte is aan het einde van het blok verdwenen, dus wat het grootboek daadwerkelijk moet registreren is de winst en de protocolvergoeding. Het arbitragevoorbeeld in de portfolio-trackinggids toont de vorm van één enkele transactie.

Cross-chain-bridge​

; Template: Bridge assets across chains
YYYY-MM-DD * "Bridge [AMOUNT] [TOKEN] from [CHAIN1] to [CHAIN2]"
  Assets:Crypto:[CHAIN1]:[TOKEN]     -[AMOUNT] [TOKEN] {[PRICE] USD}
  Assets:Crypto:[CHAIN2]:[TOKEN]      [AMOUNT] [TOKEN] {[PRICE] USD}
  Expenses:Crypto:Bridge:Fees         [FEE] [TOKEN] {[PRICE] USD}
  Assets:Crypto:[CHAIN1]:[TOKEN]     -[FEE] [TOKEN] {[PRICE] USD}
 
; Example: Bridge ETH to Polygon
2024-02-05 * "Bridge 5 ETH from Ethereum to Polygon"
  Assets:Crypto:Ethereum:ETH     -5 ETH {2600.00 USD}
  Assets:Crypto:Polygon:ETH       5 ETH {2600.00 USD}
  Expenses:Crypto:Bridge:Fees    0.01 ETH {2600.00 USD}
  Assets:Crypto:Ethereum:ETH    -0.01 ETH {2600.00 USD}

Belastinggeoptimaliseerde sjablonen​

Belastingverlies-oogsten​

; Template: Tax loss harvesting
YYYY-MM-DD * "Tax loss harvesting - Sell [CRYPTO] at loss"
  Assets:Crypto:[EXCHANGE]:[CRYPTO]    -[AMOUNT] [CRYPTO] {[HIGH_COST_BASIS] USD}
  Assets:Crypto:[EXCHANGE]:USD          [PROCEEDS] USD
  Expenses:Crypto:Fees:Trading          [FEE] USD
  Assets:Crypto:[EXCHANGE]:USD         -[FEE] USD
  Expenses:CapitalLoss:Crypto           [LOSS] USD
 
; Example: Harvest ADA loss
2024-12-15 * "Tax loss harvesting - Sell ADA at loss"
  Assets:Crypto:Binance:ADA      -1000 ADA {0.60 USD} @ 0.45 USD
  Assets:Crypto:Binance:USD       450.00 USD  ; gross proceeds, 1,000 * 0.45
  Expenses:Crypto:Fees:Trading      5.00 USD
  Assets:Crypto:Binance:USD        -5.00 USD
  Expenses:CapitalLoss:Crypto     150.00 USD  ; 600.00 basis - 450.00 proceeds

Het verlies is het spiegelbeeld van een winst: $ 600,00 aan basis gaat eruit, $ 450,00 aan brutopbrengst komt erin, en het verschil van $ 150,00 is een positieve boeking naar een kostenrekening. $ 445,00 aan kasgeld komt er daadwerkelijk binnen, na de $ 5,00 vergoeding.

Langetermijn-kapitaalwinsten​

; Template: Long-term capital gains sale
YYYY-MM-DD * "Long-term sale - [CRYPTO] held > 1 year"
  date-acquired: "[PURCHASE_DATE]"
  holding-period: "[DAYS] days"
  Assets:Crypto:[EXCHANGE]:[CRYPTO]    -[AMOUNT] [CRYPTO] {[COST_BASIS] USD} @ [SALE_PRICE] USD
  Assets:Crypto:[EXCHANGE]:USD          [GROSS_PROCEEDS] USD
  Expenses:Crypto:Fees:Trading          [FEE] USD
  Assets:Crypto:[EXCHANGE]:USD         -[FEE] USD
  Income:CapitalGains:LongTerm         -[GAIN] USD
 
; Example: Long-term BTC sale
2025-02-01 * "Long-term sale - BTC held 382 days"
  date-acquired: "2024-01-15"
  holding-period: "382 days"
  Assets:Crypto:Coinbase:BTC     -1.0 BTC {45000.00 USD} @ 55000.00 USD
  Assets:Crypto:Coinbase:USD   55000.00 USD
  Expenses:Crypto:Fees:Trading    50.00 USD
  Assets:Crypto:Coinbase:USD     -50.00 USD
  Income:CapitalGains:LongTerm -10000.00 USD  ; 55,000.00 proceeds - 45,000.00 basis

De winst is $ 10.000,00, niet $ 9.950,00: de $ 50,00 vergoeding is al als kost geboekt, dus deze met de winst verrekenen zou die tweemaal aftrekken. Income:CapitalGains:LongTerm is een aparte rekening van Income:CapitalGains:Crypto, alleen zodat de aanhoudperiode zichtbaar is in een rapport — Beancount berekent geen aanhoudperiodes voor u, wat de reden is dat de metadata date-acquired en holding-period het waard zijn om mee te dragen.

Reconciliatie-sjablonen​

Maandelijkse saldoverificatie​

; Template: Monthly balance assertions
YYYY-MM-DD balance Assets:Crypto:[EXCHANGE]:[CRYPTO]  [EXPECTED_BALANCE] [CRYPTO]
YYYY-MM-DD balance Assets:Crypto:Wallet:[WALLET]:[CRYPTO]  [EXPECTED_BALANCE] [CRYPTO]
 
; Example: January balance verification
2024-01-31 balance Assets:Crypto:Coinbase:BTC    2.5 BTC
2024-01-31 balance Assets:Crypto:Binance:ETH    15.0 ETH
2024-01-31 balance Assets:Crypto:Wallet:Ledger:BTC  1.0 BTC

Anders dan de andere voorbeelden hier, is deze niet met opzet op zichzelf staand: de bedragen zijn wat uw eigen beursschermen zeggen, en de bewering faalt totdat uw transacties in het grootboek staan — wat precies het doel ervan is. Merk op dat balance het saldo controleert aan het begin van de genoemde dag, dus dateer de bewering de dag na de periode die u afsluit.

Prijsupdates​

; Template: Daily price updates
YYYY-MM-DD price [CRYPTO] [PRICE] USD
 
; Example: Daily prices
2024-01-15 price BTC 45000.00 USD
2024-01-15 price ETH 2500.00 USD
2024-01-15 price ADA 0.50 USD

Voor een gehost grootboek kan Live Prices ondersteunde crypto-waarderingsprijzen automatisch onderhouden. Houd de statische prijzen hierboven aan voor reproduceerbare voorbeelden. Beheerde prijzen vullen geen handelsprijs, stakingsinkomen of airdrop-kostprijs in; registreer die transactiewaarden expliciet.

Gebruiksinstructies​

  1. Kopieer het relevante sjabloon voor uw transactietype

  2. Vervang elke plaatsaanduiding. Een sjabloon is geen geldig Beancount totdat YYYY-MM-DD en elk [TUSSEN_HAAKJES]-token weg zijn — haakjes zijn geen Beancount-syntaxis, en een achtergebleven haakje is een parseerfout, geen stil genegeerde waarde. Het invullen is mechanisch:

    PlaatsaanduidingVervang doorVoorbeeld
    YYYY-MM-DDde datum van de transactie2024-03-20
    [AMOUNT]eenheden van het goed, zonder aanhalingstekens0.5
    [CRYPTO]het goedsymbool, in hoofdlettersBTC
    [EXCHANGE]de rekeningcomponent voor het platformCoinbase
    [COST_BASIS]de kostprijs per eenheid van de partij die u vervreemdt45000.00
    [SALE_PRICE]de per-eenheid prijs waartegen u verkocht48000.00
    [GROSS_PROCEEDS][AMOUNT] × [SALE_PRICE], vóór vergoedingen24000.00
    [FEE]de vergoeding van het platform, in de valuta waarin die werd geheven30.00
    [GAIN][GROSS_PROCEEDS] − [AMOUNT] × [COST_BASIS]1500.00

    Als u die kolom invult in het Cryptocurrency-verkoop-sjabloon, reproduceert u het uitgewerkte voorbeeld dat eronder staat, wat de snelste manier is om te controleren of u het sjabloon correct hebt gelezen.

  3. Pas rekeningnamen aan zodat ze overeenkomen met uw rekeningstructuur, en zorg dat elk ervan wordt geopend door het Sjabloon voor Rekeningstructuur — een rekening die nooit wordt geopend is een laadfout, geen waarschuwing

  4. Voeg metadata toe waar nodig voor belastingrapportage of tracking

  5. Verifieer berekeningen met bea --file your-file.bean check voordat u boekingen definitief maakt. Een boeking die niet in balans is, of die een partij vermindert die u niet bezit, faalt daar in plaats van stil een onjuist rapport te produceren

Beste praktijken​

  • Gebruik consistente naamgevingsconventies
  • Neem transactie-ID's op in metadata
  • Documenteer complexe transacties grondig
  • Verifieer wisselkoersen en prijzen
  • Maak regelmatig back-ups van uw bestanden

Deze sjablonen bieden een solide basis voor cryptocurrency-boekhouding in Beancount.io. Pas ze aan op basis van uw specifieke behoeften en handelspatronen.

Bron: https://beancount.io/nl/docs/Tips/cryptocurrency-templates-examples