Ce guide fournit des modèles Beancount pratiques et des exemples concrets pour les scénarios courants de cryptomonnaies. Copiez et adaptez ces modèles pour vos propres besoins de comptabilité des cryptomonnaies.
Comment lire ces blocs
Chaque bloc ci-dessous est l'une de trois choses, et ils ne sont pas interchangeables :
- Modèles contiennent des espaces réservés
[ENTRE CROCHETS]et des datesAAAA-MM-JJ. Ils ne se chargeront pas tant que vous n'aurez pas remplacé les valeurs réelles — les crochets ne sont pas la syntaxe de Beancount. - Exemples se trouvent directement sous leur modèle, portent des dates et des montants réels, et sont écrits pour se charger. Chacun nécessite encore que les comptes qu'il touche soient ouverts, ce que fournit le Modèle de structure de comptes ci-dessous. La seule exception est le bloc de rapprochement, qui affirme des soldes que seul votre propre grand livre peut satisfaire.
- Arbitrage de prêt flash est pseudocode, et est étiqueté comme tel là où il apparaît.
Deux conventions s'appliquent à tous :
- Les comptes de revenus contiennent des crédits, donc ils sont 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:…. Se tromper dans ce sens est l'erreur la plus courante qui fait échouer l'équilibrage d'une écriture de cryptomonnaie. - Des frais sont enregistrés une fois comme dépense et une fois comme réduction d'espèces. Le produit brut va au compte d'espèces, les frais en ressortent, et la différence est ce qui arrive réellement sur votre compte.
Explorez un exemple de grand livre de cryptomonnaies 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 $ au coût, la vente rapporte 24 000,00 $ brut, et 30,00 $ de ce montant vont à la plateforme — donc 23 970,00 $ d'espèces arrivent et 1 500,00 $ de gain sont réalisés. Ne compensez pas les frais dans le gain : les frais sont déjà une dépense, et les soustraire une deuxième fois est ce qui rend la transaction déséquilibrée.
É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 de cryptomonnaie à cryptomonnaie cède la première commodité, donc il réalise un gain exactement comme une vente contre espèces : 20 ETH acquis à 2 400,00 $ représentent 48 000,00 $ de valeur reçue contre 46 000,00 $ de base BTC. Les 40,00 $ de frais sont payés en espèces 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, donc il ne réalise rien : le même coût de {45000.00 USD} voyage avec les pièces 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 dépensés à ce même coût, donc ils ne réalisent aucun gain non plus — si votre traitement dit le contraire, évaluez les frais avec @ et ajoutez une écriture de gain. Et le compte expéditeur doit déjà détenir 1.0005 BTC à ce coût exact, pas 1,0, car les frais proviennent du même lot. Une réduction sans lot correspondant échoue à l'enregistrement, peu importe la qualité 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 revenu reçu en nature, donc les deux écritures décrivent le même événement des deux côtés : 0,08 ETH arrivent avec une base de 2 600,00 $ par unité, et les 208,00 $ correspondants de revenu sont un crédit — négatif. Le {2,600.00 USD} est un prix externe que vous devez trouver 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 $ sont aussi la base de coût de la récompense à partir de maintenant. Lorsque vous vendez éventuellement les 0,08 ETH, seul le mouvement depuis cette date est un gain — les 208,00 $ ont déjà été imposés comme revenu et ne doivent pas être reconnus deux fois. Que le revenu soit imposable à la réception ou à la cession dépend de la juridiction ; le grand livre 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 cette commodité une à la fois : 25 000,00 $ d'ETH plus 25 000,00 $ d'USDC sortent, 50 000,00 $ de jetons LP arrivent, et les frais de gaz déplacent 50,00 $ d'ETH du portefeuille vers une dépense. La partie en stablecoin porte @ 1.00 USD car elle est détenue sans base de coût — sans l'annotation de prix, son poids est de 25 000 USDC, ce qui ne peut pas annuler des dollars. Dans de nombreuses juridictions, déposer dans une pool est en soi une cession des deux jetons ; cette écriture porte délibérément la base de l'autre côté, donc ajoutez 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 rendent ce montant particulier. La partie en USDC porte @ 1.00 USD pour que les deux côtés de l'échange pèsent dans la même devise — sans cela, Beancount voit 10 000,00 $ de CUSDC apparaître contre 10 000 unités d'USDC disparaître, qui sont des commodités différentes et ne s'annulent pas. Et le jeton de réception est CUSDC, pas cUSDC : une première lettre minuscule est une erreur de lexer à la fois dans un composant de compte et dans un symbole de commodité, cependant le protocole l'épelle ainsi dans son 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 défendre — 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 une ligne vide. Enregistrez un vrai prêt flash comme une transaction unique sans lignes vides (en étiquetant les jambes avec des commentaires ; en retrait), en supprimant les jambes 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é est parti à la fin du bloc, donc ce que le grand livre doit réellement enregistrer, c'est le profit et les frais de protocole. L'exemple d'arbitrage dans le guide de suivi de portefeuille montre la forme de transaction unique.
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 $ de base sortent, 450,00 $ de produit brut arrivent, et la différence de 150,00 $ est une écriture positive sur un compte de dépenses. 445,00 $ d'espèces sont ce qui arrive réellement, après les frais de 5,00 $.
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 $, pas 9 950,00 $ : les 50,00 $ de frais sont déjà enregistrés comme dépense, donc les compenser dans le gain les déduirait deux fois. Income:CapitalGains:LongTerm est un compte séparé 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-acquise et période-de-détention valent la peine d'être porté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 que vos propres écrans de plateforme indiquent, et l'affirmation échoue jusqu'à ce que vos transactions soient dans le grand livre — c'est tout l'intérêt. Notez que balance vérifie le solde au début du jour nommé, donc datez l'affirmation le jour après 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 USDInstructions d'utilisation
-
Copiez le modèle pertinent pour votre type de transaction
-
Remplacez chaque espace réservé. Un modèle n'est pas un Beancount valide tant que
AAAA-MM-JJet chaque jeton[ENTRE CROCHETS]n'ont pas disparu — les crochets ne sont pas la syntaxe de Beancount, et un crochet restant est une erreur d'analyse, pas une valeur ignorée silencieusement. La substitution est mécanique :Espace réservé Substitut Exemple AAAA-MM-JJla date de la transaction 2024-03-20[MONTANT]unités de la commodité, sans guillemets 0.5[CRYPTO]le symbole de la commodité, en majuscules BTC[PLATEFORME]le composant de compte pour le lieu Coinbase[BASE_DE_COUT]le coût par unité du lot que vous retirez 45000.00[PRIX_DE_VENTE]le prix par unité auquel vous avez vendu 48000.00[PRODUIT_BRUT][MONTANT]×[PRIX_DE_VENTE], avant frais24000.00[FRAIS]les frais de la plateforme, dans la devise facturée 30.00[GAIN][PRODUIT_BRUT]−[MONTANT]×[BASE_DE_COUT]1500.00Substituer cette colonne dans le modèle de Vente de cryptomonnaie reproduit l'exemple travaillé imprimé en dessous, ce qui est le moyen le plus rapide de vérifier que vous avez bien lu le modèle.
-
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 si nécessaire pour le rapport fiscal ou le suivi
-
Vérifiez les calculs avec
bea --file votre-fichier.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 là 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 les transactions complexes en profondeur
- 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.