High-performance Solana slotstrike runtime focused on Raydium pool creation events.
- Supported pools:
- Raydium OpenBook
- Raydium CPMM
- Rule targeting:
- Mint address
- Deployer address
- Transaction submission modes:
jitodirect- combined routing via
sof_tx.mode = "hybrid"orsof_tx.mode = "custom"
- SOF ingress/runtime modes:
- websocket provider-stream
- Yellowstone gRPC provider-stream
- private shred ingest with trusted/untrusted posture
- Runtime stance:
- SOF-only ingress and structured transaction parsing
- legacy raw-log ingress removed on March 29, 2026
This project is TOML-only. .env is not used by runtime configuration.
- Copy
slotstrike.example.tomltoslotstrike.toml. - Edit the runtime and rule sections.
- Start the binary with
--config.
Minimal example:
[runtime]
keypair_path = "keypair.json"
rpc_url = "https://api.mainnet-beta.solana.com"
wss_url = "wss://api.mainnet-beta.solana.com"
priority_fees = 1000000
dry_run = false
tx_submission_mode = "jito"
jito_url = "https://amsterdam.mainnet.block-engine.jito.wtf/api/v1/transactions?bundleOnly=true"
[sof]
enabled = true
source = "websocket"
websocket_url = "wss://api.mainnet-beta.solana.com"
private_shred_socket_path = "/tmp/slotstrike-sof-private-shreds.sock"
private_shred_source_addr = "127.0.0.1:19001"
trusted_private_shreds = false
commitment = "processed"
inline_transaction_dispatch = true
ingest_queue_mode = "lockfree"
ingest_queue_capacity = 16384
[sof_tx]
enabled = true
mode = "custom"
strategy = "ordered_fallback"
routes = ["jito", "rpc"]
jito_transport = "json_rpc"
bundle_only = true
[telemetry]
enabled = true
sample_capacity = 4096
slo_ns = 1000000
report_period_secs = 15
[[rules]]
kind = "mint"
address = "So11111111111111111111111111111111111111112"
snipe_height_sol = "0.01"
tip_budget_sol = "0.001"
slippage_pct = "1"
[[rules]]
kind = "mint"
address = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
snipe_height_sol = "0.01"
tip_budget_sol = "0.001"
slippage_pct = "1"[runtime]:
keypair_path: path to Solana keypair JSON.rpc_url: HTTP RPC URL.wss_url: compatibility alias for SOF websocket mode. Prefersof.websocket_url.priority_fees: microlamports.dry_run: build and sign swaps without submitting them.tx_submission_mode:jitoordirect.jito_url: required whentx_submission_mode = "jito".replay_benchmark: run synthetic replay instead of live strategy.replay_event_count: replay event count.replay_burst_size: replay burst size.
Legacy note:
- Legacy ingress runtime keys such as old
kernel_tcp_bypassandfpga_*settings are no longer accepted. The runtime config is SOF-only and those fields now fail TOML parsing instead of being silently ignored.
[sof]:
enabled: enables SOF-backed runtime startup.source:websocket,grpc, orprivate_shred.websocket_url: provider websocket endpoint for SOF websocket mode.grpc_url: Yellowstone gRPC endpoint for SOF gRPC mode.grpc_x_token: optional Yellowstone auth token.private_shred_socket_path: unix socket path Slotstrike binds for private shred propagation.private_shred_source_addr: synthetic source address attached to packets arriving from the private shred socket.gossip_entrypoints: optional SOF gossip bootstrap entrypoints used for direct-route TPU topology.gossip_validators: optional validator allowlist for gossip control-plane tracking.gossip_runtime_mode:full,bootstrap_only, orcontrol_plane_only. Slotstrike defaults tocontrol_plane_onlyso gossip maintains topology/leader state without gossip shred ingest.trusted_private_shreds: whentrue, SOF uses trusted raw-shred provider mode.commitment:processed,confirmed, orfinalized.inline_transaction_dispatch: enables SOF inline transaction dispatch where possible.startup_step_logs,worker_threads,dataset_workers,packet_workers: runtime tuning knobs.ingest_queue_mode:bounded,unbounded, orlockfree.ingest_queue_capacity: queue capacity for bounded/lockfree ingest.
[sof_tx]:
enabled: enablessof-txsubmission from the strategy path.mode:rpc,jito,direct,hybrid, orcustom.hybridresolves to["direct", "rpc"].customallows explicit route combinations such as["jito", "rpc"],["direct", "jito"], or["direct", "jito", "rpc"].strategy:ordered_fallbackorall_at_once.routes: explicit route order formode = "custom".reliability:low_latency,balanced, orhigh_reliability.jito_transport:json_rpcorgrpc.jito_endpoint: optional Jito block-engine endpoint override.bundle_only: enables Jito revert protection.routing_next_leaders,routing_backup_validators,routing_max_parallel_sends: direct-route tuning.guard_require_stable_control_plane,guard_reject_on_replay_recovery_pending,guard_max_state_version_drift,guard_max_opportunity_age_ms,guard_suppression_ttl_ms: toxic-flow guard policy.- Direct-route TPU topology is sourced from SOF gossip bootstrap via
sof.gossip_entrypoints. - Direct-route leader schedule is refreshed infrequently from
runtime.rpc_urland injected intosof-tx. sof.gossip_runtime_mode = "control_plane_only"keeps that control plane active without enabling gossip shred ingest.
Guard rail:
sof_txdirect routing can be used withwebsocket,grpc, orprivate_shred.- Direct routing requires
runtime.rpc_urlplus at least onesof.gossip_entrypointsvalue. - Gossip supplies TPU topology; Slotstrike uses SOF recent-blockhash state to advance the direct leader window and RPC leader-schedule snapshots to keep routing accurate.
private_shredremains the lowest-latency option for direct routing, but the direct control plane can now stay gossip topology-only instead of ingesting gossip shreds.
[telemetry]:
enabled: iffalse, telemetry sampling/reporter logs are disabled.sample_capacity: per-hop sample buffer size.slo_ns: SLO threshold in nanoseconds.report_period_secs: telemetry report interval.
[[rules]]:
kind:mintordeployer.address: target pubkey.snipe_height_sol: SOL amount string.tip_budget_sol: SOL amount string.slippage_pct: percent string.
Note: monetary/percentage rule values are strings and parsed via fixed-point/integer-safe logic to avoid float drift.
Multiple mint addresses:
Use one [[rules]] block per mint address (the rules section is an array of tables).
[[rules]]
kind = "mint"
address = "So11111111111111111111111111111111111111112"
snipe_height_sol = "0.01"
tip_budget_sol = "0.001"
slippage_pct = "1"
[[rules]]
kind = "mint"
address = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
snipe_height_sol = "0.02"
tip_budget_sol = "0.001"
slippage_pct = "1.5"What telemetry is:
Telemetry is internal latency instrumentation for core pipeline hops:
- ingress to engine (
ingress_to_engine_ns) - engine classification (
engine_classification_ns) - strategy dispatch (
strategy_dispatch_ns)
How telemetry is shown:
- periodic
infologs:Latency telemetry > hop=... count=... p50=... p99=... max=... warnlogs on SLO breaches:Latency SLO alert > ...- under systemd, view via
journalctl -u <service-name>
Disable telemetry completely:
[telemetry]
enabled = falseWhen disabled, no telemetry samples or telemetry report lines are emitted.
Direct:
cargo run --release -- --config slotstrike.tomlVia cargo-make:
cargo make run-slotstrike -- --config slotstrike.tomlUseful runtime flags:
--config <path>--replay-benchmark
Note: ingress feed transport and tx submission transport are separate concerns.
Slotstrike now always uses SOF for ingress/runtime selection and can route submits through sof-tx. The legacy tx_submission_mode remains only as a compatibility fallback when sof_tx.enabled = false.
Service registration is built into the binary.
Install + enable + start:
sudo cargo run --release -- --install-service --config /home/slotstrike/slotstrike/slotstrike.tomlUninstall:
sudo cargo run --release -- --uninstall-serviceOptional install flags:
--service-name <name>(defaultslotstrike)--service-user <user>(default fromSUDO_USER/USER)--service-group <group>(default user primary group)--systemd-dir <path>(default/etc/systemd/system)--no-enable(write unit only, do not enable/start)
Cargo-make wrappers:
sudo cargo make service-install -- --config /home/slotstrike/slotstrike/slotstrike.toml
sudo cargo make service-uninstallRuns a usability smoke pass using direct submission (no Jito dependency).
cargo make devnet-smokeAuto bootstrap (creates keypair, attempts funding to 1 SOL, then runs smoke):
cargo make devnet-auto-snipeOptional environment overrides:
CONFIG_PATHDEVNET_TARGET_MINTKEYPAIR_PATHDEVNET_RPC_URLDEVNET_WSS_URLSMOKE_TIMEOUT_SECS
If automatic airdrop is rate-limited, the script prompts manual funding via https://faucet.solana.com.
- Tests (nextest):
cargo make test - Live read-only replay probe:
SLOTSTRIKE_LIVE_SIGNATURE=<sig> SLOTSTRIKE_LIVE_KIND=cpmm|openbook SLOTSTRIKE_LIVE_MINT=<mint> cargo test --test live_raydium_dry_run -- --ignored --nocapture - Clippy:
cargo make clippy - Fuzz all targets:
cargo make fuzz-all
Fuzz prerequisites (one-time):
CARGO_NET_OFFLINE=false cargo install cargo-fuzzrustup toolchain install nightly
Synthetic replay benchmark:
cargo make replay-benchmarkSymbolized release profile:
CARGO_PROFILE_RELEASE_STRIP=none perf record -o perf-slotstrike.data -- target/release/slotstrike --config slotstrike.example.toml --replay-benchmark
perf report --stdio --no-children -i perf-slotstrike.dataTune with:
runtime.replay_event_countruntime.replay_burst_size
Current measured replay costs on this host with events=50000 and repeats=20:
sof_structured_creation_scan:25,580,254 ev/s,p50 20ns,p99 30nssof_structured_swap_scan:25,368,739 ev/s,p50 20ns,p99 40ns
Out-of-the-box SOF improvement versus the old cold legacy baseline on this same host:
- Creation path:
25,580,254 ev/swith SOF vs1,959,388 ev/son old FPGA DMA and3,861,559 ev/son old kernel-bypass. - Exact creation speedup:
13.06xvs old FPGA DMA,6.62xvs old kernel-bypass. - Swap-reject path:
25,368,739 ev/swith SOF vs2,548,307 ev/son old FPGA DMA and3,808,408 ev/son old kernel-bypass. - Exact swap-reject speedup:
9.96xvs old FPGA DMA,6.66xvs old kernel-bypass.
Interpretation:
- Slotstrike no longer ships the legacy raw-log ingress path. The active runtime is always structured and SOF-native.
- Historical cold legacy baseline on this same host, captured earlier on March 29, 2026 before the legacy finder-reuse pass:
fpga_dma_creation_scan = 1,959,388 ev/s,kernel_bypass_creation_scan = 3,861,559 ev/s,fpga_dma_swap_scan = 2,548,307 ev/s,kernel_bypass_swap_scan = 3,808,408 ev/s. private_shredshould be preferred when you trust the feed and want the lowest end-to-end latency plus SOF-TX direct routing support.grpcis the next-best operational choice when you want the same structured Slotstrike processing path without running private shred infrastructure.websocketis still valid through SOF, but its transport/decode layer is typically the least attractive of the SOF options for ultra-low-latency use.- The SOF candidate plugin is instruction-aware for Raydium pool creation and only forwards structured CPMM/OpenBook create transactions into the sniper path.
- The strategy handlers no longer refetch
JsonParsedtransactions or scan RPC log strings. They parse instruction data and accounts directly from the SOF transaction, resolving ALT lookups only when needed. - ALT lookup tables are now cached in-process and only refetched when a transaction references indexes beyond the cached table length, which removes repeated
getMultipleAccountschurn from the live v0 path. - The latest symbolized profile is benchmark-noise dominated. Slotstrike replay symbols fell below the
0.5%report threshold; the top samples were VDSO clock reads plus allocator/page-fault overhead from the synthetic harness.
- Runtime architecture:
docs/architecture/runtime.md - On-call playbook:
docs/runbooks/oncall.md - Contribution guide:
CONTRIBUTING.md
Use at your own risk. You are responsible for all trading decisions, infrastructure security, and financial outcomes.