Este guia fornece modelos práticos de Beancount e exemplos do mundo real para cenários comuns de criptomoedas. Copie e adapte esses modelos para suas próprias necessidades de contabilidade de cripto.
Como ler estes blocos
Cada bloco cercado abaixo é uma de três coisas, e eles não são intercambiáveis:
- Modelos contêm espaços reservados
[ENTRE_COLCHETES]e datasAAAA-MM-DD. Eles não carregarão até que você substitua valores reais — os colchetes não são sintaxe Beancount. - Exemplos ficam diretamente abaixo de seu modelo, têm datas e valores reais e são escritos para carregar. Cada um ainda precisa que as contas que toca estejam abertas, que é para o que serve o Modelo de Estrutura de Contas abaixo. A única exceção é o bloco de conciliação, que afirma saldos que apenas seu próprio razão pode satisfazer.
- O bloco Arbitragem de Empréstimo Relâmpago é pseudocódigo e está rotulado como tal onde aparece.
Duas convenções percorrem todos eles:
- Contas de receita mantêm créditos, então são negativas. Um ganho realizado é um lançamento negativo em
Income:CapitalGains:…; uma perda realizada é um lançamento positivo emExpenses:CapitalLoss:…. Inverter isso é a maneira mais comum de uma entrada de cripto falhar ao equilibrar. - Uma taxa é registrada uma vez como despesa e uma vez como redução no dinheiro. O produto bruto vai para a conta de dinheiro, a taxa sai dela, e a diferença é o que realmente cai na sua conta.
Explore um razão de exemplo de criptomoedas ao vivo:
Modelo de Configuração Básica
Modelo de Estrutura de Contas
; =============================================================================
; 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"Modelos de Negociação
Compra Básica de Criptomoeda
; 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 USDVenda de Criptomoeda
; 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 basisO lote alienado vale $ 22.500,00 pelo custo, a venda traz $ 24.000,00 brutos, e $ 30,00 disso vai para a exchange — então $ 23.970,00 em dinheiro chegam e $ 1.500,00 de ganho são realizados. Não deduza a taxa do ganho: a taxa já é uma despesa, e subtraí-la uma segunda vez é o que deixa a transação desequilibrada.
Troca Cripto-para-Cripto
; 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 USDUma troca cripto-para-cripto aliena o primeiro ativo, então ela realiza ganho exatamente como uma venda por dinheiro: 20 ETH adquiridos a $ 2.400,00 é $ 48.000,00 de valor recebido contra $ 46.000,00 de base do BTC. A taxa de $ 40,00 é paga em dinheiro e não altera o ganho.
Modelos de Transferência
Transferência de Exchange para Carteira
; 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}Uma transferência não é uma alienação, então ela não realiza nada: o mesmo custo {45000.00 USD} viaja com as moedas e a conta receptora herda a base. Duas consequências se seguem. A taxa de retirada é paga em BTC e é contabilizada como despesa nesse mesmo custo, então ela também não realiza ganho — se seu tratamento disser o contrário, precifique a taxa com @ e adicione um lançamento de ganho. E a conta remetente já deve ter 1.0005 BTC naquele custo exato, não 1,0, porque a taxa sai do mesmo lote. Uma redução sem um lote correspondente falha ao lançar, por mais que os totais somem.
Transferência Entre 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}Modelos de Staking
Staking de 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}Recompensas 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.00Uma recompensa é receita recebida em espécie, então os dois lançamentos descrevem o mesmo evento de ambos os lados: 0,08 ETH chega com uma base de $ 2.600,00 por unidade, e a receita correspondente de $ 208,00 é um crédito — negativo. O {2,600.00 USD} é um preço externo que você mesmo precisa obter; Beancount registra, não busca. Anote-o da exchange ou índice que você realmente usa e mantenha a mesma fonte ao longo do ano.
Esses $ 208,00 também são a base de custo da recompensa daqui em diante. Quando você eventualmente vender os 0,08 ETH, apenas o movimento desde esta data é um ganho — os $ 208,00 já foram tributados como receita e não devem ser reconhecidos duas vezes. Se a receita é tributável no recebimento ou na alienação difere por jurisdição; o razão registra os fatos de qualquer maneira.
Modelos DeFi
Provisão de Liquidez no 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}Concilie este um ativo de cada vez: US $ 25.000,00 em ETH mais US $ 25.000,00 em USDC saem, US $ 50.000,00 em token LP chegam, e a taxa de gás move US $ 50,00 de ETH da carteira para uma despesa. A perna de stablecoin carrega @ 1.00 USD porque é mantida sem base de custo — sem a anotação de preço, seu peso é 25.000 USDC, que não pode cancelar dólares. Em muitas jurisdições, depositar em um pool é em si uma alienação de ambos os tokens; esta entrada deliberadamente carrega a base adiante, então adicione os lançamentos de ganho se seu tratamento exigir.
Empréstimo no 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}Duas coisas fazem este carregar. A perna USDC carrega @ 1.00 USD para que ambos os lados da troca pesem na mesma moeda — sem isso, Beancount vê $ 10.000,00 de CUSDC aparecendo contra 10.000 unidades de USDC desaparecendo, que são ativos diferentes e não se cancelam. E o token de recibo é CUSDC, não cUSDC: uma primeira letra minúscula é um erro de lexador tanto em um componente de conta quanto em um símbolo de ativo, por mais que o protocolo o escreva em sua própria interface.
Modelos de Mineração
Recompensas de Mineração
; 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.00Despesas de Mineração
; 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 USDModelos de Airdrop
Airdrops de Tokens
; 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.00Como uma recompensa de staking, o valor reconhecido do airdrop se torna sua base de custo. Registre o preço que você pode justificar — a primeira cotação líquida do token, de uma fonte que você nomeia — em vez de um número redondo.
Modelos Avançados
Arbitragem de Empréstimo Relâmpago
Este bloco é pseudocódigo, não um modelo. Ele esboça a sequência de movimentos de valor dentro de um empréstimo relâmpago. Ele não carregará mesmo após você substituir valores, porque as linhas em branco entre os grupos encerram a transação — Beancount relata um erro de sintaxe nos lançamentos que seguem uma. Registre um empréstimo relâmpago real como uma única transação sem linhas em branco (rotulando as pernas com comentários ; indentados), descartando as pernas intermediárias que zeram dentro do mesmo bloco.
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] USDTudo que o empréstimo tocou se foi até o final do bloco, então o que o razão realmente precisa registrar é o lucro e a taxa do protocolo. O exemplo de arbitragem no guia de rastreamento de portfólio mostra a forma de transação única.
Ponte Entre Cadeias
; 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}Modelos Otimizados para Impostos
Colheita de Perdas Fiscais
; 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 proceedsA perda é a imagem espelhada de um ganho: $ 600,00 de base saem, $ 450,00 de produto bruto chegam, e a diferença de $ 150,00 é um lançamento positivo em uma conta de despesa. $ 445,00 em dinheiro é o que realmente cai, após a taxa de $ 5,00.
Ganhos de Capital de Longo Prazo
; 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 basisO ganho é de $ 10.000,00, não $ 9.950,00: a taxa de $ 50,00 já está registrada como despesa, então deduzi-la no ganho a deduziria duas vezes. Income:CapitalGains:LongTerm é uma conta separada de Income:CapitalGains:Crypto apenas para que o período de manutenção seja visível em um relatório — Beancount não calcula períodos de manutenção para você, que é por que os metadados date-acquired e holding-period valem a pena carregar.
Modelos de Conciliação
Verificação Mensal de 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 BTCAo contrário dos outros exemplos aqui, este não é autocontido por design: os valores são o que suas próprias telas de exchange dizem, e a afirmação falha até que suas transações estejam no razão — que é exatamente o propósito dele. Note que balance verifica o saldo no início do dia nomeado, então date a afirmação no dia após o período que você está fechando.
Atualizações de Preço
; 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 USDInstruções de Uso
-
Copie o modelo relevante para seu tipo de transação
-
Substitua cada espaço reservado. Um modelo não é Beancount válido até que
AAAA-MM-DDe cada token[ENTRE_COLCHETES]desapareça — colchetes não são sintaxe Beancount, e um sobrando é um erro de análise, não um valor silenciosamente ignorado. Substituir é mecânico:Espaço Reservado Substitua por Exemplo AAAA-MM-DDa data da transação 2024-03-20[VALOR]unidades do ativo, sem aspas 0.5[CRIPTO]o símbolo do ativo, em maiúsculas BTC[EXCHANGE]o componente de conta para o local Coinbase[BASE_DE_CUSTO]o custo por unidade do lote que você está removendo 45000.00[PRECO_DE_VENDA]o preço por unidade pelo qual você vendeu 48000.00[PRODUTO_BRUTO][VALOR]×[PRECO_DE_VENDA], antes das taxas24000.00[TAXA]a taxa do local, na moeda em que foi cobrada 30.00[GANHO][PRODUTO_BRUTO]−[VALOR]×[BASE_DE_CUSTO]1500.00Substituir essa coluna no modelo Venda de Criptomoeda reproduz o exemplo trabalhado impresso abaixo dele, que é a maneira mais rápida de verificar se você leu o modelo corretamente.
-
Ajuste os nomes de contas para corresponder à sua estrutura de contas e certifique-se de que cada uma seja aberta pelo Modelo de Estrutura de Contas — uma conta que nunca é aberta é um erro de carregamento, não um aviso
-
Adicione metadados conforme necessário para relatórios fiscais ou rastreamento
-
Verifique cálculos com
bea --file seu-arquivo.bean checkantes de finalizar entradas. Uma entrada que não equilibra, ou que reduz um lote que você não possui, falha ali em vez de produzir silenciosamente um relatório errado
Melhores Práticas
- Use convenções de nomenclatura consistentes
- Inclua IDs de transação em metadados
- Documente transações complexas minuciosamente
- Verifique taxas de câmbio e preços
- Mantenha backups regulares de seus arquivos
Estes modelos fornecem uma base sólida para contabilidade de criptomoedas no Beancount.io. Personalize-os com base em suas necessidades específicas e padrões de negociação.