Can this protocol change under me?
If a DeFi program is upgradeable, the authority can replace its logic. Knowing that is the first step in judging the risk.
DWG NO. PDX-001 · SHEET 1 OF 6 · REV LIVE
Every Solana program is either frozen forever or upgradeable by someone. ProgramDex reads the program's accounts straight from the chain and draws the answer: loader, upgrade authority, last deploy slot, size and rent — as a live schematic.
2VyQ72GWXKXLEu3qGfnSoGpTzegtnRxWe2977BARd6wH
SHEET 2 · INSPECTOR
Paste a program ID. We make 3–4 read-only RPC calls: the program account, its ProgramData + authority, and recent activity on the ProgramData account.
Upgrades, authority changes and extensions write to this account. Ordinary use of the program does not.
SHEET 3 · CATALOGUE
Pick a group and scan it: two batched RPC calls read every program and its ProgramData at once. Names are descriptive labels for widely used program IDs; status is read live, not from a list.
| Program | ID | Loader | Status | Upgrade authority | Last deploy slot | Size | Inspect |
|---|
SHEET 4 · PROCEDURE
getAccountInfo returns the owner (the loader) and whether the account is executable. For the upgradeable loader, its 36 bytes hold one thing: the ProgramData address.
We fetch only the first 45 bytes of ProgramData: a 4-byte tag, the 8-byte deploy slot, a 1-byte “has authority” flag and the 32-byte authority. No megabytes of code are downloaded.
The authority's own account is read too: is it a plain system account (a wallet or a program-derived vault), or owned by another program such as a multisig?
The deploy slot is converted to a time using the ProgramData's own recent transactions when available, otherwise estimated from the live slot pace and marked “≈”.
SHEET 5 · APPLICATIONS
If a DeFi program is upgradeable, the authority can replace its logic. Knowing that is the first step in judging the risk.
An authority owned by a multisig program is different from one plain key. We show the authority's owner so you can tell.
The deploy slot tells you whether code shipped yesterday or two years ago — handy after an incident or a surprise feature.
Scanning a catalogue group reveals programs that share one upgrade authority — one key, many contracts.
An authority of “None” means the code can never be upgraded again. Some core programs show exactly that.
ProgramData size reveals how much headroom the deployer allocated for future versions, and how much SOL is locked as rent.
SHEET 6 · REFERENCE
On Solana, code and state live in separate accounts. A program is an account flagged executable and owned by a loader — a built-in program that knows how to verify and run the compiled code (an ELF file built for the Solana virtual machine). Which loader owns a program decides whether it can change.
BPFLoader2111…) — the older, non-upgradeable loader. Code lives directly in the program account and can never be replaced. The Memo and Associated Token Account programs are examples.BPFLoaderUpgradeab1e…) — the default for nearly every modern program. The program account stays small (36 bytes) and permanent; the code lives in a separate ProgramData account that can be rewritten by the upgrade authority.LoaderV4111…) — a newer loader where the program account holds the code plus a header with an authority and a status: retracted, deployed or finalized (finalized means immutable).The authority writes new code into a temporary buffer account, then sends an Upgrade instruction. The loader verifies the ELF, copies it into ProgramData, and stamps the current slot into the header — the “last deploy slot” shown here. The program ID never changes, so users and integrations keep pointing at the same address while the logic underneath is replaced.
Setting the authority to None is a one-way door: no one can upgrade the program again. Teams often keep upgradeability early on to fix bugs and later hand the authority to a multisig or governance program, or renounce it entirely. Several core SPL programs have been migrated to the upgradeable loader with no authority, which is why they show up here as “immutable” despite the loader name.
Upgradeability is about who can change the code, not whether the code is safe. An immutable program can still contain a bug, and an upgradeable one can be well governed. Match the deployed bytes against published source with a verified-build tool if you need certainty about what the code does.
APPENDIX A
No. It means someone can change it. Most active protocols keep that ability to fix bugs. What matters is who holds the authority and how they're governed.
Partly. If the authority account is owned by a multisig program, we show that owner. Many modern multisigs use a program-derived “vault” address that is owned by the System Program and holds no data, which looks the same as an ordinary wallet on-chain. We say so rather than guess.
Public RPC nodes keep only recent block history, so the exact time of an old slot often isn't available. We then estimate from the live slot pace, which drifts for older slots.
Deployers can allocate extra space up front so future upgrades fit. The figure is the allocated ProgramData size, not necessarily the current code length.
ProgramDex only reads loader data. IDLs and verified builds are separate systems; we don't fetch or display them.
No. Requests go straight to the public Solana RPC with the addresses being inspected. There are no accounts, wallets, analytics or cookies.
The public node allows at most 10 accounts per batched call, so each group is limited to 10 programs and costs two calls.
getAccountInfo, getMultipleAccounts, getSignaturesForAddress, getEpochInfo, getRecentPerformanceSamples.