Back to Blog
Technology

Your Exchange Balance Doesn’t Match? A Practical Reconciliation Playbook for Wallets, Deposits, and Fees

David KovačDavid Kovač
April 19, 20267 min read405 views
Your Exchange Balance Doesn’t Match? A Practical Reconciliation Playbook for Wallets, Deposits, and Fees

Crypto exchanges don’t usually fail because they can’t process transactions. They fail because the back office can’t prove what happened—across the blockchain, internal ledgers, wallet infrastructure, and accounting.

This post is a practical reconciliation playbook focused on three areas that create most month-end pain (and most audit questions): on-chain deposits, hot/cold wallet movements, and fee accounting. The goal is simple: a ledger you can trust, controls your compliance team can defend, and a process your ops team can run daily.

1) Start with the right “source of truth” model (and stick to it)

Before you reconcile anything, define what each system represents. Most exchanges run at least four “truth layers”: blockchain data, wallet provider/custodian data, an internal exchange ledger, and the accounting general ledger (GL). Reconciliation breaks when teams treat two layers as interchangeable.

A clean model looks like this:

  • Blockchain = objective settlement layer (what actually confirmed on-chain).
  • Wallet system (custody, HSM, MPC, node stack) = operational execution layer (what keys signed, what addresses you control).
  • Internal ledger = customer and house sub-ledger (what you owe customers and what the business owns).
  • GL = financial reporting layer (what you report under your accounting policy).

Operationally: pick one “book of record” for customer balances (usually the internal ledger) and reconcile it to blockchain/wallet reality every day. Then reconcile the internal ledger to the GL on a scheduled cadence (daily for large venues, weekly/monthly for smaller ones).

2) On-chain deposit reconciliation: confirmations, attribution, and timing gaps

On-chain deposits are deceptively simple: a transaction hits an address you control, you credit the customer. In practice, reconciliation issues come from attribution (who is it for?), finality (is it safe to credit?), and timing (when does it belong in the books?).

A robust deposit recon workflow should track these fields per deposit event:

  • Chain + asset + network (e.g., USDT on Ethereum vs TRON)
  • Tx hash, block number, timestamp, from/to address
  • Amount (gross) and amount (net) if token mechanics apply
  • Required confirmations and crediting policy (instant vs delayed)
  • Customer mapping key (deposit address, memo/tag, payment ID)
  • Status: detected → pending confirmations → credited → reversed/flagged

Common failure modes and the control that prevents them:

  • Wrong network deposits (e.g., sending to an address format that “works” but isn’t supported): enforce network allowlists and show explicit network warnings; route exceptions to a manual queue.
  • Missing memo/tag (XRP, XLM, some exchange deposit flows): create an “unattributed deposits” suspense account and a strict SLA for resolution.
  • Reorg/temporary forks: credit only after your defined confirmation threshold; for higher-risk chains, consider longer thresholds or probabilistic finality checks.
  • Token transfers with fees/rebasing/burn mechanics: store both raw on-chain event data and normalized accounting amounts.

Compliance note: deposit reconciliation is also an AML control. Your process should support transaction monitoring triggers (high-risk counterparties, mixers, sanctioned exposure) and a documented hold/lock policy—always check local regulations and consult compliance advisors for jurisdiction-specific requirements.

3) Hot/cold wallet movements: treat them like inventory transfers, not “expenses”

Wallet-to-wallet transfers are where many exchanges lose the plot because nothing “happens” for the customer—yet balances move materially. The back office must prove that an on-chain movement was:

  1. authorized, 2) correctly classified, and 3) mapped to the right internal accounts.

A practical way to model this is to treat wallets like locations in a warehouse:

  • Cold wallet = long-term reserves
  • Hot wallet = operational float
  • Warm/collection wallets = deposit aggregation
  • Fee wallets = fee revenue collection (optional but clean)

For every on-chain movement between controlled wallets, record an internal transfer journal with:

  • From wallet ID → to wallet ID (not just addresses)
  • Purpose code (rebalancing, consolidation, withdrawal funding, fee sweep)
  • Approver(s) and change ticket reference
  • Expected amount vs actual amount (net of gas)
  • Gas/validator fee treatment (see next sections)

Two controls that dramatically reduce reconciliation noise:

  • Address book governance: maintain a controlled registry of “owned addresses” with wallet type, chain, and effective dates. When an address rotates, your reconciliation logic must know when it became owned.
  • Separation of duties: the team that initiates a treasury movement shouldn’t be the only team that approves and posts it. Even small exchanges can implement dual approval + immutable logging.

When you reconcile, you’re matching three views:

  • Blockchain transfer events
  • Wallet system transfer records (signing/execution logs)
  • Internal ledger movement journals

If those three don’t tie daily, your “proof of control” over assets becomes hard to defend during audits, investor diligence, or incident response.

4) Fee accounting: define fee types, then reconcile gross vs net consistently

Fees are where finance, product, and engineering often disagree. The fix is to define fee taxonomy once and reconcile each fee stream with an explicit formula.

Typical exchange fee types:

  • Trading fees (maker/taker, rebates)
  • Deposit fees (rare; more common in fiat rails)
  • Withdrawal fees (flat or dynamic)
  • Network fees (gas/validator fees paid to the chain)
  • Funding/interest/borrow fees (margin or lending)

Key principle: don’t mix network fees with exchange revenue.

A clean approach:

  • Exchange fees (revenue): what the exchange charges customers per your fee schedule.
  • Network fees (pass-through or expense): what the blockchain charges to execute transactions.

Reconciliation patterns that work:

  • Trading fees: reconcile per day as:

    • Sum of trade fills × fee rate (by tier) = expected fee
    • Compare to fee ledger postings (by asset)
    • Investigate differences (rebates, promotions, negative fees, rounding)
  • Withdrawal fees: reconcile as:

    • Customer charged fee (revenue)
    • Minus network fee paid (expense or contra, depending on policy)
    • Equals net margin on withdrawals (often small, but must be explainable)
  • Fee asset vs settlement asset: if you charge fees in a different asset (or allow fee discounts in a platform token), you need a valuation policy (spot at fill time vs end-of-day). Document it and apply consistently.

Accounting note: revenue recognition and presentation can differ by jurisdiction and accounting standards. Your ops reconciliation should produce the facts (who paid what, when, in what asset); your finance team maps those facts to the GL per policy.

5) The daily close checklist: what to reconcile every 24 hours

If you only reconcile at month-end, you’re not reconciling—you’re doing archaeology. A daily close makes issues small and traceable.

Here’s a tight daily checklist most exchanges can implement without heavy tooling:

  • On-chain deposits

    • New deposit events detected vs credited
    • Unattributed deposits queue (missing memo/tag, unknown sender)
    • Deposits credited before confirmation threshold (exception report)
  • Withdrawals

    • Customer withdrawal requests vs on-chain broadcasts
    • Broadcasted vs confirmed vs failed/replaced transactions
    • Net sent to customer + network fee = total wallet outflow
  • Wallet inventory

    • Balance by wallet type (hot/cold/collection) vs internal “house” accounts
    • Large movements require purpose code + approvals
    • New/rotated addresses reconciled to address registry
  • Fees

    • Trading fee totals by asset vs expected model
    • Withdrawal fee revenue vs network fee expense
    • Promotions/rebates posted to the right contra accounts
  • Compliance/risk flags

    • High-risk deposit sources, sanctioned exposure alerts
    • Manual holds applied and released with audit trail

The output of the daily close should be two things: (1) a set of reconciled balances and (2) a short exceptions list with owners and deadlines.

6) Audit-ready controls: make exceptions boring, repeatable, and logged

Auditors (and regulators) don’t expect perfection—they expect controls that catch issues and a process that shows who did what, when, and why.

Minimum controls that pay off quickly:

  • Immutable audit logs for wallet operations and ledger postings
  • Role-based access (ops vs finance vs compliance)
  • Reconciliation evidence packs (daily snapshots, exception reports, approvals)
  • Suspense accounts for unattributed deposits and disputed withdrawals
  • Incident playbooks for chain halts, reorgs, wallet compromise, custodian outages

If you’re operating across jurisdictions, add a compliance review step for how long you retain logs, how you handle customer disputes, and how you document AML decisions—check local regulations and consult qualified advisors.

The Bottom Line

Reconciliation is your exchange’s “trust engine”: it turns blockchain events into defensible customer balances and clean financial reporting. Get the fundamentals right—deposit attribution, wallet movement classification, and fee taxonomy—and your daily close becomes predictable.

If you want to operationalize these controls with scalable back-office workflows and integrations, talk to Brokeret at /get-started.

Share:TwitterLinkedIn