Questa guida fornisce modelli pratici di Beancount ed esempi reali per scenari comuni di criptovalute. Copia e adatta questi modelli per le tue esigenze di contabilità criptovalute.
Come leggere questi blocchi
Ogni blocco delimitato qui sotto è una delle tre cose, e non sono intercambiabili:
- Modelli contengono segnaposto
[PARENTESI QUADRE]e dateAAAA-MM-GG. Non verranno caricati finché non sostituisci i valori reali — le parentesi quadre non sono sintassi di Beancount. - Esempi sono direttamente sotto il loro modello, riportano date e importi reali, e sono scritti per essere caricati. Ognuno necessita comunque che i conti toccati siano aperti, cosa a cui serve il Modello di Struttura dei Conti qui sotto. L'eccezione è il blocco di riconciliazione, che verifica i saldi che solo il tuo registro può soddisfare.
- Il blocco Arbitraggio Flash Loan è pseudocodice, ed è etichettato come tale dove appare.
Due convenzioni valgono per tutti:
- I conti di reddito contengono crediti, quindi sono negativi. Una plusvalenza realizzata è una registrazione negativa su
Income:CapitalGains:…; una minusvalenza realizzata è una registrazione positiva suExpenses:CapitalLoss:…. Sbagliare questo è l'errore più comune che causa il mancato bilanciamento di una voce di criptovaluta. - Una commissione viene registrata una volta come spesa e una volta come riduzione del contante. I proventi lordi vanno sul conto contante, la commissione ne esce, e la differenza è ciò che effettivamente arriva sul tuo conto.
Esplora un registro di esempio di criptovalute dal vivo:
Modello di Configurazione di Base
Modello di Struttura dei Conti
; =============================================================================
; 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"Modelli di Trading
Acquisto di Base di Criptovaluta
; 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 USDVendita di Criptovaluta
; 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 basisLa partita venduta vale $22.500,00 al costo, la vendita porta $24.000,00 lordi, e $30,00 di questi vanno allo scambio — quindi $23.970,00 di contante arrivano e $1.500,00 di plusvalenza sono realizzati. Non compensare la commissione con la plusvalenza: la commissione è già una spesa, e sottrarla una seconda volta renderebbe la transazione sbilanciata.
Scambio Criptovaluta-Criptovaluta
; 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 USDUno scambio criptovaluta-criptovaluta elimina la prima commodity, quindi realizza una plusvalenza esattamente come una vendita per contante: 20 ETH acquisiti a $2.400,00 sono $48.000,00 di valore ricevuto contro una base di $46.000,00 di BTC. La commissione di $40,00 è pagata in contante e non modifica la plusvalenza.
Modelli di Trasferimento
Trasferimento da Scambio a Portafoglio
; 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}Un trasferimento non è una dismissione, quindi non realizza nulla: lo stesso costo di {45000.00 USD} viaggia con le monete e il conto ricevente eredita la base. Ne conseguono due cose. La commissione di prelievo è pagata in BTC ed è spesata a quello stesso costo, quindi non realizza alcuna plusvalenza — se il tuo trattamento prevede diversamente, prezza la commissione con @ e aggiungi una registrazione di plusvalenza. E il conto mittente deve già detenere 1,0005 BTC a quel costo esatto, non 1,0, perché la commissione esce dalla stessa partita. Una riduzione senza una partita corrispondente fallisce indipendentemente da come quadrano i totali.
Trasferimento tra Scambi Diversi
; 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}Modelli di Staking
Staking di Ethereum
; 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}Ricompense di Staking
; 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.00Una ricompensa è reddito ricevuto in natura, quindi le due registrazioni descrivono lo stesso evento da entrambi i lati: 0,08 ETH arrivano con una base di $2.600,00 per unità, e i corrispondenti $208,00 di reddito sono un credito — negativo. Il {2,600.00 USD} è un prezzo esterno che devi procurare tu stesso; Beancount lo registra, non lo recupera. Annotalo dall'exchange o dall'indice che usi effettivamente, e mantieni la stessa fonte per tutto l'anno.
Quei $208,00 sono anche la base di costo della ricompensa d'ora in poi. Quando alla fine vendi gli 0,08 ETH, solo il movimento da questa data è una plusvalenza — i $208,00 sono già stati tassati come reddito e non devono essere tassati di nuovo. Se il reddito sia tassabile al ricevimento o alla dismissione dipende dalla giurisdizione; il registro registra i fatti in ogni caso.
Modelli DeFi
Fornitura di Liquidità su Uniswap
; 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}Riconcilia questa singola commodity alla volta: $25.000,00 di ETH più $25.000,00 di USDC escono, $50.000,00 di token LP arrivano, e la commissione di gas sposta $50,00 di ETH dal portafoglio alla spesa. La parte in stablecoin porta @ 1.00 USD perché è detenuta senza una base di costo — senza l'annotazione del prezzo, il suo peso sarebbe 25.000 USDC, che non può compensare dollari. In molte giurisdizioni, depositare in un pool è di per sé una dismissione di entrambi i token; questa voce deliberatamente trasporta la base, quindi aggiungi le registrazioni di plusvalenza se il tuo trattamento le richiede.
Prestito su Compound
; 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}Due cose rendono questa voce non banale. La parte in USDC porta @ 1.00 USD così entrambi i lati dello scambio pesano nella stessa valuta — senza di essa, Beancount vedrebbe $10.000,00 di CUSDC apparire contro 10.000 unità di USDC scomparire, che sono commodity diverse e non si compensano. E la ricevuta è CUSDC, non cUSDC: una prima lettera minuscola è un errore di lexing sia in un componente di un conto sia in un simbolo di commodity, comunque il protocollo la scrive nella sua interfaccia.
Modelli di Mining
Ricompense di Mining
; 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.00Spese di Mining
; 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 USDModelli di Airdrop
Token Airdrop
; 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.00Come una ricompensa di staking, il valore riconosciuto dell'airdrop diventa la sua base di costo. Registra il prezzo che puoi difendere — la prima quotazione liquida del token, da una fonte che puoi nominare — piuttosto che un numero arrotondato.
Modelli Avanzati
Arbitraggio Flash Loan
Questo blocco è pseudocodice, non un modello. Abbozza la sequenza dei movimenti di valore all'interno di un flash loan. Non verrà caricato nemmeno dopo aver sostituito i valori, perché le righe vuote tra i gruppi terminano la transazione — Beancount segnala un errore di sintassi sulle registrazioni che seguono una riga vuota. Registra un flash loan reale come un'unica transazione senza righe vuote (etichettando le gambe con commenti ; indentati), eliminando le gambe intermedie che si azzerano all'interno dello stesso blocco.
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] USDTutto ciò che il prestito ha toccato è sparito entro la fine del blocco, quindi ciò che il registro deve effettivamente registrare è il profitto e la commissione del protocollo. L'esempio di arbitraggio nella guida al monitoraggio del portafoglio mostra la forma a transazione singola.
Ponte Cross-Chain
; 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}Modelli Ottimizzati per le Tasse
Raccolta di Minusvalenze
; 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 proceedsLa minusvalenza è l'immagine speculare di una plusvalenza: $600,00 di base escono, $450,00 di proventi lordi arrivano, e la differenza di $150,00 è una registrazione positiva su un conto spese. $445,00 di contante è ciò che effettivamente arriva, dopo la commissione di $5,00.
Plusvalenze a Lungo Termine
; 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 basisLa plusvalenza è $10.000,00, non $9.950,00: la commissione di $50,00 è già registrata come spesa, quindi compensarla con la plusvalenza la dedurrebbe due volte. Income:CapitalGains:LongTerm è un conto separato da Income:CapitalGains:Crypto solo affinché il periodo di detenzione sia visibile in un report — Beancount non calcola i periodi di detenzione per te, motivo per cui i metadati date-acquired e holding-period vale la pena di portare.
Modelli di Riconciliazione
Verifica Mensile del Saldo
; 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 BTCA differenza degli altri esempi qui, questo non è intenzionalmente autosufficiente: gli importi sono quelli che i tuoi schermi di exchange dicono, e l'asserzione fallisce finché le tue transazioni non sono nel registro — che è esattamente il suo scopo. Nota che balance verifica il saldo all'inizio del giorno nominato, quindi data l'asserzione il giorno dopo il periodo che stai chiudendo.
Aggiornamenti dei Prezzi
; 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 USDIstruzioni per l'Uso
-
Copia il modello pertinente per il tuo tipo di transazione
-
Sostituisci ogni segnaposto. Un modello non è Beancount valido finché
AAAA-MM-GGe ogni token[PARENTESI QUADRE]non sono spariti — le parentesi non sono sintassi di Beancount, e una lasciata è un errore di parsing, non un valore ignorato silenziosamente. La sostituzione è meccanica:Segnaposto Sostituisci con Esempio AAAA-MM-GGla data della transazione 2024-03-20[IMPORTO]unità della commodity, senza virgolette 0.5[CRYPTO]il simbolo della commodity, maiuscolo BTC[EXCHANGE]il componente del conto per la piattaforma Coinbase[BASE_DI_COSTO]il costo per unità della partita che stai rimuovendo 45000.00[PREZZO_VENDITA]il prezzo per unità a cui hai venduto 48000.00[PROVENTI_LORDI][IMPORTO]×[PREZZO_VENDITA], prima delle commissioni24000.00[COMMISSIONE]la commissione della piattaforma, nella valuta in cui è stata addebitata 30.00[PLUSVALENZA][PROVENTI_LORDI]−[IMPORTO]×[BASE_DI_COSTO]1500.00Sostituire quella colonna nel modello di Vendita di Criptovaluta riproduce l'esempio svolto stampato sotto di esso, che è il modo più rapido per verificare di aver letto il modello correttamente.
-
Adatta i nomi dei conti per corrispondere alla tua struttura dei conti, e assicurati che ciascuno sia aperto dal Modello di Struttura dei Conti — un conto mai aperto è un errore di caricamento, non un avviso
-
Aggiungi metadati come necessario per la dichiarazione fiscale o per il monitoraggio
-
Verifica i calcoli con
bea --file tuo-file.bean checkprima di finalizzare le voci. Una voce che non bilancia, o che riduce una partita che non detieni, fallisce lì piuttosto che produrre silenziosamente un report errato
Buone Pratiche
- Usa convenzioni di denominazione coerenti
- Includi ID di transazione nei metadati
- Documenta accuratamente le transazioni complesse
- Verifica tassi di cambio e prezzi
- Mantieni backup regolari dei tuoi file
Questi modelli forniscono una solida base per la contabilità delle criptovalute in Beancount.io. Personalizzali in base alle tue esigenze specifiche e ai tuoi modelli di trading.