solana-tpu, ephemeral ed25519 client identity)
instead of going through an RPC sendTransaction. The screen is a read-only
view. Every value it shows is reported by the engine module
mod_solana_tpu, which is configured where the engine is deployed — not from
this console.
This page explains what the module owns, what each reported key means, and how
to read the per-leader numbers.
What mod_solana_tpu owns
mod_solana_tpu is the engine-side component of TPU landing. It owns:
- The RPC connection used for discovery (
rpc_url), and its health, probe latency and slot lag. - The leader schedule: which validator identity owns which slot, refreshed on an interval.
- The QUIC connections to each leader’s TPU endpoint, including ALPN negotiation and the client certificate presented on the handshake.
- The fan-out decision: how many upcoming leaders each transaction is sent to.
- The land accounting: landed / failed counts and latency per leader, which the console renders per slot and in the completed-leader table.
tpu.schedule. There
are no write controls on this screen, and the Landing config card is
deliberately rendered as read-only rows: a toggle here would not change engine
behaviour. To change any key below, change the engine’s mod_solana_tpu
configuration and redeploy or reload the module. The console will then report
the new effective value.
Configuration keys
The config block returned bytpu.schedule (tpu.config) is the module’s
effective configuration, not a copy of your config file. Keys that are not
configured come back empty and render as —.
Target leaders is reported as auto-discover: the module resolves leaders
from the schedule rather than from a static host list. There is no
console-side way to pin a manual host on this screen.
tpu.schedule reports effective values only — it does not report the accepted
range for any key. Consult the mod_solana_tpu configuration reference for the
engine build you run before changing slot_refresh_ms or fanout_leaders.
What the client certificate is for
Theclient cert tile shows the certificate the module presents on each QUIC
connection, and is labelled per-connection. It is distinct from the
ephemeral ed25519 identity in the page subtitle:
- The ephemeral ed25519 identity is the keypair the module generates for the QUIC/TLS session. It identifies the connection, not your account, and is not the fee payer or signer of any transaction.
- The client cert is what the module actually presents on the handshake and
is configured engine-side. When the tile reads
—, the sub-label isnot configuredand no certificate is being presented.
How the leader schedule is discovered and refreshed
The Leader schedule card is built fromtpu.leaders, discovered from
getLeaderSchedule on rpc_url. Each card in the timeline is one leader slot
and carries four slots per leader, per the standard rotation.
Each leader entry reports:
The
state field drives the timeline styling: current renders as a live pip,
next as a warning tone, upcoming as inactive.
Refresh behaviour comes from two places:
- The module re-reads schedule state on its own
slot_refresh_msinterval.tpu.rpc.lastRefreshshows when that last happened, under theslot_refresh_mstile. - The console
Refresh schedulebutton re-runs thetpu.schedulequery. It pulls the module’s current reported state; it does not shorten the module’s refresh interval.
lastRefresh that stays old after you press Refresh schedule means the
module is not refreshing, not that the console failed to fetch.
Fan-out
The firstfanout_leaders entries in the timeline are marked fan-out and
highlighted. These are the leaders the module sends each transaction to. The
card header states this directly: fanout to first N leaders. If
fanout_leaders is unset, the tile reads not configured and no leaders are
highlighted.
How land success, failed lands and p50 latency are measured
Land accounting is per leader, and the module reports it in two places. Per upcoming/current leader (tpu.leaders[]), shown in the selected-leader
detail card:
- Land success —
land, a percentage, rendered with a meter row. - Failed lands —
fail, a count. - p50 latency —
latency, the median in milliseconds, so a single slow submission does not move it.
tpu.recent[]), shown in Recently completed
leaders, which reports landed, fail, land and latency side by side for
the last rotations. This is the table to use when you want the raw counts
behind a percentage: land is the share of that leader’s submission attempts
that landed, and landed plus fail are the attempt counts it was derived
from.
All four numbers are nullable. A leader with no submission attempts yet reports
null, and the console renders — rather than 0. A — on a current
leader is normal in the first moments of its slot window; a — on a leader
your fan-out has been targeting for a while is not.
How the console colours these numbers
The timeline and detail card colourland on fixed bands, so the colour tells
you which bucket a leader is in without reading the number:
These are display bands in the console only. They are not thresholds that
mod_solana_tpu acts on, and they do not cause the module to stop using a
leader.
Reading a bad leader vs a stale schedule vs an unhealthy RPC
Three different failures look similar at a glance — low land success. Use the top strip to separate them before you touch anything. An unhealthy RPC. Therpc_url health tile reads anything other than
healthy, or slot lag is elevated. Discovery is the problem, not landing.
The module cannot learn who the next leaders are, so fan-out targets the wrong
validators and lands fail broadly — across all leaders, not a specific one.
If latency not probed is shown, the module has no probe result for the RPC
at all. Fix rpc_url first; per-leader numbers are not trustworthy until
health is healthy.
A stale schedule. The RPC is healthy, but refreshed <lastRefresh> under
the slot_refresh_ms tile is old relative to slot_refresh_ms. The module has
a schedule, but it is out of date, so the leader marked current in the
timeline may no longer be the leader. Symptom shape: failures cluster on the
current and next cards while completed leaders in the table look fine.
Check that the module’s refresh loop is running and that slot_refresh_ms is
set — a — there means it is not configured.
A bad leader. RPC is healthy, lastRefresh is recent, and the failure is
isolated to one or two validators: a low land and a high fail on specific
cards, with neighbouring leaders in the green. Confirm it in Recently
completed leaders — a genuinely bad leader shows repeated low land% across
rotations, while a one-off shows a single bad row. A raised p50 on that one
leader alongside normal p50 elsewhere points at the path to its quic
endpoint rather than at your submission pipeline.
Nothing at all. If the timeline shows No leader schedule and the table
shows No landings yet, TPU landing is not yet active for this workspace and
there is nothing to diagnose — the module has reported no schedule and no
completed rotations.
Submitting to a specific leader
This screen does not submit transactions. To send a raw transaction to one chosen leader rather than to the fan-out set, use the Submit screen; copy theValidator identity (pubkey) or TPU QUIC endpoint from the selected
leader’s detail card to identify the target.