Ce guide fournit des modèles Beancount pratiques et des exemples concrets pour les scénarios de cryptomonnaies courants. Copiez et adaptez ces modèles selon vos besoins de comptabilité crypto.
Comment lire ces blocs
Chaque bloc délimité ci-dessous relève de l'une de ces trois catégories, et elles ne sont pas interchangeables :
- Les modèles contiennent des espaces réservés
[ENTRE_CROCHETS]et des datesYYYY-MM-DD. Ils ne se chargeront pas tant que vous n'aurez pas remplacé ces valeurs par des valeurs réelles — les crochets ne font pas partie de la syntaxe Beancount. - Les exemples se trouvent directement sous leur modèle, portent des dates et des montants réels, et sont écrits pour se charger. Chacun d'eux a néanmoins besoin que les comptes qu'il touche soient ouverts, ce à quoi sert le Modèle de structure de comptes ci-dessous. La seule exception est le bloc de rapprochement, qui n'affirme que des soldes que votre propre registre peut satisfaire.
- Le bloc Arbitrage par prêt flash est du pseudocode, et il est étiqueté comme tel là où il apparaît.
Deux conventions traversent l'ensemble :
- Les comptes de produits portent des crédits, ils sont donc négatifs. Un gain réalisé est une écriture négative sur
Income:CapitalGains:…; une perte réalisée est une écriture positive surExpenses:CapitalLoss:…. Inverser cela est la façon la plus courante de faire échouer l'équilibre d'une écriture crypto. - Des frais sont enregistrés une fois en charge et une fois en diminution de trésorerie. Le produit brut va sur le compte de trésorerie, les frais en ressortent, et la différence est ce qui arrive réellement sur votre compte.
Explorez un registre d'exemple crypto en direct :
Modèle de configuration de base
Modèle de structure de comptes
; =============================================================================
; 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"Modèles de trading
Achat de cryptomonnaie de base
; 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 USDVente de cryptomonnaie
; 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 basisLe lot cédé vaut 22 500,00 $ US au coût, la vente rapporte 24 000,00 $ US brut, et 30,00 $ US de ce montant vont à la plateforme — ainsi 23 970,00 $ US de trésorerie arrivent et 1 500,00 $ US de gain sont réalisés. Ne compensez pas les frais dans le gain : les frais sont déjà une charge, et les soustraire une seconde fois est ce qui déséquilibre la transaction.
Échange de cryptomonnaie à cryptomonnaie
; 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 USDUn échange crypto-contre-crypto cède le premier instrument, il réalise donc un gain exactement comme une vente contre trésorerie : 20 ETH acquis à 2 400,00 $ US représentent 48 000,00 $ US de valeur reçue contre 46 000,00 $ US de base du BTC. Les 40,00 $ US de frais sont payés en trésorerie et ne modifient pas le gain.
Modèles de transfert
Transfert de plateforme vers portefeuille
; 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 transfert n'est pas une cession, il ne réalise donc rien : le même coût {45000.00 USD} voyage avec les coins et le compte destinataire hérite de la base. Deux conséquences en découlent. Les frais de retrait sont payés en BTC et sont passés en charge à ce même coût, ils ne réalisent donc pas de gain non plus — si votre traitement dit le contraire, valorisez les frais avec @ et ajoutez une écriture de gain. Et le compte émetteur doit déjà détenir 1,0005 BTC à ce coût exact, pas 1,0, car les frais proviennent du même lot. Une diminution sans lot correspondant ne s'enregistre pas, quelle que soit la cohérence des totaux.
Transfert entre plateformes
; 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}Modèles de staking
Staking 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}Récompenses de 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.00Une récompense est un produit reçu en nature, les deux écritures décrivent donc le même événement des deux côtés : 0,08 ETH arrivent avec une base de 2 600,00 $ US par unité, et les 208,00 $ US de produit correspondants sont un crédit — négatif. Le {2,600.00 USD} est un prix externe que vous devez sourcer vous-même ; Beancount l'enregistre, il ne le récupère pas. Notez-le depuis la plateforme ou l'indice que vous utilisez réellement, et gardez la même source tout au long de l'année.
Ces 208,00 $ US constituent également la base de coût de la récompense à partir de maintenant. Lorsque vous vendrez finalement les 0,08 ETH, seule la variation depuis cette date est un gain — les 208,00 $ US ont déjà été imposés comme revenu et ne doivent pas être reconnus deux fois. Le fait que le revenu soit imposable à la réception ou à la cession varie selon la juridiction ; le registre enregistre les faits dans les deux cas.
Modèles DeFi
Fourniture de liquidités 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}Rapprochez cet échange instrument par instrument : 25 000,00 $ US d'ETH plus 25 000,00 $ US d'USDC sortent, 50 000,00 $ US de jeton LP arrivent, et les frais de gas déplacent 50,00 $ US d'ETH du portefeuille vers une charge. La branche stablecoin porte @ 1.00 USD car elle est détenue sans base de coût — sans l'annotation de prix, sa pondération est de 25 000 USDC, qui ne peut pas annuler des dollars. Dans de nombreuses juridictions, déposer dans un pool constitue en soi une cession des deux jetons ; cette écriture reporte délibérément la base, ajoutez donc les écritures de gain si votre traitement l'exige.
Prêt 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}Deux choses font que celle-ci se charge. La branche USDC porte @ 1.00 USD afin que les deux côtés de l'échange se pondèrent dans la même devise — sans cela Beancount voit 10 000,00 $ US de CUSDC apparaître contre 10 000 unités d'USDC qui disparaissent, ce sont des instruments différents et ils ne s'annulent pas. Et le jeton de reçu est CUSDC, pas cUSDC : une première lettre en minuscule est une erreur de lexer à la fois dans un composant de compte et dans un symbole d'instrument, quelle que soit l'orthographe du protocole dans sa propre interface.
Modèles de minage
Récompenses de minage
; 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.00Dépenses de minage
; 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 USDModèles d'airdrop
Airdrops de jetons
; 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.00Comme une récompense de staking, la valeur reconnue de l'airdrop devient sa base de coût. Enregistrez le prix que vous pouvez justifier — la première cotation liquide du jeton, provenant d'une source que vous nommez — plutôt qu'un chiffre rond.
Modèles avancés
Arbitrage de prêt flash
Ce bloc est du pseudocode, pas un modèle. Il esquisse la séquence des mouvements de valeur à l'intérieur d'un prêt flash. Il ne se chargera pas même après avoir remplacé les valeurs, car les lignes vides entre les groupes terminent la transaction — Beancount signale une erreur de syntaxe sur les écritures qui suivent. Enregistrez un vrai prêt flash comme une seule transaction sans lignes vides (en étiquetant les branches avec des commentaires ; indentés), en supprimant les branches intermédiaires qui s'annulent à zéro dans le même bloc.
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] USDTout ce que le prêt a touché a disparu à la fin du bloc, ce que le registre doit réellement enregistrer est donc le profit et les frais du protocole. L'exemple d'arbitrage dans le guide de suivi de portefeuille montre la forme en une seule transaction.
Pont entre chaînes
; 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}Modèles optimisés pour les impôts
Récolte de pertes fiscales
; 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 perte est l'image miroir d'un gain : 600,00 $ US de base sortent, 450,00 $ US de produit brut arrivent, et la différence de 150,00 $ US est une écriture positive sur un compte de charges. 445,00 $ US de trésorerie est ce qui arrive réellement, après les 5,00 $ US de frais.
Gains en capital à long terme
; 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 basisLe gain est de 10 000,00 $ US, pas de 9 950,00 $ US : les 50,00 $ US de frais sont déjà enregistrés en charge, les compenser dans le gain les déduirait deux fois. Income:CapitalGains:LongTerm est un compte distinct de Income:CapitalGains:Crypto uniquement pour que la période de détention soit visible dans un rapport — Beancount ne calcule pas les périodes de détention pour vous, c'est pourquoi les métadonnées date-acquired et holding-period valent la peine d'être conservées.
Modèles de rapprochement
Vérification mensuelle du solde
; 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 BTCContrairement aux autres exemples ici, celui-ci n'est pas autonome par conception : les montants sont ceux qu'affichent vos propres écrans de plateforme, et l'assertion échoue tant que vos transactions ne sont pas dans le registre — ce qui est tout l'intérêt. Notez que balance vérifie le solde au début du jour nommé, datez donc l'assertion du jour suivant la période que vous clôturez.
Mises à jour des prix
; 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 USDPour un registre hébergé, Live Prices peut maintenir automatiquement les prix de valorisation crypto pris en charge. Conservez les prix statiques ci-dessus pour des exemples reproductibles. Les prix gérés ne renseignent pas un prix de transaction, un revenu de staking ou une base de coût d'airdrop ; enregistrez ces valeurs de transaction explicitement.
Instructions d'utilisation
-
Copiez le modèle pertinent pour votre type de transaction
-
Remplacez chaque espace réservé. Un modèle n'est pas du Beancount valide tant que
YYYY-MM-DDet chaque jeton[ENTRE_CROCHETS]n'ont pas disparu — les crochets ne font pas partie de la syntaxe Beancount, et un crochet restant est une erreur d'analyse, pas une valeur silencieusement ignorée. La substitution est mécanique :Espace réservé Substitut Exemple YYYY-MM-DDla date de la transaction 2024-03-20[AMOUNT]unités de l'instrument, sans guillemets 0.5[CRYPTO]le symbole de l'instrument, en majuscules BTC[EXCHANGE]le composant de compte de la plateforme Coinbase[COST_BASIS]le coût par unité du lot que vous retirez 45000.00[SALE_PRICE]le prix par unité auquel vous avez vendu 48000.00[GROSS_PROCEEDS][AMOUNT]×[SALE_PRICE], avant frais24000.00[FEE]les frais de la plateforme, dans la devise facturée 30.00[GAIN][GROSS_PROCEEDS]−[AMOUNT]×[COST_BASIS]1500.00Substituer cette colonne dans le modèle Vente de cryptomonnaie reproduit l'exemple travaillé imprimé en dessous, ce qui est le moyen le plus rapide de vérifier que vous avez lu le modèle correctement.
-
Ajustez les noms de comptes pour correspondre à votre structure de comptes, et assurez-vous que chacun est ouvert par le Modèle de structure de comptes — un compte jamais ouvert est une erreur de chargement, pas un avertissement
-
Ajoutez des métadonnées selon les besoins pour le reporting fiscal ou le suivi
-
Vérifiez les calculs avec
bea --file your-file.bean checkavant de finaliser les écritures. Une écriture qui ne s'équilibre pas, ou qui réduit un lot que vous ne détenez pas, échoue ici plutôt que de produire silencieusement un rapport erroné
Meilleures pratiques
- Utilisez des conventions de nommage cohérentes
- Incluez les identifiants de transaction dans les métadonnées
- Documentez soigneusement les transactions complexes
- Vérifiez les taux de change et les prix
- Maintenez des sauvegardes régulières de vos fichiers
Ces modèles fournissent une base solide pour la comptabilité des cryptomonnaies dans Beancount.io. Personnalisez-les en fonction de vos besoins spécifiques et de vos habitudes de trading.