Each protocol gets a StageA protocol's headline level, from Stage 0 (the team can change everything quickly) to Stage 2 (users are protected even from the team). Stages describe control, not code security. as its headline and a Low, Medium or High rating on six factors. There is no single score: a composite hides trade-offs.
Introduction
Celebtir reads who controls each protocol straight from the chain: who can upgrade its programs, how fast, who holds its admin keysA key stored in a protocol's own accounts that can change parameters, pause the protocol or move funds, without upgrading its code. and where its prices come from. Every rating links to the account and slotSolana's clock: each fact records the slot at which it was read. it was read from. Published versions: v0.1, v0.2. Thresholds on this page are read from methodology/v0.2.toml, the same file the scorer uses.
Principles
EvidenceThe on-chain account, field and slot a fact was read from, with a link to check it on Solscan., not claims. Every rating links to the on-chain account and slot it was read from. Docs and announcements never change a rating.
Weakest linkA protocol is rated by its weakest core program: one single-key program caps the whole protocol.. A protocol is rated by its weakest core program: one single-key program caps the whole protocol.
Effective controllerWhoever can finally act once control is followed to its end: through vaults, multisigs and config authorities.. Control is followed to its end. If a multisigAn account that acts only when enough of its members approve. On Solana this is usually a Squads multisig.'s config authorityA key that can change a Squads multisig's members, threshold and time lock without a vote. If it is set, it, not the multisig, is the real controller. is one key, that key is the real controller, with no delay.
Unknown upgrade control makes a protocol Unrated. Other Unknown factors cap the Stage at 0. A failed read is never guessed; an observed but unrecognized controller is distinct from an unavailable read.
Independent factors. The six ratings are never added up: each answers its own question.
Assessment scope
Protocols
The protocols in the registry, on Solana: their core programs, admin accounts, price feeds and the programs they call with user funds.
Tokens
Tokens are rated on four factors and get no Stage: supply control (the mint authorityA key that can create new supply of a token.), freeze and seize (freeze authorityA key that can freeze any holder's balance of a token, so it cannot be moved., permanent delegateA Token-2022 extension that lets one key move or burn tokens from any wallet, without the holder's signature., pause), transfer restrictions (transfer hookA Token-2022 extension that runs a program on every transfer; that program can refuse transfers., transfer fee, default-frozen accounts) and provenance (native or bridged).
Value by control type
Each protocol's TVLTotal value locked: the value of assets deposited in a protocol, from DefiLlama. Context only; it never changes a rating. is assigned to the class of its weakest core program's controller: single key, unrecognized, multisig without delay, multisig with delay, or immutableNo key can change it: the upgrade authority was removed, or the program was deployed with a loader that cannot upgrade.. TVL and activity are context: they never change a rating.
Six risk factors
Upgrade control
Who can replace the code?
Low
Immutable, or a multisig of 5+ signersA multisig member with the Vote permission. Celebtir counts signers, not all members, when it compares a threshold. at a 60%+ thresholdHow many signers of a multisig must approve before it can act.
Medium
A multisig of 3+ signers at a 50%+ threshold
High
A single key, a smaller multisig, a multisig whose config authority is one key, or a controller Celebtir does not recognize
Unknown
Celebtir could not read this on-chain data. Unknown is neutral, but it caps the Stage at 0.
Not applicable
This does not apply to the protocol (for example, it uses no price feeds).
In the current snapshot
Binance Staked SOLLowSquadsThe multisig program most Solana protocols use to hold upgrade and admin keys (version 4 is supported). v3 multisig, 6 of 10 voters, time lock 0 s
Drift Staked SOLMediumSquads v3 multisig, 6 of 11 voters, time lock 0 s
stHYPEHighno delay can be read for an unrecognized controller
Admin powers
Can a key change parameters, pause, or move funds outside an upgrade?
Low
No admin key, or only parameter changes behind a time lock of 24 h or more
Medium
Parameter, pause or fund powers held by a multisig that meets the Medium upgrade-control bar
High
One key, or a weaker multisig, holds an admin power
Unknown
Celebtir could not read this on-chain data. Unknown is neutral, but it caps the Stage at 0.
Not applicable
This does not apply to the protocol (for example, it uses no price feeds).
In the current snapshot
Binance Staked SOLLowthe registry lists no admin accounts; the evidence is the core programs' upgrade reads
Drift Staked SOLLowthe registry lists no admin accounts; the evidence is the core programs' upgrade reads
Forward Industries SOLLowthe registry lists no admin accounts; the evidence is the core programs' upgrade reads
GMX SolanaMediumauthority can change parameters, held by Squads v4 multisig, 4 of 7 voters, time lock 600 s
Hyperbeat LSTLowthe registry lists no admin accounts; the evidence is the core programs' upgrade reads
JitoLowthe registry lists no admin accounts; the evidence is the core programs' upgrade reads
Jupiter LendMediumauthority can change parameters, held by Squads v4 multisig, 4 of 7 voters, time lock 6 h; authority can change parameters, held by Squads v4 multisig, 4 of 7 voters, time lock 6 h; authority can change parameters, held by Squads v4 multisig, 4 of 7 voters, time lock 6 h
Jupiter PerpsMediumadmin can change parameters, held by Squads v3 multisig, 4 of 7 voters, time lock 0 s
Jupiter Staked SOLLowthe registry lists no admin accounts; the evidence is the core programs' upgrade reads
Kamino LendHighlending_market_owner can change parameters, held by Squads v4 multisig, 4 of 10 voters, time lock 12 h
Kinetiq kHYPELowthe registry lists no admin accounts; the evidence is the core programs' upgrade reads
Morpho BlueMediumowner() can change parameters, held by Safe multisig, 5 of 9 voters, time lock 0 s
OrcaLowfee_authority can change parameters behind a 24 h time lock
PumpSwapMediumadmin can pause, held by Squads v4 multisig, 3 of 4 voters, time lock 0 s
RaydiumHighowner can change parameters, held by single key proj…k416
stHYPELowthe registry lists no admin accounts; the evidence is the core programs' upgrade reads
Code transparency
Does the deployed binary match public source?
Low
A verified build that matches what is deployed
Medium
Source is public but the build is not verified
High
No public source
Unknown
Celebtir could not read this on-chain data. Unknown is neutral, but it caps the Stage at 0.
Not applicable
This does not apply to the protocol (for example, it uses no price feeds).
Hyperbeat LSTLow0x9d…2538: verified build of https://repo.sourcify.dev/999/0xd7…9353 at sourcify:match; 0xCe…8E0b: verified build of https://repo.sourcify.dev/999/0xB8…F370 at sourcify:exact_match
JitoMediumsource public at jito-foundation, but the deployed build is not verified
Jupiter LendMediumjup3…ndc9: source public at jup-ag, but the deployed build is not verified; jupZ…T9Vd: source public at jup-ag, but the deployed build is not verified; jupe…3wZC: source public at jup-ag, but the deployed build is not verified; jupg…N6XS: source public at jup-ag, but the deployed build is not verified; jupr…Bdzi: source public at jup-ag, but the deployed build is not verified
Jupiter PerpsMediumsource public at jup-ag, but the deployed build is not verified
stHYPELowverified build of https://repo.sourcify.dev/999/0xe7…E057 at sourcify:exact_match
Oracle dependency
Where do prices come from?
Low
An established oracle network (Pyth, Switchboard, Chainlink) with a fallback source
Medium
A single established oracle network
High
A protocol-run or single-signer feed, or an owner program Celebtir does not recognize
Unknown
Celebtir could not read this on-chain data. Unknown is neutral, but it caps the Stage at 0.
Not applicable
This does not apply to the protocol (for example, it uses no price feeds).
In the current snapshot
Binance Staked SOLNot applicablethe registry lists no price feeds; the evidence is the core programs' upgrade reads
Drift Staked SOLNot applicablethe registry lists no price feeds; the evidence is the core programs' upgrade reads
Forward Industries SOLNot applicablethe registry lists no price feeds; the evidence is the core programs' upgrade reads
GMX SolanaUnknownprice feeds not yet listed in the registry
Hyperbeat LSTNot applicablethe registry lists no price feeds; the evidence is the core programs' upgrade reads
JitoNot applicablethe registry lists no price feeds; the evidence is the core programs' upgrade reads
Jupiter LendUnknownprice feeds not yet listed in the registry
Jupiter PerpsMediumBTC custody: single oracle network (pyth), no fallback; ETH custody: single oracle network (pyth), no fallback; SOL custody: single oracle network (pyth), no fallback; USDC custody: single oracle network (pyth), no fallback; USDT custody: single oracle network (pyth), no fallback
Jupiter Staked SOLNot applicablethe registry lists no price feeds; the evidence is the core programs' upgrade reads
Kamino LendHighSOL reserve: prices come from a protocol-run feed
Kinetiq kHYPENot applicablethe registry lists no price feeds; the evidence is the core programs' upgrade reads
Morpho BlueUnknownprice feeds not yet listed in the registry
OrcaNot applicablethe registry lists no price feeds; the evidence is the core programs' upgrade reads
PumpSwapNot applicablethe registry lists no price feeds; the evidence is the core programs' upgrade reads
RaydiumNot applicablethe registry lists no price feeds; the evidence is the core programs' upgrade reads
stHYPENot applicablethe registry lists no price feeds; the evidence is the core programs' upgrade reads
Dependencies
Which other programs does it call into with user funds?
Low
Every called program rated Low on upgrade control
Medium
Any called program rated Medium
High
Any called program rated High
Unknown
Celebtir could not read this on-chain data. Unknown is neutral, but it caps the Stage at 0.
Not applicable
This does not apply to the protocol (for example, it uses no price feeds).
PumpSwapMediumcallee 6EF8…wF6P is Squads v4 multisig, 3 of 4 voters, time lock 0 s; callee pfee…ojVZ is Squads v4 multisig, 3 of 4 voters, time lock 0 s
stHYPELowcalls no other programs with user funds (declared in the registry, not traced from transactions)
Rating criteria
Every factor side by side. Thresholds are read from methodology/v0.2.toml.
Factor
Question
Low
Medium
High
Upgrade control
Who can replace the code?
Immutable, or a multisig of 5+ signers at a 60%+ threshold
A multisig of 3+ signers at a 50%+ threshold
A single key, a smaller multisig, a multisig whose config authority is one key, or a controller Celebtir does not recognize
Upgrade delay
How long between approval and a new version going live?
5 days or more, or immutable
24 h to 5 days
Under 24 h, or none
Admin powers
Can a key change parameters, pause, or move funds outside an upgrade?
No admin key, or only parameter changes behind a time lock of 24 h or more
Parameter, pause or fund powers held by a multisig that meets the Medium upgrade-control bar
One key, or a weaker multisig, holds an admin power
Code transparency
Does the deployed binary match public source?
A verified build that matches what is deployed
Source is public but the build is not verified
No public source
Oracle dependency
Where do prices come from?
An established oracle network (Pyth, Switchboard, Chainlink) with a fallback source
A single established oracle network
A protocol-run or single-signer feed, or an owner program Celebtir does not recognize
Dependencies
Which other programs does it call into with user funds?
Every called program rated Low on upgrade control
Any called program rated Medium
Any called program rated High
Token factors · methodology v0.2
Tokens have four independent factors and no Stage. The recorded scorer output supplies the reason, improvement criterion and evidence for each finding. Token issuer powers do not automatically determine the rating of an accepting protocol.
freeze and seize
Recorded example (JLP): balances can be frozen by unrecognized controller AVzP…QK49 owned by program PERP…qQJu
Improvement criterion: remove any permanent delegate and hold freeze or pause powers in a multisig → MEDIUM
Stages describe who can change the protocol and how fast. They don't measure code security. A Stage is not a safety score and is never combined with the six factors.
Stage 0Rated, with requirements for Stage 1 still missing.
Stage 1Changes need many signers and give users time to react.
Stage 2Meets the published Stage 2 control requirements.
Unrated means the protocol cannot be assessed: its core programs are not identified, or a core program's controller could not be read. Stages follow Celebtir's versioned control requirements below. They do not guarantee protection from exploits or all team actions.
Stage 0 requires
core programs identified in the registry
public source for every core program
upgrade control readable for every core program
Stage 1 requires
admin powers rated Low or Medium
no multisig has a single-key config authority
every factor could be read (Unknown caps the Stage at 0)
upgrade control rated Low or Medium
upgrade delay of the Stage 1 minimum, unless upgrades need an emergency multisig
verified buildsProof that the deployed program was built from a public commit, checked by OtterSec's verification service. for all core programs
Stage 2 requires
core programs immutable, or upgradeable only through on-chain governance with a long delay
no key can move or freeze user funds
Evidence collection
Facts are read from Solana RPC each day and recorded with the account, field and slot they came from. Build verification comes from OtterSec, and TVL, fees and volume from DefiLlama.
How missing data is shown
Unknown
Celebtir could not read this on-chain data. Unknown is neutral, but it caps the Stage at 0.
Unrated
This protocol cannot be assessed yet: a core program's controller could not be read, or its source is not public.
Not applicable
This does not apply to the protocol (for example, it uses no price feeds).
Data unavailable
The external source (DefiLlama or OtterSec) did not answer. Ratings are unaffected.
Hyperliquid
HyperEVM sources
Upgrade control: the EIP-1967 admin slot of each proxy, followed through its ProxyAdmin owner to a key, a Safe multisig or a timelockA wait between approving a change and the change taking effect, which gives users time to leave.. UUPS proxies are followed through the owner of the implementation.
Upgrade delay: a timelock's minimum delay. A timelock whose admin role is held by an outside address counts as no delay, because that admin can change the delay at once.
Admin powers: the owner, or the role holders the registry names, of each contract, confirmed on chain.
Code transparency: verified source on Sourcify, then on HyperEVMScan when a key is configured; for a proxy, the implementation is checked.
Dependencies: the contracts the registry declares. They are not traced from transactions yet, and each reason says so.
HIP-3 anchor block
The Hyperliquid info API returns no block height. Every HIP-3 fact is anchored to the HyperEVM block read just before the request, and the site shows that block, never a guessed time.
Why HIP-3 DEXs are not rated yet
A HIP-3 market can never be immutable: its deployer must keep pushing prices, can halt and settle markets, and sets the caps. The six factors would rate every deployer the same way, so this version lists the facts (deployer, oracleAn account that publishes prices a protocol reads, for example to value collateral or trigger liquidations. updater, delegated actions, caps and stake) without ratings or a Stage. Rules for HIP-3 arrive with a later methodology version, after public feedback.
Limitations
Value by control type is a simplification: free sources do not report TVL per program, so all of a protocol's value is placed under its weakest link.
Recomputable, within limits. Anyone can re-score any published day's facts with the CLI and get the same ratings. Solana RPC cannot return an account's past state, so nobody can re-fetch yesterday's raw data: live checks can only confirm today's.
Ratings describe on-chain configuration only. They do not audit code, and they may contain errors: report one from the About page.
Version history
Changelog
v0.2 verifies declared program-derived authority addresses and rates them by the program's upgrade control. Lending and perpetuals without registered feeds are Unknown. Delayed value control requires at least the Medium upgrade-delay threshold. Historical v0.1 scores retain their original rules.
Every change to a published methodology file gets an entry here. A change never edits an old v<version>.toml: it adds a new version, so any past day can be re-scored exactly (SNAP-4).
v0.1 (2026-10-17)
First published version.
Six factors rated Low, Medium or High: upgrade control, upgrade delay, admin powers, code transparency, oracle dependency and dependencies. No composite score.
Stages 0 to 2, plus Unrated, with Stage 1 thresholds mirroring L2Beat's (a 5-day exit window, or an emergency multisig of 8+ signers at 75%+).
Weakest link: a protocol is rated by its weakest core program.
A multisig whose config authority is one key counts as that key, with no delay (ADR 005).
A controller Celebtir cannot recognize rates High and caps the Stage at 0 (ADR 002).
Public but unverified source is Stage 0, with the verified build listed as missing (ADR 001).
An admin power's delay comes from the time lock of the multisig that holds it (ADR 003).
Tokens are rated on four factors (supply control, freeze and seize, transfer restrictions, provenance) and get no Stage.
v0.2 - 2026-10-21
Verified registry PDA controllers rate by the controlling program's upgrade authorityThe key or account that can replace a Solana program's code. It is stored in the program's ProgramData account..
Lending and perpetuals with no registered feeds have Unknown oracle dependency.
Delayed value control requires at least the Medium upgrade-delay threshold (24 hours).
Explicit v0.1 replay retains its original scores and serialized reasons. See ADR 025.
v0.2 risk sentences describe configuration powers without claiming withdrawal is impossible; every elevated token factor includes a reason.
The file
# Celebtir methodology v0.2: every threshold the scorer uses (SCO-2).
# The rules themselves are in the PRD's "Risk methodology" section. Changing a
# number here changes ratings without a code change, and needs a changelog entry.
version = "0.2"
# Who can replace the code?
# Low: immutable, or a multisig with >= low_min_voters voters at >= low_min_threshold_pct.
# Medium: a multisig with >= medium_min_voters voters at >= medium_min_threshold_pct.
# High: a single key, a smaller multisig, or a multisig whose config authority is one key.
# Ratios use voters (members with the Vote permission), not total members.
[upgrade_control]
low_min_voters = 5
low_min_threshold_pct = 60
medium_min_voters = 3
medium_min_threshold_pct = 50
# How long between approval and a new version going live?
# Low: >= low_min_secs, or immutable. Medium: >= medium_min_secs. High: less, or none.
[upgrade_delay]
low_min_secs = 432000 # 5 days
medium_min_secs = 86400 # 24 hours
# Can a key change parameters, pause or move funds outside an upgrade?
# Low: no admin key, or parameters-only power held behind a time lock of at least
# low_min_time_lock_secs (ADR 003). Medium: parameters or pause held by a multisig
# meeting the medium multisig bar above. High: anything else.
[admin_powers]
low_min_time_lock_secs = 86400 # 24 hours
# Where do prices come from? Oracle owner programs are classified by registry/oracles.yaml.
# Low: an established network with a fallback. Medium: a single established network.
# High: a protocol-run or single-signer feed, or an unclassified owner.
[oracle_dependency]
required_for_categories = ["lending", "perps"]
established_networks = ["pyth", "switchboard", "chainlink"]
# Stage 1, "Guarded" (mirrors L2Beat's Stage 1).
[stage1]
min_upgrade_delay_secs = 432000 # 5 days
emergency_min_voters = 8
emergency_min_threshold_pct = 75
# Stage 2, "User-protected".
[stage2]
governance_min_delay_secs = 2592000 # 30 days