← All tutorials · Chainscope

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:

CheckTool
Upgrade control of USDCContract Upgrade Explorer
Relationships of USDCSmart Contract Relationship Graph
Account type of the USDC adminAccount Abstraction Explorer (smart-account mode)
USDC supply and large transfersStablecoin 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?

Launch Chainscope →