Pular para o conteúdo principal

Modelos e Exemplos de Criptomoedas

Modelos práticos de Beancount e exemplos do mundo real para cenários comuns de criptomoedas, incluindo negociação, mineração, staking, airdrops e atividades DeFi.

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 datas AAAA-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 em Expenses: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:

Abrir Razão de Exemplo de Criptomoedas em uma nova aba

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 USD

Venda 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 basis

O 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 USD

Uma 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.00

Uma 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.00

Despesas 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 USD

Modelos 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.00

Como 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] USD

Tudo 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 proceeds

A 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 basis

O 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 BTC

Ao 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 USD

Instruções de Uso

  1. Copie o modelo relevante para seu tipo de transação

  2. Substitua cada espaço reservado. Um modelo não é Beancount válido até que AAAA-MM-DD e 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 ReservadoSubstitua porExemplo
    AAAA-MM-DDa data da transação2024-03-20
    [VALOR]unidades do ativo, sem aspas0.5
    [CRIPTO]o símbolo do ativo, em maiúsculasBTC
    [EXCHANGE]o componente de conta para o localCoinbase
    [BASE_DE_CUSTO]o custo por unidade do lote que você está removendo45000.00
    [PRECO_DE_VENDA]o preço por unidade pelo qual você vendeu48000.00
    [PRODUTO_BRUTO][VALOR] × [PRECO_DE_VENDA], antes das taxas24000.00
    [TAXA]a taxa do local, na moeda em que foi cobrada30.00
    [GANHO][PRODUTO_BRUTO][VALOR] × [BASE_DE_CUSTO]1500.00

    Substituir 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.

  3. 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

  4. Adicione metadados conforme necessário para relatórios fiscais ou rastreamento

  5. Verifique cálculos com bea --file seu-arquivo.bean check antes 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.

Fonte: https://beancount.io/pt/docs/Tips/cryptocurrency-templates-examples