Attributing USDC transfers to agents when the chain doesn't tell you who paid
GetAgentCap team · published 9/12/2026
A USDC Transfer event carries a from address, a to address, and an amount — nothing that says which of your agents sent it. We attribute a transfer to an agent by matching the event's from address against the wallet you registered for that agent, and that match is only as good as your one-wallet-per-agent discipline.
What the chain actually gives us
Every USDC transfer on Base or Solana emits an event with a sender, a recipient, and an amount. That's the entire payload. There is no memo field a wallet is required to fill in, no agent ID, no invoice number — the token contract doesn't know or care what spent the money.
So attribution isn't a chain feature we're reading. It's a mapping we hold: you tell us wallet 0xabc... is "research-agent", and every outbound transfer we see from that address gets that label. The chain confirms the money moved. We supply the story about who moved it.
Where this breaks
If two agents share one wallet, we can't split their spend — every transfer from that address gets attributed to whichever agent name you attached to it. We don't try to guess a split from amount patterns or timing; we'd rather show you an honest "can't distinguish" than a confident-looking wrong answer.
We also don't watch internal transfers between your own wallets. If agent A's wallet funds agent B's wallet and B then pays a vendor, our ledger shows two outbound transfers from two of your agents, not one logical payment — that's a known gap, not a bug we've silently patched over.
What this means for your fleet
One wallet per agent is the whole trick. If you're running a fleet of five agents, five wallets gets you attribution you can trust; two agents sharing a hot wallet gets you a spend total but not a breakdown. Decide which one you actually need before you wire up funding.