Skip to content
EntryTarget Blog
Go back
CASO-DE-USO-04 · PT

Cripto e FX: multi-moeda, multi-ativo e PnL em tempo real

Quando cada conta pode carregar uma moeda diferente, o double-entry exige uma dimensão a mais: o ativo. É o que separa um ledger financeiro de uma tabela de saldos.

Multi-moeda parece uma feature “adicionar uma coluna currency” — até você tentar calcular PnL. Porque PnL exige uma unidade de conta comum, e para ter isso você precisa de uma tabela de preços, de um histórico de taxas, e de regras claras sobre quando converter. Um ledger preparado para multi-ativo resolve os três problemas de uma vez.

O problema

Na cripto e no FX, cada transação tem, na prática, duas moedas: o que saiu e o que entrou. “Vendi 0.5 BTC por R$ 175.000” não é um único movimento — são dois: uma saída de 0.5 BTC e uma entrada de R$ 175.000. O casamento entre eles é o trade. E o lucro ou prejuízo depende do preço médio de entrada do BTC, que só é rastreável com um ledger.

Contas com dimensão de ativo

A diferença estrutural: cada conta tem um asset declarado. user:u_42:crypto:BTC e user:u_42:crypto:ETH são contas separadas. Nunca se misturam. Uma transação multi-asset simplesmente tem lançamentos em moedas diferentes — e a invariante muda: Σ débitos = Σ créditos vale por asset, não globalmente.

ContaAssetSignificado
user:<id>:cash:BRLBRLSaldo em real
user:<id>:cash:USDUSDSaldo em dólar
user:<id>:crypto:BTCBTCHolding de Bitcoin
user:<id>:crypto:ETHETHHolding de Ether
ops:pool:BTCBTCTesouraria de BTC
ops:pool:BRLBRLTesouraria em real
ops:revenue:spread:BTC-BRLBRLReceita de spread no par
ops:pnl:realized:BTCBRLPnL realizado em BTC (em BRL)

Uma ordem de venda

Usuário vende 0.5 BTC por R$ 175.000,00. Spread da plataforma 0.5% (R$ 875,00). O trade é uma transação única com lançamentos em dois assets:

VENDA · 0.5 BTC → R$ 175.000,00 (BRL)
Account Debit Credit
ops:pool:BRL 175000.00
user:u_42:cash:BRL 174125.00
ops:revenue:spread:BTC-BRL 875.00
Totals 175,000 175,000
VENDA · 0.5 BTC → R$ 175.000,00 (BTC)
Account Debit Credit
user:u_42:crypto:BTC 0.50000000
ops:pool:BTC 0.50000000
Totals 0.5 0.5

Confira: em BTC, débito 0.5 = crédito 0.5. Em BRL, débito R$ 175.000 = crédito R$ 174.125 + R$ 875. Cada asset fecha em zero, separadamente. É essa a regra que substitui o “Σ débitos = Σ créditos” do single-asset.

PnL realizado

Para calcular o lucro na venda, o ledger precisa do custo médio do BTC que saiu. A convenção mais comum (WAC — weighted average cost) fica em uma view materializada por conta-asset. Na hora da venda, uma transação adicional lança a diferença entre o valor de venda e o custo médio em ops:pnl:realized:BTC.

PNL REALIZADO · 0.5 BTC @ WAC R$ 310k → VENDA R$ 350k
Account Debit Credit
ops:pnl:realized:BTC 20000.00
ops:retained:earnings 20000.00
Totals 20,000 20,000

Para o imposto, o histórico de lançamentos mostra todas as aquisições com data, preço e quantidade. A memória de cálculo sai direto do ledger — o fisco tem tudo que precisa.

Mark-to-market (não realizado)

Para reporting interno, holdings são marcadas a mercado todo dia. Isso não toca as contas de asset, mas gera uma view balance_in_BRL que consulta a tabela de preços. O ledger mantém a verdade em unidades nativas; a camada de reporting faz a conversão.

Invariantes

InvariantePor quê
Σ débitos = Σ créditos por asset por transaçãoDouble-entry com dimensão extra
Conta tem asset imutávelImpede lançar BTC em conta de BRL
Saldo de ops:pool:<asset> ≥ Σ saldos de usuários no assetCustódia real ≥ obrigação interna
Conversões passam por rate source registradoAuditoria de preço

Em cripto, o regulador não te pergunta “quanto você tem”. Te pergunta “como você sabe quanto você tem”.

— Compliance officer

FAQ

Como integro com exchanges externas (Binance, Kraken)?

Cada exchange é uma ops:exchange:<name>:<asset>. Depósitos e retiradas movimentam essas contas; trades dentro da exchange são espelhados no seu ledger via webhook. Reconciliação diária compara saldo reportado vs. saldo no seu livro.

Stablecoins — moeda ou cripto?

Cripto. Sempre. A sua contabilidade interna precisa manter o ativo separado (USDC ≠ USD) porque o risco é diferente. Conversão para USD é uma transação explícita, com rate declarado.

E forks, airdrops, staking rewards?

Cada um vira uma transação de origem income:<tipo>. O ledger não se importa se a fonte é trade, fork ou reward — todos são lançamentos com asset, quantidade, e momento.

Quando você precisa disso

  1. 1
    Você custodia mais de uma moeda ou ativo
    A partir da segunda moeda, ledger multi-asset deixa de ser luxo.
  2. 2
    Você calcula PnL (seu ou do cliente)
    Sem histórico de aquisição, PnL é chute.
  3. 3
    Você reporta imposto sobre ganho de capital
    Receita quer memória de cálculo.
  4. 4
    Você integra com mais de uma venue
    Cada venue traz um saldo; ledger é onde todos encontram.
DEPLOY NO SEU AWS

Um ledger que é realmente seu.

entrytarget.com →


Next Post
BNPL e crédito: amortização e juros que fecham todo dia