Debank

Debank troubleshooting is the Contract-to-Indexer Check for Missing EVM Tokens and Balances

Debank troubleshooting is a method for separating an on-chain balance from the indexed portfolio record that Debank displays. Start with the wallet address, EVM chain, and token contract; read the native balance or ERC-20 balanceOf value directly; apply the contract’s decimals; then compare that amount with Debank’s token and protocol views. A correct contract balance beside a missing portfolio card points to indexing, metadata, pricing, or protocol classification rather than a failed transfer.

Key takeaway: Read-only contract calls consume zero gas, so balance verification needs no approval, signature, or transaction fee.

Choose the authoritative balance before changing anything

The decisive first move in Debank troubleshooting is choosing which on-chain record should control the comparison for the asset you expect to see.

Use the account state for the question you are asking. Native ETH belongs to the account balance, so a node answers it through eth_getBalance. An ERC-20 such as USDC belongs to a token contract, so balanceOf(address) controls. Assets deposited into Aave, supplied to a vault, or placed in a Uniswap liquidity position require the receipt token or protocol position as well. Debank separates ordinary token records from decoded protocol portfolios, and those two views do not represent identical accounting layers. A blank line in one view therefore does not establish a missing on-chain asset.

Make the chain decision before reading the contract. An Ethereum transfer belongs to chain ID 1, while Arbitrum One uses 42161, OP Mainnet uses 10, and Base uses 8453. BNB Smart Chain uses 56, Polygon PoS uses 137, Avalanche C-Chain uses 43114, and Gnosis uses 100. The address may look identical across all eight networks, but each chain maintains a separate balance.

Then classify what "missing" means: no token row, a zero amount, a blank fiat value, or an absent protocol position. Each symptom points to a different data layer. A correct raw balance changes the task from transfer recovery to display reconciliation; a zero contract balance sends the investigation back to the transaction and destination address.

Zero-gas checks and the difference between amount and value

Zero-gas checks separate a missing token amount from a missing fiat valuation before you spend time on portfolio settings or transaction history. An eth_call to balanceOf reads state without a transaction and consumes zero gas; eth_getBalance reads native currency. Debank’s token data separates amount and raw_amount from price, where 0 means no price data. Six-decimal tokens divide raw units by 10^6; OpenZeppelin ERC-20 defaults to 18 decimals, so it divides by 10^18. The diagnosis changes when only the fiat column is blank.


Match the 20-byte account to the correct chain

Address and chain verification prevents a valid balance on one EVM network from being compared with an empty record on another.

An EVM address contains 20 bytes, written as 40 hexadecimal digits after a two-character 0x prefix, for 42 visible characters in total. Letter case may encode the EIP-55 checksum, but the underlying address still represents those same 20 bytes. Copy the complete address from the receiving transaction, then compare its first and last characters with the Debank search result. Do not diagnose from a shortened wallet label.

Next, use the transaction receipt to identify the destination chain rather than relying on the asset ticker. ETH appears as native currency on several EVM networks, and USDC has separate contracts across multiple chains. The pair that matters is chain ID plus contract address. If the receipt shows a bridge or protocol contract as the recipient, follow its emitted asset or position record before comparing the wallet balance.

Trace the asset by contract instead of ticker

The token contract, not the ticker, identifies the asset whose balance Debank must index on a particular EVM chain.

Two contracts may publish the same symbol, while one contract may change its display metadata through an upgradeable implementation. Copy the contract from the receipt’s Transfer log or the protocol’s asset list, and compare it with the contract attached to the Debank row. A search by symbol alone does not settle identity. Etherscan’s Read Contract view offers a direct balanceOf query on Ethereum, and equivalent explorers expose the same read path for their own EVM networks.

ERC-20 defines balanceOf(address) to return a uint256 balance, a 256-bit unsigned integer. The standard also defines six core functions and two events, while name, symbol, and decimals remain optional metadata methods. If decimals returns uint8, its value represents an 8-bit unsigned field; the balance itself remains raw units until scaled. Debank may report null metadata when the contract does not expose it, so the contract’s unit rule decides the normalized amount.


Use receipts and logs to locate the final state change

A successful receipt proves transaction execution, while the receipt’s logs reveal which contract changed balances and which address received the recorded asset.

An EVM transaction hash is 32 bytes, displayed as 64 hexadecimal digits after 0x, or 66 visible characters. Open the exact receipt and confirm its status, chain, from address, to address, and logs. For an ERC-20 transfer, the Transfer event identifies the token contract and records indexed sender and recipient addresses plus the raw value. The log carries three topics when both addresses are indexed: one event signature and two address topics. This evidence prevents a similarly named token or a transaction on another network from entering the comparison. It also anchors the event to a specific block.

Receipt success does not guarantee that the wallet still holds the received asset. A later swap, bridge deposit, vault deposit, or Aave supply can move the balance into another contract or receipt token. Read the wallet’s current balanceOf value after tracing those later events. Historical logs explain movement; current contract state answers ownership now.

For native ETH, use eth_getBalance at the same address and chain because no ERC-20 Transfer log represents an ordinary native transfer. Internal value movement may appear in an explorer trace, while the account balance remains the authoritative total. The answer changes when wrapped ETH is involved, because WETH is an ERC-20 contract balance.

Why does a DeFi position appear without the underlying token?

A DeFi position appears without the original wallet token when a protocol moves assets into contracts and records ownership through a receipt or position token.

The wider context is laid out in Debank walkthrough. Aave transfers supplied assets into its liquidity pool and represents the supplier’s claim through interest-bearing position accounting. The wallet therefore loses the free underlying balance while retaining a supplied position. Uniswap v2 represents liquidity ownership with UNI-V2 tokens. Uniswap v3 and v4 represent liquidity positions with NFTs that carry pool and range data. A token-only list and a protocol decoder are answering different questions, even when both contribute to the same portfolio.

Check Debank’s protocol section when balanceOf for the underlying asset fell after a deposit. Compare the protocol’s own dashboard, the receipt token balance, and the position owner. Debt belongs in the same reconciliation because net portfolio value subtracts liabilities from assets. If the protocol position exists on-chain but its decoder is absent, preserve the contract evidence and classify the gap as protocol indexing.

Seven cross-checks for the same EVM balance

Cross-layer balance checks distinguish a Debank display gap from a wallet-interface setting, protocol decoder difference, or incorrect chain selection across interfaces.

Check Evidence returned Prerequisite
Debank token view Indexed token amount, contract metadata, and fiat-value status Full wallet address and selected chain
Debank protocol view Decoded deposits, debts, and liquidity positions Wallet address, protocol, and matching network
Etherscan Read Contract Ethereum balanceOf result from the token contract Ethereum contract and holder addresses
MetaMask custom token Wallet-side ERC-20 rendering for the selected account Contract address and active network
Rabby Wallet portfolio Alternative EVM wallet rendering and account view The same public wallet address
Direct JSON-RPC call Raw uint256 output from balanceOf or native balance RPC access, chain ID, and encoded call data
Aave or Uniswap interface Protocol-native supplied asset or liquidity position Matching wallet, market, pool, and network

Use the narrowest check that matches the asset. Etherscan and direct JSON-RPC settle Ethereum contract state; MetaMask and Rabby Wallet test alternative interface rendering; Aave and Uniswap expose protocol-native positions. Agreement between balanceOf and a chain explorer outweighs a missing wallet card, while agreement between a protocol dashboard and its receipt token outweighs an empty ordinary-token row. The controlling check changes when the asset is native currency, an ERC-20, or a decoded DeFi position.

Resolve rebasing, wrappers, and nonstandard token records

Rebasing tokens, wrappers, proxies, and multi-token standards require a deeper query because transfer logs alone may not reproduce the current displayed amount.

stETH changes holder balances through rebasing, so a balance can move without an ordinary transfer into or out of that address. Lido’s wstETH wrapper works differently: the wstETH quantity stays stable while its value in stETH changes. Aave aToken balances also reflect accrued supply interest through protocol accounting. In each case, a log-only index can diverge from a fresh balance query. Read the current contract method that defines the user’s claim, then identify whether Debank presents the receipt asset, the underlying value, or a decoded protocol position. These representations can all be internally consistent at the same block.

Token type matters as well. ERC-721 balanceOf returns the number of NFTs owned, while ownerOf resolves one token ID; ERC-1155 balanceOf requires both an account and a token ID. A proxy contract can also preserve an address while changing implementation logic or metadata. When standard metadata calls revert or return empty values, keep the raw contract result and resolve display units from the deployed implementation.


Preserve a reproducible balance record

A completed repair should leave a reproducible record that connects Debank’s display to a chain, contract, block, and raw on-chain balance.

Record the full wallet address, numeric chain ID, token contract, transaction hash, receipt block, raw balance, decimals, normalized amount, and the Debank view that disagreed. Refresh the portfolio only after preserving that snapshot, then repeat the same contract read at a later block. Continued agreement on-chain with a stale card isolates an indexing or decoding issue; a changed contract balance means later activity altered the state. Recheck after bridging, wrapping, supplying, withdrawing, or migrating liquidity because each operation can replace the asset representation that Debank must classify.

Quick answers about Debank troubleshooting

Does connecting a wallet force Debank to reindex a missing token?

Connecting a wallet does not force Debank to rebuild its token index. A public EVM address is enough for portfolio lookup because balances live on-chain. Connection identifies the selected account and enables wallet-dependent actions, but it does not alter balanceOf, contract metadata, or protocol state. If the same address and chain still show a gap after a refresh, compare the raw contract balance and protocol view; treat connection status as an interface condition, not a balance repair.

Which block tag should developers compare with Debank after a recent transfer?

Use an explicit block number when you need an exact comparison with an indexed snapshot. The latest tag moves as new blocks arrive, so two calls made seconds apart can describe different states. The safe and finalized tags provide more stable reference points on networks that support them, although they sit behind the newest head. Record the receipt block and query that block when historical state is available; otherwise record the precise latest block returned with the balance.

Is EIP-55 checksum capitalization required for a Debank address lookup?

An EIP-55 checksum is not required to identify the underlying 20-byte EVM account when all 40 hexadecimal digits are correct. Mixed-case checksum encoding helps software catch character errors, while an all-lowercase form still represents the same address bytes in systems that accept it. Debank lookup accuracy therefore depends on the complete hexadecimal address and chain, not on decorative casing alone. If a mixed-case address fails validation, recopy it instead of manually changing letters.

Do token approvals determine whether an ERC-20 balance appears?

Token approvals do not determine whether Debank displays an ERC-20 balance. balanceOf reads the owner’s holdings, while allowance reads how much a spender is authorized to transfer under the token contract. An approval can remain nonzero when the owner balance is zero, and a positive balance can exist with zero allowance. Troubleshoot visibility with balanceOf, decimals, chain ID, and contract identity; review approvals as a separate account-permission task.

Could browser cache alone explain a stale Debank portfolio?

Browser cache can preserve stale interface data, but it cannot change the on-chain balance. Reload the address view and compare it with a fresh explorer or JSON-RPC query at a recorded block. If several independent interfaces show the same new raw balance while one browser session does not, local rendering or cached data is the likely layer. If every indexed interface lags behind the contract call, the evidence points to indexing rather than the browser alone.

Where should I look when an exchange withdrawal is absent from Debank?

Start with the exchange withdrawal transaction hash and the network selected for that withdrawal. Confirm that the receipt succeeded, the recipient matches the full Debank address, and the emitted token contract belongs to the destination chain. Exchanges may batch withdrawals or send a token representation that differs from another chain’s version. If no on-chain transaction hash exists yet, there is no EVM receipt or balance change for Debank to index.

Why does an ERC-20 contract return a balance but no readable token amount?

A raw ERC-20 balance has no reliable human-readable amount when the contract omits a usable decimals value. The ERC-20 metadata methods are optional, and assuming 18 can create a large display error for a token that uses 6 or another value. Read the deployed contract implementation, its verified interface, or the protocol’s asset configuration for the intended unit. Keep the uint256 raw amount unchanged until that decimal rule is established.

DeBank logo and text reading The Real User Based Web3 Community