Tutorial 3 of 7
Contract due diligence on USDC
Intermediate 8 min
Find out who can upgrade a token contract, how its contracts relate and what kind of account holds the admin key — with live chain data and a run history.
Before you integrate a token or accept it as collateral you want to know: can its code change, and who decides? The USDC contract due diligence template answers that with live data from Ethereum.
1. Open the template
File → Templates… → USDC contract due diligence. The address book has two entries: USDC (FiatTokenProxy) at 0xA0b86991…eB48, flagged Watch, and USDC upgrade admin. Four checks run on open:
| Check | Tool |
|---|---|
| Upgrade control of USDC | Contract Upgrade Explorer |
| Relationships of USDC | Smart Contract Relationship Graph |
| Account type of the USDC admin | Account Abstraction Explorer (smart-account mode) |
| USDC supply and large transfers | Stablecoin Flow Explorer |
These are live look-ups, so your numbers can differ from the ones below.
2. Upgrade control
On the day this tutorial was written the upgrade check reported FiatTokenProxy: legacy-zeppelinos → implementation FiatTokenV2_2; upgradeable: yes; controlled by eoa. The tool rates it High: Upgrades are controlled by a single externally owned account (USDC upgrade admin (0x807a…95d2)): one private key can replace the code. Chainscope puts the address-book label in front of every address it knows. The metrics show Proxy pattern, Upgradeable, Upgrade admin type and whether the implementation source is verified.
That is not automatically bad — many issuers keep upgrade keys in hardware — but it is the fact you need to write down. Use Notes in the check for your conclusion and set Re-check by to a date; it appears on the timeline and in the calendar export.
3. Relationships and the admin account
The relationship graph adds owner, deployer and implementation. Open Graph: the proxy, its implementation, the admin and the owner form one cluster. The Account type check tells you whether the admin is a plain wallet, a smart account or a contract such as a multisig — for USDC: The address 0x807a…95d2 has no code: it is a plain wallet or a smart account that is not deployed yet.
4. Suggested next checks
The dashboard proposes Upgrade control of 0x4350…02dd (the implementation itself can be a proxy) and Approvals of USDC upgrade admin (which contracts can move the admin wallet's tokens). Add the ones you need with Add check.
5. Re-run later and compare
Run the case again tomorrow with Run all. Live results older than the Live results are stale after (hours) setting (24 by default, File → Case settings…) are marked Result is stale, and the dashboard offers Run the 4 checks that need it.
Each check keeps its Run history with sparklines for numeric metrics and a list of new, resolved and changed items. Compare the last two runs opens the Compare view: metrics side by side with the change and percentage, and the findings only one run has. If the admin ever moves to a timelock or a multisig, the high finding shows up as resolved.
Next: bridges and pasted data.
Ready to try it?