Who can still change this contract?

Paste-free answers for 58 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.

Contracts58
Upgradeable21
Admin is one key5
Source unverified0

See what changed → — the same 58 contracts are re-read every day and diffed against the day before, so an implementation swap or an owner moving to a different key shows up with its before and after. RSS.

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.

ContractUpgradeableAdminPowers (confirmed + unconfirmed)Bounty
Base15 contracts
AERO
0x9401…8631
not foundnone found2—
Aerodrome Router
0xcf77…4e43
not foundnone found0 +1?—
BRETT
0x532f…42e4
not foundnone found4—
cbBTC
0xcbb7…33bf
Yessingle key7—
cbETH
0x2ae3…ec22
Yescontract3—
Compound III cUSDCv3 (Base)
0xb125…eb2f
Yescontract3—
DEGEN
0x4ed4…efed
not foundcontract4—
L2StandardBridge
0x4200…0010
Yescontract1 +2?—
Morpho Blue
0xbbbb…ffcb
not foundcontract2yes
OptimismMintableERC20
0x0b3e…7e1b
not foundnone found3yes
Uniswap V3 Factory (Base)
0x3312…fdfd
not foundcontract1yes
USDbC
0xd9aa…b6ca
Yescontract3—
USDC (Base)
0x8335…2913
Yessingle key7—
WELL (Moonwell)
0xa885…96ae
Yescontract4—
WETH (Base)
0x4200…0006
not foundnone found0—
Ethereum35 contracts
AAVE
0x7fc6…dae9
Yescontract1yes
Aave v3 Pool
0x8787…a4e2
Yesnone found3—
Compound III cUSDCv3
0xc3d6…cdc3
Yescontract3—
CRV
0xd533…cd52
not foundcontract1—
crvUSD
0xf939…1b4e
not foundnone found2—
Curve 3pool
0xbebc…f1c7
not foundcontract0 +2?—
DAI
0x6b17…1d0f
not foundnone found3—
EigenLayer StrategyManager
0x8586…075a
Yescontract4—
ENS Registry
0x0000…2e1e
not foundnone found1—
FRAX
0x853d…b99e
not foundnone found2—
GHO
0x40d1…6c2f
not foundnone found2—
LDO
0x5a98…1b32
not foundnone found2—
Lido Withdrawal Queue
0x889e…f9b1
Yescontract3—
LINK
0x5149…86ca
not foundnone found0—
MakerDAO Vat
0x35d1…492b
not foundnone found5—
MKR
0x9f8f…79a2
not foundnone found4—
PEPE
0x6982…1933
not foundnone found2—
Permit2
0x0000…8ba3
not foundnone found0—
PYUSD
0x6c3e…a0e8
Yessingle key7—
rETH
0xae78…6393
not foundnone found1—
Safe singleton 1.4.1
0x4167…461a
not foundnone found1—
Seaport 1.6
0x0000…b395
not foundnone found0—
SHIB
0x95ad…c4ce
not foundnone found0—
stETH
0xae7a…fe84
Yesnone found2yes
sUSDe (Ethena)
0x9d39…3497
not foundcontract5—
TUSD
0x0000…b376
Yescontract6—
UNI
0x1f98…f984
not foundnone found2—
Uniswap V2 Router 02
0x7a25…488d
not foundnone found0 +1?yes
Uniswap V3 Factory
0x1f98…f984
not foundcontract1yes
USDC
0xa0b8…eb48
Yessingle key7—
USDe (Ethena)
0x4c9e…68b3
not foundcontract4—
USDT
0xdac1…1ec7
not foundcontract6—
WBTC
0x2260…c599
not foundcontract4—
WETH9
0xc02a…6cc2
not foundnone found0—
wstETH
0x7f39…2ca0
not foundnone found0—
Polygon8 contracts
Aave v3 Pool (Polygon)
0x794a…14ad
Yesnone found3—
QuickSwap Router
0xa5e0…78ff
not foundnone found0 +1?yes
USDC (native, Polygon)
0x3c49…3359
Yessingle key7—
USDC.e (bridged)
0x2791…4174
Yesnone found5—
USDT (Polygon)
0xc213…8e8f
Yesnone found3—
WBTC (Polygon)
0x1bfd…bfd6
Yesnone found2—
WETH (Polygon)
0x7ceb…f619
not foundnone found1—
WPOL / WMATIC
0x0d50…1270
not foundnone found0—

Nothing in the registry matches . This list is 58 contracts across Base, Ethereum and Polygon — it is a fixed set, not a search engine. Check any other address → $5.

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 page for any contract, $5 — or the same data per call for software, $0.05.

Ask it from inside your AI assistant

This table is also an MCP server, so Claude, Cursor or any MCP client can answer “who can still change this contract?” without leaving the chat. No API key, no account. Nothing to install — point your client at the hosted endpoint:
claude mcp add --transport http contract-powers https://agent.zbang.net/api/mcp
Or run it locally over stdio: npx -y github:ofirbaranesad-agent/contract-powers-mcp — source and setup on GitHub. Both transports carry the same four tools, imported from the same file.

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.