Who can still change this contract?
Paste-free answers for 40 widely-used contracts. For each one: can the code be replaced, who holds the key that replaces it, what the privileged role can still do to holders — and whether a live bug bounty pays for finding a hole in it. Every claim links to the evidence it came from.
Why this exists: a block explorer shows you a storage slot. It does not tell you that the address in it is a plain wallet, that the wallet can mint, and that a live program pays six figures for a bug in the same code. Those facts sit in four different places. Here they sit in one.
Reading the Powers column: the first number is capabilities the contract’s own
published interface declares. The second, marked +n?, is selectors found in the compiled code
that were not confirmed by a source — a swap router shows mint there because it
calls mint on a pool, not because it can mint. The two are never added together.
| Contract | Chain | Upgradeable | Admin | Powers (confirmed + unconfirmed) | Bounty |
|---|---|---|---|---|---|
AERO0x9401…8631 |
base | not found | none found | 1 | — |
Aerodrome Router0xcf77…4e43 |
base | not found | none found | 0 +1? | — |
cbBTC0xcbb7…33bf |
base | Yes | single key | 6 | — |
cbETH0x2ae3…ec22 |
base | Yes | contract | 3 | — |
Compound III cUSDCv3 (Base)0xb125…eb2f |
base | Yes | contract | 2 | — |
DEGEN0x4ed4…efed |
base | not found | contract | 4 | — |
L2StandardBridge0x4200…0010 |
base | Yes | contract | 1 +2? | — |
Morpho Blue0xbbbb…ffcb |
base | not found | contract | 2 | yes |
Uniswap V3 Factory (Base)0x3312…fdfd |
base | not found | contract | 1 | yes |
USDC (Base)0x8335…2913 |
base | Yes | single key | 6 | — |
WELL (Moonwell)0xa885…96ae |
base | Yes | contract | 4 | — |
WETH (Base)0x4200…0006 |
base | not found | none found | 0 | — |
Aave v3 Pool0x8787…a4e2 |
ethereum | Yes | none found | 3 | — |
Compound III cUSDCv30xc3d6…cdc3 |
ethereum | Yes | contract | 2 | — |
Curve 3pool0xbebc…f1c7 |
ethereum | not found | contract | 0 +2? | — |
DAI0x6b17…1d0f |
ethereum | not found | none found | 2 | — |
EigenLayer StrategyManager0x8586…075a |
ethereum | Yes | contract | 3 | — |
ENS Registry0x0000…2e1e |
ethereum | not found | none found | 1 | — |
FRAX0x853d…b99e |
ethereum | not found | none found | 3 | — |
Lido Withdrawal Queue0x889e…f9b1 |
ethereum | Yes | contract | 2 | — |
MakerDAO Vat0x35d1…492b |
ethereum | not found | none found | 0 | — |
Permit20x0000…8ba3 |
ethereum | not found | none found | 0 | — |
Safe singleton 1.4.10x4167…461a |
ethereum | not found | none found | 0 | — |
Seaport 1.60x0000…b395 |
ethereum | not found | none found | 0 | — |
stETH0xae7a…fe84 |
ethereum | Yes | none found | 2 | yes |
Uniswap V2 Router 020x7a25…488d |
ethereum | not found | none found | 0 +1? | yes |
Uniswap V3 Factory0x1f98…f984 |
ethereum | not found | contract | 1 | yes |
USDC0xa0b8…eb48 |
ethereum | Yes | single key | 6 | — |
USDT0xdac1…1ec7 |
ethereum | not found | contract | 5 | — |
WBTC0x2260…c599 |
ethereum | not found | contract | 3 | — |
WETH90xc02a…6cc2 |
ethereum | not found | none found | 0 | — |
wstETH0x7f39…2ca0 |
ethereum | not found | none found | 0 | — |
Aave v3 Pool (Polygon)0x794a…14ad |
polygon | Yes | none found | 3 | — |
QuickSwap Router0xa5e0…78ff |
polygon | not found | none found | 0 +1? | yes |
USDC (native, Polygon)0x3c49…3359 |
polygon | Yes | single key | 6 | — |
USDC.e (bridged)0x2791…4174 |
polygon | Yes | none found | 5 | — |
USDT (Polygon)0xc213…8e8f |
polygon | Yes | none found | 4 | — |
WBTC (Polygon)0x1bfd…bfd6 |
polygon | Yes | none found | 2 | — |
WETH (Polygon)0x7ceb…f619 |
polygon | not found | none found | 1 | — |
WPOL / WMATIC0x0d50…1270 |
polygon | not found | none found | 0 | — |
The whole table as data
Free, no key, CC0: /c/index.json —
and one file per contract at /c/<chain>/<address>.json with the full evidence.
For an address that is not on this list, a live lookup is $0.05.
What this is not
It is not an audit and there is no safety score here — deliberately. A score invites you to stop reading, and the interesting part is always which power, held by whom. Upgradeable is not a synonym for dangerous: most large protocols are upgradeable on purpose. What matters is who holds the key and what stands between them and your balance.