sof
sof is the SOF observer/runtime crate.
It is built for low-latency Solana data ingest and local runtime-derived signals.
Core responsibilities:
- shred ingestion (direct UDP, relay, optional gossip bootstrap)
- optional shred verification
- dataset reconstruction and transaction extraction
- plugin-driven event hooks for custom logic
- local transaction commitment status tagging (
processed/confirmed/finalized) without RPC dependency
At a Glance
- Embed SOF directly inside a Tokio application
- Attach
PluginorRuntimeExtensionconsumers - Run with built-in UDP ingress or external kernel-bypass ingress
- Consume local slot/reorg/transaction/account-touch signals
- Use derived-state feed support for restart-safe stateful consumers
Install
Optional gossip bootstrap support at compile time:
= { = "0.6.1", = ["gossip-bootstrap"] }
Optional external kernel-bypass ingress support:
= { = "0.6.1", = ["kernel-bypass"] }
Quick Start
Run the bundled runtime example:
With gossip bootstrap:
Basic programmatic setup:
async
Runtime API
Embed directly in Tokio:
async
Or use programmatic setup:
use SocketAddr;
async
With external kernel-bypass ingress, feed RawPacketBatch values through SOF's ingress queue:
async
Run the kernel-bypass ingress metrics example for 180 seconds:
SOF_KERNEL_BYPASS_EXAMPLE_DURATION_SECS=180 \
Run the same example against live Solana gossip traffic (real chain data):
SOF_KERNEL_BYPASS_EXAMPLE_SOURCE=gossip \
SOF_KERNEL_BYPASS_EXAMPLE_DURATION_SECS=180 \
RUST_LOG=info \
Run AF_XDP external-ingress example (requires Linux, AF_XDP-capable NIC setup, and privileges to create XDP sockets/programs):
SOF_AF_XDP_IFACE=enp17s0 \
SOF_AF_XDP_EXAMPLE_DURATION_SECS=180 \
Notes for high-ingest runs:
- The example configures
SOF_PORT_RANGE=12000-12100andSOF_GOSSIP_PORT=8001. - It defaults live gossip mode to
SOF_INGEST_QUEUE_MODE=lockfreewithSOF_INGEST_QUEUE_CAPACITY=262144. SOF_UDP_DROP_ON_CHANNEL_FULLonly applies to SOF's built-in UDP receiver path (non-external ingress).- Queue mode is configurable with
SOF_INGEST_QUEUE_MODE:bounded(default): Tokio bounded channel.unbounded: Tokio unbounded channel (no backpressure drops; memory grows with load).lockfree: lock-freeArrayQueuering + async wakeups.
- Ring/bounded capacity is configurable with
SOF_INGEST_QUEUE_CAPACITY(default16384).
Plugin Quickstart
use async_trait;
use ;
;
async
RuntimeExtension Quickstart
use async_trait;
use ;
;
async
Plugin Hooks
Current hook set:
on_raw_packeton_shredon_dataseton_transactionon_account_touchon_slot_statuson_reorgon_recent_blockhashon_cluster_topology(gossip-bootstrap mode)on_leader_schedule(gossip-bootstrap mode)
on_transaction events include:
commitment_statusconfirmed_slotfinalized_slot
These commitment fields are derived from local shred-stream slot progress (depth-based), not RPC polling.
on_account_touch events include transaction-derived static account-key sets:
account_keyswritable_account_keysreadonly_account_keyslookup_table_account_keys
This hook is for account discovery/invalidation. It is not a validator post-write account-update feed.
Derived-State Consumers
SOF also exposes a replayable derived-state feed intended for stateful official extensions and local consumers that need:
- retained feed continuity
- checkpoint persistence
- replay-based recovery after restart or transient failure
- explicit resync/rebuild signaling
Example implementation:
examples/derived_state_slot_mirror.rs
Design references:
../../docs/architecture/derived-state-extension-contract.md../../docs/architecture/derived-state-feed-contract.md
on_slot_status events include local canonical transitions:
processedconfirmedfinalizedorphaned
Operational Notes
- Hooks are dispatched off the ingest hot path through a bounded queue.
- Queue pressure drops hook events instead of stalling ingest.
RuntimeExtensionWebSocket connectors support fullws:///wss://handshake + frame decoding.- WebSocket close frames emit
RuntimePacketEventClass::ConnectionClosedinon_packet_received. - WebSocket packet events expose
websocket_frame_type(Text/Binary/Ping/Pong) for startup-time filtering and runtime routing. - In gossip mode, SOF runs as an active bounded relay client by default (UDP relay + repair serve), not as an observer-only passive consumer.
SOF_LIVE_SHREDS_ENABLED=falseenables control-plane-only mode.
Examples
observer_runtimeobserver_with_non_vote_pluginobserver_with_multiple_pluginsnon_vote_tx_loggerraydium_contracttpu_leader_loggerruntime_extension_observer_ingressruntime_extension_udp_listenerruntime_extension_shared_streamruntime_extension_with_pluginsruntime_extension_websocket_connectorderived_state_slot_mirrorkernel_bypass_ingress_metrics(--features kernel-bypass)
Run kernel-bypass ingress E2E test:
Run any example:
Docs
- Workspace docs index:
../../docs/README.md - Architecture docs:
../../docs/architecture/README.md - Operations docs:
../../docs/operations/README.md - Reverse-engineering notes:
REVERSE_ENGINEERING.md - Contribution guide:
../../CONTRIBUTING.md