EducationJul 28

Solana's validator admission ticket: what a missing BLS key costs

Since the first slot of epoch 1006, Solana builds its leader schedule and inflation reward distribution only from validators that have registered a BLS public key. A validator with no registered key gets no leader slots and no inflation rewards, and the stake delegated to it earns nothing either.

At the first slot of epoch 1006, around 23 July 2026, Solana began building its leader schedule and its inflation reward distribution only from validators that have registered a BLS public key on their vote account. A validator without one now gets zero leader slots and zero inflation rewards, and the stake delegated to it earns nothing either.

As of epoch 1008, 21 of 707 mainnet validators are still keyless. All 102 validators in Marinade's delegation set are registered.

SIMD-0357 rewrites how validators pay for consensus.

Side-by-side comparison of validator consensus costs. The left card, labelled today, shows vote transaction fees at about 2 SOL per epoch, charged per vote transaction, paid from the identity account, with cost tracking vote frequency. The right card, labelled after Alpenglow, shows the Validator Admission Ticket at 1.6 SOL per epoch, charged once at the epoch boundary, paid from the vote account, and flat regardless of vote count. A footnote credits SIMD-0357.
Side-by-side comparison of validator consensus costs. The left card, labelled today, shows vote transaction fees at about 2 SOL per epoch, charged per vote transaction, paid from the identity account, with cost tracking vote frequency. The right card, labelled after Alpenglow, shows the Validator Admission Ticket at 1.6 SOL per epoch, charged once at the epoch boundary, paid from the vote account, and flat regardless of vote count. A footnote credits SIMD-0357.

Almost none of that is live yet. What activated at epoch 1006 is an eligibility check, nothing more.

Two columns separating what the validator admission ticket feature gate does now from what waits for Alpenglow consensus. Live now: a vote account must hold a registered BLS public key, the voting set is capped at 2,000 validators, and slots are filled by stake weight, largest first. Not yet: the 1.6 SOL ticket being charged, vote fee payment moving from the identity account to the vote account, and on-chain vote transactions going away.
Two columns separating what the validator admission ticket feature gate does now from what waits for Alpenglow consensus. Live now: a vote account must hold a registered BLS public key, the voting set is capped at 2,000 validators, and slots are filled by stake weight, largest first. Not yet: the 1.6 SOL ticket being charged, vote fee payment moving from the identity account to the vote account, and on-chain vote transactions going away.

What the admission ticket requires

Four feature gates got the network here, in order.

Feature gateSIMDWhat it doesActivated
vote_state_v4SIMD-0185The VoteStateV4 vote-account layoutSlot 409,968,000, epoch 949
enable_bls12_381_syscallSIMD-0388BLS12-381 syscallsEpoch 986
bls_pubkey_management_in_vote_accountSIMD-0387Lets an operator register a BLS public key on the vote accountSlot 431,568,000, epoch 999
validator_admission_ticketSIMD-0357The gate that requires oneSlot 434,592,000, first slot of epoch 1006

Registration came from SIMD-0387; SIMD-0357 made it a condition of participation. The two get conflated easily, helped along by a stale cross-reference inside SIMD-0387 that mis-titles 0357 as a BLS key requirement. The field was settable for seven epochs before anything depended on it, which is why the change caught operators by surprise.

Funnel diagram of the epoch boundary admission check in four stages: every vote account, two filters asking whether it holds a registered BLS public key and the ticket plus rent for the next epoch, a cap at 2,000 sorted by stake descending with no tiebreak, and the ticket deducted to the incinerator. A branch below lists the consequences of failing either filter or missing the cut: left out of the voting set, no votes cast so no vote credits earned, and delegators seeing no staking rewards for the epoch.
Funnel diagram of the epoch boundary admission check in four stages: every vote account, two filters asking whether it holds a registered BLS public key and the ticket plus rent for the next epoch, a cap at 2,000 sorted by stake descending with no tiebreak, and the ticket deducted to the incinerator. A branch below lists the consequences of failing either filter or missing the cut: left out of the voting set, no votes cast so no vote credits earned, and delegators seeing no staking rewards for the epoch.

The funnel above is SIMD-0357 in full, once Alpenglow consensus is live. Today only the eligibility filter runs: the ticket is not charged, and an excluded validator keeps voting rather than falling silent.

In agave 4.1.x, the client mainnet runs, that filter is VoteAccounts::clone_and_filter_for_vat. What survives becomes epoch_stakes, read for both the leader schedule and the reward snapshot. Both call sites are gated on validator_admission_ticket alone, which is why enforcement did not wait for Alpenglow.

The 1.6 SOL charge is verified as not collected: the path that would collect it requires both alpenglow and validator_admission_ticket, and alpenglow is not active. 252 validators in the epoch 1008 leader schedule hold under 1.7 SOL in their vote account, which a live charge would rule out.

What happens to a validator without a key

No leader slots. Epoch 1008's leader schedule contains 664 identities and not one is keyless. The smallest stake in it is 53 SOL, so size is not what excluded them. None of the 21 held a slot in epoch 1007 or 1008, yet all of them did in 1006, whose schedule was computed before the gate.

No inflation rewards, for operator or stakers. On a keyless validator with 274,615 SOL of stake and 8% commission, commission rewards ran 6.64, 6.66 and 6.64 SOL across epochs 1002 to 1004, then stopped. For 1005, 1006 and 1007 there is no reward record at all, which is different from a record showing 0.000. A stake account with 101,928 SOL delegated to it was paid 28.41 then 28.36 SOL, then nothing, while a comparable account on a registered validator kept being paid through 1007.

Stakers absorb this too

This lands on every stake account delegated to that vote account. Nothing about those accounts is wrong. They earn nothing while the validator stays keyless.

Vote credits fall too, by a longer route

Median epoch vote credits, keyless against registered:

EpochKeyless medianRegistered medianRatioGate active
10046,891,1606,891,183100.00%no
10056,898,0006,897,988100.00%no
10064,840,8276,888,89470.27%yes
10074,834,5366,904,53170.02%yes
10082,810,5304,025,90969.81%yes
Grouped bar chart of median vote credits per epoch, keyless validators against registered validators, for epochs 1004 to 1008. The two cohorts sit level at about 6.89 million and 6.90 million credits in epochs 1004 and 1005. A vertical rule marks the admission ticket gate becoming active, after which the keyless median drops to 4.84 million in epoch 1006 and 4.83 million in epoch 1007 while the registered median holds near 6.89 million and 6.90 million. Epoch 1008 was still in progress at the snapshot, at 2.81 million keyless against 4.03 million registered.
Grouped bar chart of median vote credits per epoch, keyless validators against registered validators, for epochs 1004 to 1008. The two cohorts sit level at about 6.89 million and 6.90 million credits in epochs 1004 and 1005. A vertical rule marks the admission ticket gate becoming active, after which the keyless median drops to 4.84 million in epoch 1006 and 4.83 million in epoch 1007 while the registered median holds near 6.89 million and 6.90 million. Epoch 1008 was still in progress at the snapshot, at 2.81 million keyless against 4.03 million registered.

Both 1008 medians are lower because that epoch was still running at the snapshot. Registered controls tracked individually held 99.7% to 99.9% of the maximum across all five epochs, so the shortfall is specific to the keyless cohort.

The cause sits downstream of the same filter. StakedNodesUpdaterService builds the stake-weighted table leaders use to prioritize incoming transactions from that filtered set, so a keyless validator became an unstaked peer at the boundary, its votes are admitted late or not at all, and under timely vote credits (SIMD-0033) a later vote pays less. Credits land at roughly 70% of the registered median. Keyless validators do keep voting, rather than going delinquent. Public communication implied they would be dropped from consensus entirely. That is not what happens today.

Where the inference sits

The deprioritization is in the code. Why the shortfall settles near a consistent 70% is inference: leader implementations differ in how they treat an unstaked peer's vote traffic.

Where the cluster stands

Measured 2026-07-28 at 08:19 UTC, slot 435,707,691, during epoch 1008.

  • 707 validators, 686 registered, 21 without a key. 97.03% coverage by count.
  • 428,718,803 SOL of active stake, 99.7645% of it on registered validators. The 21 keyless validators hold 1,009,833 SOL, or 0.2355%.
  • Of those 21, 15 are actively voting and 6 are delinquent.
  • Marinade's delegation set: 102 of 102 registered, covering 6,282,295 SOL, and 100% coverage on each product.

Checking this needs raw account data

The getVoteAccounts RPC method does not expose the BLS field. Confirming whether a validator is registered means fetching the vote account and parsing the raw VoteStateV4 data.

What Marinade did

Anza's notice landed on 17 July 2026. Marinade checked its whole delegation set the same day and found validators holding 2.34M SOL of Marinade stake, 36.5% of the delegated book, with no key registered. Marinade's own validator already had a key set.

Marinade did not start from a cleaner position than the cluster: on 22 July about 2.5% of its stake still sat on keyless validators, against 0.75% of network stake. What it can claim is that the exposure reached zero before the boundary.

CheckMarinade stake on keyless validators
17 July2.34M SOL
21 July, morning~462,000 SOL
21 July, afternoon~278,000 SOL
22 July, one hour before the gate~158,000 SOL

Marinade posted the requirement in Discord and messaged operators directly, repeatedly. 30 registered inside those five days.

Two operators had not registered by the deadline, so Marinade moved 100% of its stake off both, about 144,000 SOL, timing deactivation so the stake went fully inactive exactly at the 1006 boundary. Residual exposure after the gate was about 2.58 SOL.

On 24 July a standing eligibility exclusion merged, covering 33 vote accounts network-wide that held 2.11M SOL, 0.49% of active stake at the time. It re-applies on every auction run, so the auction cannot delegate to a keyless validator without manual intervention.

note

The exclusion is an eligibility requirement, not a sanction. A missing BLS key is a configuration gap, not misconduct, and entries come off as soon as an operator registers.

What to do now

Two key cards side by side, an existing Ed25519 vote authority and a BLS public key still to register, above a four-step sequence: upgrade to Solana CLI v4.1.0 or later, generate the BLS keypair alongside the vote authority keypair rather than replacing it, register the compressed BLS public key to the vote account per Vote Account v4, and verify the key on-chain.
Two key cards side by side, an existing Ed25519 vote authority and a BLS public key still to register, above a four-step sequence: upgrade to Solana CLI v4.1.0 or later, generate the BLS keypair alongside the vote authority keypair rather than replacing it, register the compressed BLS public key to the vote account per Vote Account v4, and verify the key on-chain.
Two columns comparing account responsibilities after Alpenglow. The vote account gains the BLS public key, the ticket deduction and an empty votes list, and keeps vote credits and commission. The identity account keeps block rewards and priority fees, stops paying vote fees, and still needs a hot keypair. An operational takeaway reads that operators should top up the vote account rather than the identity account.
Two columns comparing account responsibilities after Alpenglow. The vote account gains the BLS public key, the ticket deduction and an empty votes list, and keeps vote credits and commission. The identity account keeps block rewards and priority fees, stops paying vote fees, and still needs a hot keypair. An operational takeaway reads that operators should top up the vote account rather than the identity account.

That split arrives with Alpenglow. Today vote fees still come from the identity account.

If you run a validator, fetch your vote account and confirm a BLS public key is set. A healthy dashboard is not evidence.

If you delegate to a single validator, check your stake account's reward history. A missing reward record for a recent epoch is the signal, not a zero one. Ask your operator whether a BLS key is registered.

Recovery is fast, and partial. Eligibility returns on its own at the next epoch boundary, as 19 late registrants showed: back to roughly 100% of the registered credit median, leader slots regained. Part of the missed inflation returns with them. Measured against Marinade's ledger records of mainnet stake rewards, the first payout after registering runs about 2.2 to 2.4 times the pre-gate baseline. One validator with about 144,000 SOL delegated to it was paid 104.0 SOL for epoch 1007 against a 43.7 SOL baseline, on unchanged stake, and four other late registrants match that ratio. The mechanism is credits_observed: a keyless validator keeps accruing partial vote credits, which convert into rewards once it is admitted again. Leader slots accrue no such counter, which is why the block rewards attached to them stay lost.

If you stake through Marinade, the delegation set was fully registered as of epoch 1008 and the auction screens out keyless vote accounts on every run.

The path to Alpenglow

Mainnet still runs TowerBFT across 4,055 nodes. The alpenglow feature gate, SIMD-0326, has no feature account on mainnet at all: not activated, not staged. It covers Votor, the voting half of the consensus rewrite; the propagation half, Rotor, gets its own proposal later. How Solana propagates blocks today covers what Turbine does now and what Rotor would change.

Four-stage rollout timeline. Agave 4.1 opens BLS registration on mainnet. The admission gate activates in July 2026 with the voting set capped at 2,000. An interim stage has shorter slots landing first, so validators vote more often. Agave 4.3 carries Alpenglow consensus, when ticket economics take effect and votes leave the ledger. A gating condition notes that activation waits on operator readiness rather than a date.
Four-stage rollout timeline. Agave 4.1 opens BLS registration on mainnet. The admission gate activates in July 2026 with the voting set capped at 2,000. An interim stage has shorter slots landing first, so validators vote more often. Agave 4.3 carries Alpenglow consensus, when ticket economics take effect and votes leave the ledger. A gating condition notes that activation waits on operator readiness rather than a date.

The admission ticket is groundwork for Alpenglow consensus, and enforcement of the ticket did not wait for Alpenglow to activate. That is the part operators missed.


Sources: Agave feature-set crate (feature gate names and activation slots), Agave bank.rs, Agave vote_account.rs and Agave staked_nodes_updater_service.rs in agave v4.1.0 (the filter path), Solana mainnet feature accounts and raw VoteStateV4 vote-account data for epochs 1002 to 1008 read 2026-07-28, SIMD-0326, Marinade delegation and auction records for epochs 1006 to 1008, Marinade's mainnet_beta_stakes BigQuery dataset (Marinade's record of mainnet stake and reward data, network-wide).


Related Articles

Portfolio
Earn
Borrow
Explore