Jump to content
Block Press

Protocol, chain and market reporting

How to Correct Mislabelled Bridge Moves in Portfolio Apps

A bridge can look like a withdrawal and a deposit in separate chain histories; match protocol evidence before merging records or changing portfolio balances.

The Block Press Editors5 min read

How to Correct Mislabelled Bridge Moves in Portfolio Apps

Correct a mislabelled bridge move by matching the source and destination records to the bridge’s on-chain message, then classify them as one cross-chain movement. A source-chain withdrawal and a destination-chain deposit are separate transactions; a portfolio app may not know they belong together. Treating them as unrelated can inflate balances, break cost-basis tracking, or make a transfer appear to be a sale.

Start with the transaction hashes, chain names, token contract addresses, and bridge records. The thor swap comparison is useful when a route combines a cross-chain move with an asset conversion, since that can leave different tokens on either side. For a bridge-only transfer, the key question is whether the protocol records connect the two transactions.

Why does a bridge appear as a withdrawal and a deposit?

A bridge moves value between separate ledgers, so neither chain contains the complete transfer. In a lock-and-mint design, the source contract locks or escrows an asset and the destination contract issues a corresponding token. In a burn-and-release design, the source token is burned and an asset is released on the destination chain. The destination token may have a different contract address even when it represents the same asset.

Portfolio apps often ingest each chain’s data separately. One importer sees tokens leaving a wallet; another sees tokens arriving on a different network. Without a shared message identifier or bridge-specific decoder, software may classify the records as an ordinary withdrawal and deposit, or treat the receipt as new income. Neither label alone proves what happened.

Bridge terminology can also be directional. For example, the Optimism standard bridge calls movement from L1 to L2 a deposit and movement from L2 to L1 a withdrawal. Other protocols may use different event names. Read the contract’s events and the protocol’s transaction status rather than assuming that “deposit” means a portfolio deposit or that “withdrawal” means a sale.

How do you verify that two records belong to one bridge move?

Use protocol evidence first, then compare the transaction details. A source event may include the recipient, asset, amount, and message identifier; the destination event or message record should correspond to those fields. A transaction hash is unique to one chain, so the pair will have different hashes. The message identifier or protocol explorer can connect them.

Check the following before merging:

  • Networks and contracts: Confirm the source and destination chains, and verify that the token contracts are the bridge’s supported representations of the same asset.
  • Recipient: Check the destination address in the bridge message. It may differ from the sending address if the transfer specified another recipient.
  • Amounts: Compare the amount sent with the amount received, accounting for any documented fee, conversion, or token decimal difference.
  • Status: Confirm the source transaction succeeded and whether the destination message has been executed or still needs a claim.

Matching by timestamp and similar amounts is a useful search method, not proof. Another transfer can happen near the same time, and a bridge may batch messages or deliver them later. Do not pair records solely because they involve the same wallet or token symbol. Symbols are not unique identifiers; contract addresses and protocol records provide stronger evidence.

What should you change in the portfolio app?

Once the protocol records confirm the pair, merge or reclassify the source and destination entries using the app’s bridge or cross-chain transfer type. Preserve the original transaction hashes and chain timestamps in the record or its notes. If the app cannot represent a bridge, keep the two chain transactions and add a clear linked annotation rather than deleting either one.

Keep bridge fees separate from the principal movement. The source transaction may pay a network fee in its chain’s gas token. A protocol may also deduct a fee from the bridged amount, while the destination transaction can require a separate claim and another network fee. Record each fee where it was actually paid. Do not increase the received amount to make the pair appear equal.

Classification is also distinct from tax treatment. A bridge that preserves exposure to an asset is not automatically the same transaction as a swap, but a route that converts assets can include a trade as well as a bridge. App labels do not settle jurisdiction-specific tax rules. Keep enough detail to identify any conversion and review the treatment that applies to your situation.

When should you leave the records unmatched?

Leave the destination leg unresolved when the source succeeded but the protocol has not delivered or finalized the message. Some bridges require a later claim; others process messages asynchronously. A successful source transaction confirms that the source-side action occurred, not that the destination asset has arrived.

Also stop before merging if the destination token differs for reasons the protocol records do not explain, the recipient is unfamiliar, or the source transaction failed or was reverted. Check whether the apparent receipt came from a separate swap, refund, or unrelated transfer. If the app offers only a manual bridge entry, use the verified source and destination assets, amounts, timestamps, and fees; do not invent a missing leg to force the balance to reconcile.

The confirmed facts are the transactions and bridge messages recorded on each chain, including whether delivery completed. A portfolio app’s label is an interpretation of those records. When the protocol evidence links both legs, correct the classification and preserve the underlying entries; when it does not, the match remains unverified.