Skip to content

Money movement and financial logic

Crypto exchange and wallet testing

Crypto exchange and wallet testing checks how custodial exchanges and wallets credit deposits across confirmations and chain reorganisations, approve and sign withdrawals, estimate network fees, validate addresses, send travel rule data, and account for staking rewards. FintechAssuranceLabs delivers per-chain deposit and withdrawal suites, reorganisation scenarios, a custody and signing workflow test report, and staking reward accrual checks.

What crypto exchange and wallet testing covers

Deposit detection and confirmations

For crypto exchanges and custodial wallets, a deposit becomes client money when the ledger credits it. A credit that a client withdraws before a reorganisation removes it is paid from the exchange's own holdings. Tests per chain and token:

  • Detection. Native transfers, token transfers from contract event logs, value sent by a contract call, and one Bitcoin transaction paying several deposit addresses each credit once, to the right client.
  • Credit state by depth. A deposit stays pending until the configured threshold. On Ethereum, tests compare crediting at the latest, safe, and finalized block tags of the JSON-RPC API.
  • Memo or tag deposits. A deposit with a missing tag on a shared address goes to suspense and credits no client.

Reorganisation handling

On Bitcoin regtest, invalidateblock removes the block holding a credited deposit. Tests check that a dropped transaction reverses through an entry linked to the original, that a transaction mined again in another block keeps one credit (the deduplication key is transaction ID and output index), and that a double spend after the client traded the credit shows as a negative balance in the break report. On Ethereum, when the chain has not finalized for more than four epochs, the inactivity leak starts (rewards and penalties), so tests also run while the finalized tag stops advancing. The crypto deposit reorg testing guide lists the node calls.

Withdrawal approval and signing

A broadcast withdrawal cannot be reversed, so tests stop defects before the signer:

  • Approval quorum. The requester cannot approve their own request, an approval bound to a payload hash fails when the amount or destination changes, and a policy change needs the quorum.
  • MPC threshold signing. With key share nodes offline below the threshold, the withdrawal stays retriable, and a retry after a signer timeout with the same idempotency key broadcasts one transaction.
  • Multisig. For Bitcoin multisig built on BIP 174 partially signed transactions, an output altered between two signers is refused by the second signer's policy check.
  • Nonces. Two Ethereum withdrawals with one nonce let one replace the other, and a nonce gap holds every later withdrawal from that wallet.

MiCA Article 75(8) makes a custodian liable to clients for the loss of crypto-assets or of the means of access from an incident attributable to it, capped at market value when the loss occurred (Regulation (EU) 2023/1114). The MiCA testing requirements page maps Article 75 to evidence.

Fee estimation and stuck transactions

The fee charged to the client and the network fee paid are separate ledger entries. Under EIP-1559, the base fee moves by at most one eighth per block, and a transaction with a max fee per gas below the base fee cannot be included. Tests raise the base fee between quote and broadcast and check one replacement with the same nonce and one payout booked with the fee paid. Bitcoin Core 28.0 (2 October 2024) set -mempoolfullrbf to 1 by default; tests bump a stuck withdrawal and check that the dropped original triggers no second payout.

Address validation and travel rule data

BIP 350 requires Bech32 for witness version 0 and Bech32m for versions 1 to 16. EIP-55 adds a mixed-case checksum that an all-lowercase address lacks. Tests submit a Taproot address with a Bech32 checksum, a testnet address, and a mistyped EIP-55 address.

Under Regulation (EU) 2023/1113, the originator's provider submits the Article 14(1) and 14(2) data in advance of, or simultaneously with, the transfer (14(4)), and neither allows initiation of nor executes a transfer until every Article 14 obligation is met (14(8)). For a transfer exceeding EUR 1,000 to or from a self-hosted address, the provider takes adequate measures to assess whether its client owns or controls the address (14(5), 16(2)). In Canada, an entity keeping records of virtual currency transfers includes both parties' name, address, and any account or reference number (Regulations s. 124.1(1)); see FINTRAC testing requirements. Tests block signing when a field is missing and capture IVMS 101 payloads.

Staking reward accounting

Ethereum validators with 0x01 credentials have balance above 32 ETH swept to the withdrawal address, while 0x02 validators compound rewards up to 2048 ETH (staking withdrawals), so a reward job counting only withdrawals credits nothing for 0x02 validators. Tests check that commission is deducted once, that allocation uses each epoch's balance snapshot, that balances stay locked through exit, and that each reward reaches the register of positions, where Article 75(4) records any event likely to modify a client's rights immediately. Reward exports carry UTC timestamp, amount, and commission for crypto tax software.

Deliverables

  • Deposit and withdrawal test suite per supported chain

    Automated tests for each chain and token that check deposit detection, crediting at the confirmation threshold, withdrawal limits, fee charging, address validation, and travel rule blocking, run in CI by the engineering lead.

  • Chain reorganisation and confirmation threshold scenarios

    Scripted reorganisations on local test networks with the expected credit, reversal, or single re-credit for each deposit, used by the engineering lead to set and defend confirmation thresholds.

  • Custody and signing workflow test report

    Results of approval quorum, MPC threshold signing, multisig, nonce, and retry tests with request IDs, approvers, and transaction IDs, in the form a competent authority or partner bank reviews.

  • Staking reward accrual checks

    A per-epoch recomputation of validator rewards, commission, and client allocations compared with credited balances, listing each difference with its amount and source records for the finance team.

How crypto wallet tests fit your release process

  • On every merge. Address validation, fee calculation, approval policy, and nonce tests run in CI against Bitcoin regtest and a local Ethereum development chain. A credit without the threshold, or a withdrawal signed without quorum, fails the build.
  • Nightly on public testnets. The deposit and withdrawal suite runs per chain through your node providers. Ethereum's networks page names Sepolia the default testnet for application development and Hoodi the testnet for validating and staking, and marks Holesky deprecated as of September 2025. Bitcoin runs on signet and on testnet4 (BIP 94, genesis block mined 3 May 2024). Reorganisation scenarios stay on regtest, where blocks are invalidated on demand.
  • Before a change that moves assets. A new chain or token, a signer or MPC provider change, a new approval policy, a new travel rule provider, or a confirmation threshold change triggers the full per-chain suite and a new custody and signing workflow test report. When a chain schedules a network upgrade, the suite reruns on a testnet where the upgrade is already active.
  • After release. Your operations team sends a small deposit and withdrawal per changed chain from company wallets. We hand over the checklist and the queries that compare ledger entries with on-chain transaction IDs.

Test wallets, identities, and travel rule counterparties are synthetic. Test key shares never touch production signers, and no production account data enters test environments.

Suites live in your repository and run in your CI. Each release leaves an evidence set with the change ticket: per-chain results with transaction IDs and block heights, reorganisation outcomes, approval logs, travel rule payload captures, and the staking reward recomputation. The same set supports the technical documentation of ICT systems in a MiCA authorisation application (Article 62(2)(j)) and the transaction records FINTRAC examiners sample. Ledger breaks outside the chain layer go to ledger and reconciliation testing.

Your team owns confirmation thresholds, the approval policy, key ceremonies, production signing access, and decisions on transfers the travel rule holds.

Sample deliverable

Sample, synthetic data

position and ledger reconciliationPosition and ledger reconciliation run: custodian, chain, payroll, and revenue feeds
Position and ledger reconciliation run: custodian, chain, payroll, and revenue feeds
IDSource pair and instrument or assetInternal quantity or amountExternal quantity or amountDifference (internal minus external)Break classification and cause
POS-01Internal position ledger vs custodian settled position file: Equity A shares1,200 shares1,000 shares+200 sharesTiming break, expected: a 200-share buy executed on trade date settles on T+1 and is absent from the settled position file until the next file
POS-02Internal position ledger vs clearing position file: Equity B shares500 shares1,000 shares-500 sharesCorporate action break, open: the clearing file applies a 2-for-1 split on the effective date and the internal ledger has no split entry
POS-03Portfolio ledger vs custodian holdings file: Fund A units1,250.457362 units1,250.457 units+0.000362 unitsRounding break inside the 0.001-unit tolerance: the portfolio ledger stores units to 6 decimal places and the custodian file to 3
POS-04Hot wallet ledger vs blockchain node balance: Testnet coin A on a public testnet2.500000 coin A2.000000 coin A+0.500000 coin ATrue break, defect: deposit DEP-7713 was credited after 1 confirmation against a configured threshold of 12, and a chain reorganisation removed the transaction from the canonical chain
POS-05Hot wallet ledger vs blockchain node balance: Testnet coin A on a public testnet50.000000 coin A49.999580 coin A+0.000420 coin ATrue break, defect: the network fee for withdrawal WD-2291 was paid from the hot wallet and has no ledger entry
POS-06Tracker holdings from imported exchange history vs self-custody wallet node balance: Testnet coin B1.0000 coin B0.9995 coin B+0.0005 coin BTrue break, defect: the import records the exchange withdrawal at the gross amount and drops the 0.0005 coin B withdrawal fee, so the lot quantity is overstated by 0.0005 coin B and later disposals consume units the wallet does not hold
POS-07EWA advance ledger vs employer payroll deduction file: employee EMP-0042, pay period PP-18350.00 XTS300.00 XTS+50.00 XTSTiming break, expected: advance ADV-5520 was requested after the payroll cut-off and the employer file deducts it in pay period PP-19
POS-08Revenue-share remittance ledger vs expected remittance recalculated from processor revenue feed: agreement RBF-0310, month M-061,200.00 XTS1,160.00 XTS+40.00 XTSCalculation break, defect: the remittance applies the 8% share to 15,000.00 XTS gross revenue, while the agreement defines the share on 14,500.00 XTS revenue net of refunds

Amounts use XTS, the ISO 4217 code reserved for testing; Equity A, Equity B, Fund A, and testnet coins A and B are generic test instruments with no market value, and all employee, agreement, deposit, and withdrawal IDs are invented.

Questions

What is crypto custody?

Crypto custody is the safekeeping or control of crypto-assets, or of the private keys that give access to them, on behalf of clients. MiCA Article 3(1)(17) defines the service in those terms. MiCA Article 75 requires an EU custodian to keep a register of positions per client, segregate client holdings from its own, and carry liability for losses from incidents attributable to it.

What is crypto staking?

Crypto staking is committing tokens of a proof-of-stake network to a validator that proposes and attests to blocks in return for rewards paid in the same token. On Ethereum, rewards and penalties apply once per epoch of 32 slots of 12 seconds each, and a slashed validator loses part of its stake and is removed from the network over 36 days.

Scope your crypto exchange and wallet testing

Send your supported chains, custody model, approval policy, and travel rule provider, and we return a test scope with the scenarios and evidence each chain needs.

Scope your testing