Releases: Lythaeon/sof
Releases · Lythaeon/sof
v0.18.2
Additions
- Added the new internal
sof-supportcrate to centralize shared timing, parsing, retry, and bound-check helpers reused across runtime, provider, and transaction paths. - Added vendored
helius-laserstreamintegration and shared transport helper plumbing so theprovider-grpcfeature set remains buildable and controlled on the0.18.2line. - Added follow-up regression and CI coverage for extension validation, derived-state persistence bounds, websocket replay/ack handling, publishable archive verification, and the fuzz-smoke matrix.
Improvements
- Improved extension-host startup safety by rejecting impossible observer-ingress/shared/dead subscription combinations, invalid websocket resource URLs, zero or oversized read buffers, and zero startup or shutdown timeouts before runtime.
- Improved derived-state persistence correctness by bounding checkpoint loads and writes plus replay-record writes so oversized persisted artifacts fail early instead of poisoning recovery.
- Improved websocket, gRPC, and transaction transport robustness with non-zero timeout clamping, bounded request and response bodies, redirect rejection on hardened HTTP paths, bounded connect and subscription-ack waits, and reconnect-loop protection.
- Improved internal runtime, ingest, repair, relay, verify, shred, and provider paths by reducing clone/setup churn, consolidating helper logic, and tightening invariants without changing the public feature surface.
- Improved release verification by fixing publishable archive validation to include
sof-supportand keeping the fuzz-smoke matrix green after the FEC packet ownership change.
Versioning / Docs
- Bumped
sof-gossip-tuning,sof,sof-tx,sof-types,sof-solana-compat, andsof-supportto0.18.2. - Refreshed the root workspace lockfile for the
0.18.2release line. - Updated observer and
sof-txREADME dependency snippets plus affected install/docs references for0.18.2. - Updated the architecture/runtime-extension docs touched by the hardening work.
Notes
v0.18.2is a patch release on top ofv0.18.1focused on production hardening, invariant tightening, internal cleanup, and release readiness rather than new user-facing features.- Compared with
v0.18.1, this release introduces exactly:- startup-time validation for invalid extension and resource configs that previously failed late or silently dropped work
- bounded derived-state persistence and replay edges
- stricter websocket, gRPC, and HTTP transport timeout, body-limit, and redirect handling
- shared internal support helpers plus provider transport cleanup through the new
sof-supportcrate and vendored LaserStream integration - follow-up release verification fixes for publishable archives and fuzz-smoke CI
- Important behavior callouts in this release:
- this release does not add new public SOF runtime APIs or new feature families
- invalid extension or provider configs that were previously accepted may now fail immediately at startup
- zero-valued timeout configs across hardened paths are clamped to safe non-zero behavior instead of being allowed to stall or spin
- remaining
cargo auditfindings are still upstream in the Solana/Agave dependency chain and were not introduced by this release
- Validation across the released work included:
cargo make cibash scripts/verify-publishable-archives.shcargo make fuzz-smokecargo audit --quiet
v0.18.1
Additions
- Added support for the latest stable Solana/Agave
3.1.xpatch line by uplifting the workspace dependency set from3.1.8to3.1.11. - Added the next maintained vendored gossip fork release as
sof-solana-gossip@3.1.11-sof.9, carrying the SOF-specific fork forward on top of the upstream3.1.11line instead of dropping local patches.
Improvements
- Improved dependency alignment across
sof,sof-tx, and the vendored gossip backend so the workspace now builds against the current stable3.1.11Solana/Agave line. - Improved release consistency by refreshing both workspace lockfiles for the
3.1.11uplift. - Improved release-facing docs and install guidance so dependency snippets and stable-line references now reflect
0.18.1and the3.1.11patch line. - Improved confidence in the dependency uplift by running the full
cargo make cimatrix after the upgrade, including format, architecture checks, clippy, and both nextest matrices.
Versioning / Docs
- Bumped
sof-gossip-tuning,sof,sof-tx,sof-types, andsof-solana-compatfrom0.18.0to0.18.1. - Refreshed the root workspace lockfile and the vendored gossip lockfile for the
0.18.1release line. - Updated observer and
sof-txREADME dependency snippets for0.18.1. - Updated GitBook crate/install/common-question docs to reflect the
0.18.1release and Solana3.1.11stable line.
Notes
v0.18.1is a patch release on top ofv0.18.0focused on the stable Solana/Agave dependency uplift and release prep.- Compared with
v0.18.0, this release introduces exactly:- the workspace-wide Solana/Agave uplift from
3.1.8to3.1.11 - the vendored gossip fork carry-forward to
3.1.11-sof.9 - the
0.18.1crate version bump and lockfile refresh - the follow-up README and GitBook updates for the new stable line
- the workspace-wide Solana/Agave uplift from
- Important behavior callouts in this release:
- this release does not introduce new SOF runtime APIs or new derived-state/event families
- the vendored gossip fork remains in place and was not replaced with upstream
solana-gossip - the
4.xbeta Solana line is intentionally deferred to a later branch
- Validation across the released work included:
cargo check -p sof --all-featurescargo check -p sof-tx --all-featurescargo make cicargo make cipassed end-to-end, includingcargo fmt --check --all,scripts/arch-check.sh, workspace clippy with--all-features, workspace clippy with--no-default-features, workspace nextest default matrix, and workspace nextest all-features matrix
v0.18.0
Additions
- Added replayable rooted provider-account derived-state support through
RootedAccountObservedfor finalized account updates. - Added replayable finalized epoch-transition support through
EpochBoundaryObserved, derived from finalized slot progression. - Added public re-exports for the new derived-state event surface so downstream
sof-txintegrations can consume the new feed families directly. - Added targeted regression coverage for rooted-account routing, provider default commitments, finalized-slot conflict tracking, and restart replay ordering.
Improvements
- Improved rooted-authoritative derived-state behavior by preserving current runtime watermarks on rooted account events instead of backdating tip/process watermarks to account write slots.
- Improved built-in provider defaults so websocket account/program subscriptions and Yellowstone / LaserStream account feeds now default to
finalizedcommitment unless explicitly overridden. - Improved control-plane conflict detection by counting finalized-slot regressions, not just finalized-epoch regressions.
- Improved restart/replay coverage by retaining and asserting exact replay order for rooted-account and epoch-boundary events across restart recovery.
- Improved docs around provider ingest and derived-state boundaries by documenting the new feed families, finalized-default account-feed behavior, and the updated ingest surface matrix.
Versioning / Docs
- Bumped
sof-gossip-tuning,sof,sof-tx,sof-types, andsof-solana-compatto0.18.0. - Refreshed the root workspace lockfile for the
0.18.0release line. - Updated observer and
sof-txREADME dependency snippets and release-facing guidance for0.18.0. - Updated GitBook crate pages, install docs, and the derived-state feed contract doc to reflect the new rooted/event surface.
Notes
v0.18.0is a feature release for rooted provider-backed derived state and finalized epoch-boundary replay.- Compared with
v0.17.3, this release introduces exactly:- replayable rooted provider-account observations
- replayable finalized epoch-boundary notifications
- safer built-in account-feed defaults for rooted-authoritative consumers
- the follow-up audit fixes for watermarks, control-plane conflict detection, replay ordering, and strict-policy/default-config alignment
- the
0.18.0release prep and docs refresh
- Important behavior callouts in this release:
- built-in websocket account/program and Yellowstone / LaserStream account feeds now default to
finalizedcommitment - explicit processed or confirmed account-feed configs still work when callers set commitment deliberately
RootedAccountObservedonly emits from finalized account updatesEpochBoundaryObservedis derived from finalized slot progression, not from vote/stake-derived schedule authority
- built-in websocket account/program and Yellowstone / LaserStream account feeds now default to
- Local validation across the released work included:
cargo fmt --allcargo test -p sof yellowstone_account_stream_defaults_to_finalized_commitment --features provider-grpc --quietcargo test -p sof yellowstone_account_stream_preserves_explicit_processed_commitment --features provider-grpc --quietcargo test -p sof laserstream_account_stream_defaults_to_finalized_commitment --features provider-grpc --quietcargo test -p sof laserstream_account_stream_preserves_explicit_processed_commitment --features provider-grpc --quietcargo test -p sof provider_stream_strict_policy_allows_transaction_status_block_meta_and_rooted_account_derived_state --features provider-websocket,provider-grpc --quietcargo test -p sof derived_state_runtime_restart_replays_retained_tail_from_disk --features kernel-bypass --quietcargo test -p sof-tx --features sof-adapters --quietcargo clippy -p sof --tests -- -D warnings -D clippy::wildcard_enum_match_arm- local Agave
3.1.10+ Yellowstone12.2.0+solana.3.1.10validation for provider connectivity and SOF Yellowstone example startup
v0.17.3
Additions
- Added packaged mixed-runtime support for built-in processed provider ingress together with gossip-derived cluster topology.
- Added topology-only
sof-txadapter support so direct routing can consume gossip topology without falsely requiring leader schedule. - Added targeted regression coverage for mixed provider-ingress + gossip topology runtime behavior.
Improvements
- Improved packaged runtime behavior so built-in websocket / Yellowstone / LaserStream transaction ingress can now coexist with gossip bootstrap for
on_cluster_topologyconsumers. - Improved capability validation by keeping packaged mixed mode honest:
on_cluster_topologyis allowed when gossip supplies topologyon_leader_scheduleandon_reorgremain rejected in this packaged mixed mode
- Improved gossip control-plane bootstrap behavior with the follow-up fixes included on this release line:
- peer-only control-plane bootstrap acceptance without packet ingress
- early stabilization for control-plane-only mode
- explicit min-peer override handling in control-plane-only mode
- Improved docs around mixed
sof+sof-txdeployments by clarifying that:- built-in processed ingress can pair with gossip topology in the packaged runtime
- this packaged mixed mode is topology-only, not a full gossip-derived leader-schedule mode
- provider-stream transactions can keep recent blockhash fresh while gossip remains the topology/control-plane source
Versioning / Docs
- Bumped
sof-gossip-tuning,sof,sof-tx,sof-types, andsof-solana-compatto0.17.3. - Bumped vendored
sof-solana-gossipfrom3.1.8-sof.7to3.1.8-sof.8. - Refreshed the root workspace lockfile plus the
sof-txandsof-gossip-tuningfuzz lockfiles for the0.17.3release line. - Updated top-level, observer, and
sof-txREADME dependency and control-plane guidance for0.17.3. - Updated GitBook crate pages, control-plane recipes, and install docs to document the packaged provider-ingress + gossip-topology model.
Notes
v0.17.3is a focused patch release for mixed provider-ingress and gossip control-plane topology compatibility.- Compared with
v0.17.2, this release introduces exactly:- packaged built-in provider ingress + gossip topology runtime support
- topology-only
sof-txadapter behavior for direct routing - the follow-up audit fixes needed to keep control-plane-only bootstrap fast, correct, and operator-configurable
- the
0.17.3release prep and thesof-solana-gossipbump to3.1.8-sof.8
- Important behavior callouts in this release:
- built-in websocket / Yellowstone / LaserStream transaction ingress can now coexist with gossip-derived
on_cluster_topology - this packaged mixed mode still does not claim gossip-derived
on_leader_schedule - if you want richer custom mixed control-plane behavior,
ProviderStreamMode::Genericremains the escape hatch
- built-in websocket / Yellowstone / LaserStream transaction ingress can now coexist with gossip-derived
- Local validation across the released work included:
cargo fmt --allcargo test -p sof --lib control_plane_only_bootstrap_accepts_peer_discovery_without_packets --features gossip-bootstrap -- --nocapturecargo test -p sof --lib control_plane_only_stabilization_returns_on_peer_discovery_without_packets --features gossip-bootstrap -- --nocapturecargo test -p sof --lib full_gossip_bootstrap_still_requires_packets_for_peer_discovery_fallback --features gossip-bootstrap -- --nocapturecargo test -p sof --lib control_plane_only_bootstrap_respects_explicit_min_peers_override --features gossip-bootstrap -- --nocapturecargo check -p sof --all-featurescargo check --manifest-path crates/sof-tx/fuzz/Cargo.tomlcargo check --manifest-path crates/sof-gossip-tuning/fuzz/Cargo.tomlTMPDIR=/home/ac/projects/sof/target/tmp-ci cargo make ci
v0.17.2
Additions
- Added a true gossip runtime posture for control-plane-only deployments:
SOF_GOSSIP_RUNTIME_MODE=control_plane_onlyRuntimeSetup::with_gossip_runtime_mode(GossipRuntimeMode::ControlPlaneOnly)
- Added typed
GossipRuntimeModesupport with:FullBootstrapOnlyControlPlaneOnly
- Added targeted bootstrap/stabilization coverage for the new gossip mode, including:
- peer-only bootstrap acceptance without packet ingress
- early control-plane stabilization on peer discovery
- explicit min-peer override handling in control-plane-only mode
Improvements
- Improved gossip bootstrap behavior so control-plane-only mode no longer starts gossip-backed shred receivers or repair client state.
- Improved runtime behavior by disabling gossip-backed shred ingest, relay, repair, and runtime switching in control-plane-only mode.
- Improved startup behavior so control-plane-only bootstrap can accept peer discovery directly instead of waiting on packet flow that never starts in that mode.
- Improved operator control by respecting explicit
SOF_GOSSIP_BOOTSTRAP_STABILIZE_MIN_PEERSoverrides in control-plane-only mode while keeping a low default of1when unset. - Improved docs around mixed
sof+sof-txsetups by clarifying that:- provider-stream transactions can already keep recent blockhash fresh
- gossip full or
control_plane_onlyremains the control-plane source for direct leader routing - mixed provider-blockhash + gossip-topology setups are a custom embedding pattern, not yet one packaged built-in mixed-runtime mode
- Improved docs by clarifying that
SOF_LIVE_SHREDS_ENABLED=falseis not the same thing asSOF_GOSSIP_RUNTIME_MODE=control_plane_only.
Versioning / Docs
- Bumped
sof-gossip-tuning,sof,sof-tx,sof-types, andsof-solana-compatto0.17.2. - Refreshed the root workspace lockfile plus the
sof-txandsof-gossip-tuningfuzz lockfiles for the0.17.2release line. - Updated top-level, observer, and
sof-txREADME dependency and operations guidance for0.17.2. - Updated GitBook knob registry, relay/repair traffic docs, crate pages, and common recipes to document the new gossip runtime mode and its control-plane-only semantics.
Notes
v0.17.2is a focused patch release for gossip/runtime control-plane ergonomics and correctness.- Compared with
v0.17.1, this release introduces exactly:- the new
control_plane_onlygossip runtime mode - typed runtime setup support for that mode
- the follow-up audit fixes needed to make peer-only control-plane bootstrap fast and correct
- the docs updates describing how gossip control-plane-only works with
sof-txand provider-stream blockhash sourcing
- the new
- Important behavior callouts in this release:
control_plane_onlykeeps gossip-derived topology and leader state without gossip-backed shred ingest- relay, repair, and runtime switching are disabled in that mode
- control-plane-only bootstrap accepts peer discovery without requiring packet ingress
- explicit
SOF_GOSSIP_BOOTSTRAP_STABILIZE_MIN_PEERSoverrides are respected in that mode
- Local validation across the released work included:
cargo fmt --allcargo check -p sof --features gossip-bootstrapcargo check --manifest-path crates/sof-tx/fuzz/Cargo.tomlcargo check --manifest-path crates/sof-gossip-tuning/fuzz/Cargo.tomlcargo test -p sof --lib control_plane_only_stabilization_returns_on_peer_discovery_without_packets --features gossip-bootstrap -- --nocapturecargo test -p sof --lib control_plane_only_bootstrap_accepts_peer_discovery_without_packets --features gossip-bootstrap -- --nocapturecargo test -p sof --lib control_plane_only_bootstrap_respects_explicit_min_peers_override --features gossip-bootstrap -- --nocapturecargo test -p sof --lib full_gossip_bootstrap_keeps_workspace_default_min_peers --features gossip-bootstrap -- --nocaptureTMPDIR=/home/ac/projects/sof/target/tmp-ci cargo make ci
v0.17.1
Additions
- Added a publish-safe canonical all-at-once SOF submission example under
sof-solana-compat:crates/sof-solana-compat/examples/submit_all_at_once_with_sof.rs
- Added explicit install/docs guidance that
gossip-bootstrapno longer exact-pins the Solana3.1.8patch line, so downstream workspaces can resolve newer compatible3.1.xreleases.
Improvements
- Improved crates.io publishability by removing the
sof-tx<->sof-solana-compatdev-dependency cycle that blocked the0.17.0dry-run/publish flow. - Improved
gossip-bootstrapdependency behavior by relaxing the vendoredsof-solana-gossipcrate's exact=3.1.8Solana/Agave pins to normal semver requirements. - Improved downstream compatibility so
sofwithgossip-bootstrapcan now resolve onto newer compatible3.1.xSolana patch lines instead of being forced onto3.1.8. - Improved the vendored gossip publish line by bumping
sof-solana-gossipfrom3.1.8-sof.6to3.1.8-sof.7for the non-pinning manifest. - Improved docs/example ownership by moving the all-at-once SOF example to the compat layer that actually owns
TxBuilderand unsigned submit helpers.
Versioning / Docs
- Bumped
sof-gossip-tuning,sof,sof-tx,sof-types, andsof-solana-compatto0.17.1. - Refreshed the root workspace lockfile plus the
sof-txandsof-gossip-tuningfuzz lockfiles for the0.17.1release line. - Updated top-level, observer, and
sof-txREADME dependency snippets for0.17.1. - Updated GitBook install, common-questions, and crate pages to
0.17.1and to reflect the relaxedgossip-bootstrapresolver contract.
Notes
v0.17.1is a patch recovery release for the partially publishedv0.17.0line.- Compared with
v0.17.0, this release introduces exactly:- the publish-cycle fix between
sof-txandsof-solana-compat - the non-pinning
sof-solana-gossip 3.1.8-sof.7backend - the
0.17.1workspace version bump, lockfile refresh, and docs updates needed for a clean republish
- the publish-cycle fix between
- Important behavior callouts in this release:
- enabling
gossip-bootstrapno longer exact-pins downstream workspaces to Solana3.1.8 - the canonical all-at-once SOF submission example now lives in
sof-solana-compat, notsof-tx - this release is intended to supersede the incomplete
0.17.0publish state on crates.io
- enabling
- Local validation across the released work included:
TMPDIR=/home/ac/projects/sof/target/tmp-ci cargo make cicargo check --manifest-path crates/sof-tx/fuzz/Cargo.tomlcargo check --manifest-path crates/sof-gossip-tuning/fuzz/Cargo.tomlcargo check -p sof --features gossip-bootstrap- downstream resolver proof showing
sof+gossip-bootstrapcan resolve ontosolana-net-utils v3.1.11/solana-streamer v3.1.11
v0.17.0
Additions
- Added first-class multi-route submission to
sof-txwithSubmitPlan,SubmitRoute, andSubmitStrategy, so callers can submit the same signed transaction across any configured combination ofRpc,Direct, andJitoroutes instead of being constrained to a single mode enum. - Added
SubmitPlan::all_at_once(...)and ordered plan support sosof-txcan explicitly express concurrent fanout and ordered route execution across arbitrary configured routes. - Added a canonical end-to-end
sof-txexample for all-at-once submission with SOF integration:crates/sof-tx/examples/submit_all_at_once_with_sof.rs
- Added improved multi-route outcome visibility in
sof-tx, including richer per-route outcomes and telemetry counters for external reporter pressure/unavailability.
Improvements
- Improved
sof-txsubmit hot-path performance by trimming internal orchestration overhead, reusing shared tx buffers across routes, and avoiding unnecessary deserialization/parsing in the common submit paths. - Improved all-at-once route semantics so
sof-txnow returns on first acceptance instead of waiting for the slowest configured route to finish. - Improved ordered direct-first behavior so optional RPC rebroadcast no longer extends direct-success return latency.
- Improved all-at-once failure semantics so terminal failure selection is deterministic by configured route order when every configured route fails.
- Improved external outcome reporting so slow or panicking reporters no longer sit on the synchronous submit hot path.
- Improved reporter isolation by delivering outcomes through bounded per-reporter dispatch rather than letting one reporter or one noisy client interfere with unrelated reporter sinks.
- Improved built-in telemetry so reporter drops/unavailability are machine-readable and later background accepts remain observable through the authoritative inline telemetry surface.
- Improved user-facing ergonomics by allowing shared plugin registration from
Arc<P>directly, removing the need for explicitArc<dyn ObserverPlugin>casts in common setup code. - Improved
sof-txdocs by consolidating duplicated setup prose, documentingall_at_once(...)as the preferred multi-route shape when multiple routes are intentionally configured, and explicitly calling out Jito minimum tip expectations for Jito-backed plans. - Improved fuzz compatibility by syncing the
sof-gossip-tuningruntime-port fuzz target with the currentRuntimeTuningPorttrait.
Versioning / Docs
- Bumped
sof-gossip-tuning,sof,sof-tx,sof-types, andsof-solana-compatto0.17.0. - Refreshed the root workspace lockfile plus the
sof-txandsof-gossip-tuningfuzz lockfiles for the0.17.0release line. - Updated top-level, observer, and
sof-txREADME dependency snippets for0.17.0. - Updated GitBook install and crate pages to
0.17.0. - Updated
sof-txREADME and GitBook crate docs to describe the plan-based submit API, all-at-once usage, late background accept reporting, and reporter best-effort semantics.
Notes
v0.17.0is the release that turnssof-txfrom a mode-oriented sender API into a route-plan-oriented sender API while keeping the old mode helpers as compatibility presets.- Compared with
v0.16.0, this release introduces exactly:- first-class
sof-txsubmit plans acrossRpc,Direct, andJito - canonical all-at-once usage and docs for combined route fanout
- targeted submit hot-path reductions
- hardening of all-at-once return semantics and late outcome reporting
- improved shared-plugin registration ergonomics
- the
0.17.0workspace version bump, lockfile refresh, and fuzz-target contract sync
- first-class
- Important behavior callouts in this release:
SubmitPlan::all_at_once(...)returns on first acceptance rather than waiting for all routes to finish- later background accepts are intentionally best-effort through the external outcome reporter, while built-in telemetry remains the authoritative always-inline outcome surface
- Jito-backed plans still need an appropriate tip configuration; the documented minimum floor is not a guarantee of competitiveness during congested periods
- Local validation across the released work included:
cargo check -p sof --all-featurescargo check -p sof-tx --all-featurescargo check --manifest-path crates/sof-tx/fuzz/Cargo.tomlTMPDIR=/home/ac/projects/sof/target/tmp-ci cargo make ci
v0.16.0
Additions
- Added processed-provider derived-state support for
TransactionStatusandBlockMetaso typed provider ingest can now feed those observed event families into derived-state consumers in addition to plugin hooks. - Added new derived-state consumer config knobs for these processed-provider observation feeds:
with_transaction_status_observed()andwith_block_meta_observed(). - Added new derived-state feed events for processed-provider observation:
TransactionStatusObservedBlockMetaObserved
- Added runtime forwarding from
ProviderStreamUpdate::TransactionStatusandProviderStreamUpdate::BlockMetainto derived state when consumers opt in.
Improvements
- Improved serialized-provider transaction accept performance by skipping an unnecessary borrowed
SanitizedTransactionViewparse when the accept path does not need recent-blockhash extraction or view-prefiltering. - Improved derived-state / provider capability validation so strict provider capability checks now also account for the new
TransactionStatusObservedandBlockMetaObservedderived-state subscriptions. - Improved ingest documentation clarity by replacing repeated prose with a single ingest matrix that shows, per ingest family, which plugin hooks and derived-state events are emitted and which are not.
- Improved
sof-txfuzz coverage compatibility by aligning thesignature_deduperfuzz target with the currentSignatureDeduper::check_and_insert(SignatureBytes, ...)API. - Improved local release validation hygiene for this branch with full local CI passing after the release bump and fuzz fix.
Versioning / Docs
- Bumped
sof-gossip-tuning,sof,sof-tx,sof-types, andsof-solana-compatto0.16.0. - Refreshed the root workspace lockfile and the
sof-txfuzz lockfile for the0.16.0release line. - Updated top-level, observer, and
sof-txREADME dependency snippets for0.16.0. - Updated GitBook install and crate pages to
0.16.0. - Updated the observer docs and GitBook crate docs to document the ingest matrix explicitly, including the difference between raw shreds, websocket processed-provider ingest, Yellowstone/LaserStream processed-provider ingest, and generic typed provider producers.
Notes
v0.16.0extends the processed-provider derived-state surface rather than widening the raw-shred surface.- Compared with
v0.15.0, this release introduces exactly:- derived-state support for processed-provider
TransactionStatusandBlockMeta - stricter documentation of which ingest families emit which plugin and derived-state events
- a targeted serialized-accept hot-path reduction
- the
0.16.0workspace version bump, lockfile refresh, and fuzz-target API alignment
- derived-state support for processed-provider
- Important behavior callouts in this release:
- websocket processed-provider ingest still does not emit
TransactionStatusObservedorBlockMetaObserved - built-in Yellowstone gRPC, built-in LaserStream, and custom generic typed providers can emit those processed-provider observed event families
- raw shreds remain the source for the shred-native control-plane/runtime families and are not a substitute for processed-provider
TransactionStatus/BlockMeta
- websocket processed-provider ingest still does not emit
- Local validation across the released work included:
TMPDIR=/home/ac/projects/sof/target/tmp-ci cargo check --manifest-path crates/sof-tx/fuzz/Cargo.tomlTMPDIR=/home/ac/projects/sof/target/tmp-ci cargo make ci
v0.15.0
Additions
- Added source-priority duplicate arbitration for processed-provider multi-source fan-in so overlapping websocket, Yellowstone gRPC, LaserStream, and generic provider feeds can be merged with explicit per-source policy instead of always emitting every duplicate.
- Added per-source fan-in policy metadata to the processed-provider surface:
ProviderSourceRole,ProviderSourceArbitrationMode, and explicit sourcepriority. - Added additive source-policy config knobs across generic producers and built-in processed-provider configs:
with_source_role(...),with_source_priority(...), andwith_source_arbitration(...). - Added documented fastest-wins and promote-on-better-source behavior for same-type fan-in through
FirstSeenandFirstSeenThenPromote, while keeping the oldEmitAllbehavior as the default.
Improvements
- Improved provider-runtime replay dedupe and arbitration overhead by reusing provider-source
Arcs already present on events and removing redundant hash-table probes on the hot path. - Improved derived-state transaction index reservation for provider ingest by replacing the concurrent skiplist-based per-slot index tracker with a simpler
Mutex<HashMap<u64, u32>>structure that fits the actual usage pattern better. - Improved serialized-provider transaction accepts by reusing transaction-kind classification from the borrowed sanitized view instead of classifying the fully deserialized transaction again.
- Improved the overall processed-provider hot path after the new fan-in/source-priority work with release-fixture validation showing:
- dispatch:
baseline_us=32102 optimized_us=3657 - serialized accept:
baseline_us=414302 optimized_us=347947
- dispatch:
- Improved docs coverage for overlapping multi-source fan-in so the crate docs and GitBook now explain when to use
EmitAll,FirstSeen, andFirstSeenThenPromote.
Versioning / Docs
- Bumped
sof-gossip-tuning,sof,sof-tx,sof-types, andsof-solana-compatto0.15.0. - Refreshed the root workspace lockfile and the
sof-txfuzz lockfile for the0.15.0release line. - Updated top-level, observer, and
sof-txREADME dependency snippets for0.15.0. - Updated GitBook install and crate pages to
0.15.0.
Notes
v0.15.0is the release that turns processed-provider multi-fan-in into a configurable arbitration surface instead of a merge-only surface.- Compared with
v0.14.0, this release introduces exactly:- per-source role / priority / arbitration metadata for processed-provider fan-in
- explicit duplicate-handling modes for overlapping same-type sources
- runtime hot-path reductions targeted at the arbitration, derived-state reservation, and serialized-accept paths
- the
0.15.0workspace version bump and lockfile/doc refresh
- Important tradeoffs called out explicitly in this release:
- default behavior remains
EmitAllfor backward compatibility FirstSeenis the right setting when you want fastest-source-wins without duplicate plugin dispatchFirstSeenThenPromotekeeps the fast path immediate but allows a later higher-priority overlapping source to emit a promotion
- default behavior remains
- Local validation across the released work included:
cargo clippy -p sof --all-targets --features "provider-grpc provider-websocket" --no-deps -- -D warningscargo check -p sof --all-featurescargo check -p sof-tx --all-features- debug provider/runtime fixture reruns for dispatch, serialized ignore, and serialized accept
- release fixture reruns for dispatch and serialized accept
v0.14.0
Additions
- Added multi-source processed-provider fan-in so multiple websocket and gRPC sources can feed one SOF runtime through
ProviderStreamMode::Genericwhile preserving typed event delivery. - Added richer built-in processed-provider stream selection for Yellowstone gRPC, LaserStream gRPC, and websocket ingest so configs can target transactions, transaction status, accounts, block meta, slot status, logs, account subscriptions, and program subscriptions where supported.
- Added new typed plugin/runtime event surfaces for processed-provider ingest:
TransactionStatusEvent,AccountUpdateEvent, andBlockMetaEvent, plus the corresponding plugin opt-ins and hooks. - Added stable provider-source identity, readiness classing, and source-aware dedupe semantics so overlapping provider feeds can be tracked, combined, and validated cleanly.
- Added explicit source reservation and fan-in lifecycle management for generic providers, including reserved sender support, bounded cleanup behavior, and duplicate-identity rejection.
- Added direct multi-source examples and expanded provider examples so websocket, Yellowstone, LaserStream, and mixed-source setups are documented against the current runtime contract.
Improvements
- Improved the processed-provider contract substantially: built-in configs now extend the existing API instead of replacing it, and the runtime/plugin system can ingest richer upstream data without fragmenting the plugin model.
- Improved provider correctness with typed protocol/config errors, source-aware replay dedupe, stricter runtime capability checks, healthier readiness semantics, and hardened startup/shutdown/removal behavior across built-in and generic sources.
- Improved provider observability so per-source health, readiness, removal, and degraded-state behavior remain visible even with multiple sources of the same kind.
- Improved websocket and provider hot paths with profiling-backed changes only: websocket parse cost, runtime dispatch, Yellowstone conversion, LaserStream conversion, and transaction prefilter/classification all remained net-positive through the feature expansion.
- Improved docs and examples so README/GitBook/docs.rs-facing guidance now matches the richer processed-provider surface that actually shipped.
- Improved validation depth beyond the earlier provider work by proving end-to-end local Yellowstone and LaserStream transaction delivery against a rebuilt matching local Yellowstone plugin and real Helius websocket traffic.
Versioning / Docs
- Bumped
sof-gossip-tuning,sof,sof-tx,sof-types, andsof-solana-compatto0.14.0. - Kept the vendored patched
sof-solana-gossipcrate at3.1.8-sof.6. - Aligned intra-workspace dependency constraints so the published workspace crates consistently point at
0.14.0. - Updated top-level, observer, and
sof-txREADME dependency snippets for0.14.0. - Updated GitBook install and crate pages to
0.14.0.
Notes
v0.14.0is the release that turns the processed-provider surface from a transaction-first add-on into a typed, multi-source ingest model that still feeds the same SOF runtime, plugin host, and derived-state foundation.- Compared with
v0.13.1, this release introduces exactly:- multi-source provider fan-in for mixed websocket / Yellowstone / LaserStream / generic processed-provider ingest
- richer built-in stream selection across transactions, transaction status, accounts, block meta, slots, logs, and websocket account/program subscriptions
- new plugin/runtime event surfaces for transaction status, account updates, and block meta
- source-aware provider identity, readiness, dedupe, lifecycle cleanup, and observability hardening
- expanded examples and documentation for the new processed-provider contract
- additional provider/runtime hot-path tuning that remained net-positive on the validated fixtures
- Important tradeoffs called out explicitly in this release:
- built-in processed-provider surfaces now cover the high-value typed feeds, while broader custom control-plane composition still belongs to
ProviderStreamMode::Generic - websocket durability remains best-effort where the upstream protocol has no replay cursor
- source-aware readiness for generic custom producers still depends on those producers emitting typed provider health updates
- built-in processed-provider surfaces now cover the high-value typed feeds, while broader custom control-plane composition still belongs to
- Local and live validation across the released work included:
cargo make ci- local validator validation of Yellowstone and LaserStream end-to-end transaction delivery through a rebuilt matching Yellowstone plugin
- live websocket smoke validation against a Helius endpoint
- focused release-fixture A/B validation and symbolized profiling on the main provider/runtime hot paths
- repeated provider/runtime audit passes for capability, replay, health, lifecycle, observability, and multi-source behavior