Why agent wallet spend tracking goes wrong: six failure modes on Base and Solana
GetAgentCap team · published 9/23/2026
Most agent spend numbers go wrong for mechanical reasons: the wrong address is watched, the wrong token is counted, or the balance is sampled instead of the transfers being read. Below are six ways teams running fleets of AI agent wallets end up with numbers they can't trust, and how to check for each one. By the GetAgentCap team.
Tracking the balance instead of the transfers
Watching balance changes hides what actually happened, because inflows and outflows cancel each other out. A wallet that sent 400 USDC and got a 400 USDC top-up in the same window looks unchanged if you only compare balances.
Spend should come from outgoing transfer records, not balance changes. On Base that means the ERC-20 Transfer events emitted by the USDC contract where the agent's address is the sender. On Solana it means the token transfer instructions that debit the agent's USDC token account. Summing those transfers gives the gross amount spent, and that's the number a budget should be checked against.
Why does my Solana agent wallet show no USDC activity?
On Solana, USDC doesn't sit at the wallet address itself. It sits in a separate token account owned by that address, usually the associated token account (ATA). A tracker that queries only the owner address for SPL token movements can report zero activity while the agent is spending.
To track correctly, resolve the owner address to its USDC token accounts and read transfers from those. A wallet can own more than one token account for the same mint, so check all of them, not just the derived ATA.
Counting the wrong USDC contract
Not everything named USDC is USDC. Each chain has one canonical USDC contract or mint issued by Circle, plus bridged variants and look-alike tokens that anyone can deploy with the same symbol.
Filter transfers by the contract address (on Base) or mint address (on Solana), never by token symbol. If you match on the symbol, a scam token airdropped to an agent wallet shows up as spend or income and throws off the total.
Mixing up gas and USDC spend
Gas fees are paid in the chain's native asset, ETH on Base and SOL on Solana, not in USDC. So a USDC spend total never includes what the agent paid to execute its transactions.
For most agent workloads on these chains, gas is small next to USDC payments. But an agent stuck in a retry loop can send a lot of transactions that each cost gas, even when little or no USDC moves. Watching transaction count per wallet alongside USDC volume catches that pattern.
Tracking per API key instead of per wallet
The chain records which address sent the funds, not which API key, process, or prompt triggered the send. If several agents share one wallet, on-chain data alone can't tell you which of them spent what.
The dependable unit for enforcing a budget is one wallet per agent, or per group of agents that share a budget. That way every outgoing transfer maps to a single owner with no guesswork. Off-chain logs can add detail about why a payment happened, but the wallet boundary is what makes the number itself trustworthy.
Alerting on unconfirmed or reorganized blocks
Very recent blocks can still be reorganized. An alert fired on the newest block can occasionally count a transfer that later disappears, or double-count one that gets re-included.
Base produces a block about every two seconds, and Solana slots are about 400 milliseconds, so waiting for a confirmation level before counting a transfer adds seconds, not hours. Store each transfer under a unique key, such as transaction hash plus log index on Base or signature plus instruction index on Solana, so re-reading the same block can never count it twice.
How to check whether your agent spend numbers are right
Pick one agent wallet and a fixed time window. Add up its outgoing canonical-USDC transfers straight from a block explorer, and compare that total with your tracker's figure for the same window. Any difference traces back to one of the failure modes above.
GetAgentCap reads USDC transfers on Base and Solana using only each agent's public address. It needs no wallet connection and no keys, so you can run this check against a fleet without giving any tool the ability to move funds.