Skip to main content

Solana ShredStream SDK for Python — PyO3 bindings to the Rust core, ultra-low latency UDP shred streaming.

Project description

Solana ShredStream SDK for Python

Solana ShredStream SDK/Decoder for Python, enabling ultra-low latency Solana transaction streaming via UDP shreds from ShredStream.com

Part of the ShredStream.com ecosystem — ultra-low latency Solana shred streaming via UDP.

License: MIT Python

📋 Prerequisites

  1. Create an account on ShredStream.com
  2. Launch a Shred Stream and pick your region (Frankfurt, Amsterdam, Singapore, Chicago, and more)
  3. Enter your server's IP address and the UDP port where you want to receive shreds
  4. Open your firewall for inbound UDP traffic on that port (e.g. configure your cloud provider's security group)
  5. Install Python 3.10+:
    # Linux (Ubuntu/Debian)
    sudo apt update && sudo apt install -y python3 python3-venv python3-pip
    
    # macOS
    brew install python3
    

🎁 Want to try before you buy? Open a ticket on our Discord to request a free trial.

📦 Installation

# Create a virtual environment (recommended)
python3 -m venv venv
source venv/bin/activate

# Install the SDK
pip install shredstream

⚡ Quick Start

Create a file main.py:

from shredstream import ShredListener
from solders.transaction import VersionedTransaction
import os

PORT = int(os.environ.get("SHREDSTREAM_PORT", 8001))
listener = ShredListener.bind(PORT)

# Decoded transactions — ready-to-use Solana transactions
for slot, txs in listener:
    for raw in txs:
        tx = VersionedTransaction.from_bytes(raw)
        print(f"slot {slot}: {tx.signatures[0]}")

Each raw is the bincode wire-format encoding of a VersionedTransaction.

Run it:

python3 main.py

📖 API Reference

ShredListener

  • ShredListener.bind(port: int) -> ShredListener — Bind with defaults (64 MB recv buf, 3 slot window, FEC enabled)
  • ShredListener.bind_with_options(port, options: ListenerOptions) -> ShredListener — Custom configuration
  • ShredListener.offline() -> ShredListener — Bind on ephemeral port; drive via handle_packet
  • ShredListener.from_fd(fd: int, options=None) -> ShredListener — Adopt an existing UDP file descriptor
  • Iterator protocolfor slot, txs in listener: yields (int, list[bytes])
  • listener.shreds() -> ShredIter — Iterator yielding RawShred headers (no decode)
  • listener.handle_packet(data: bytes) -> tuple[int, list[bytes]] | None — Inject an externally-received UDP datagram
  • listener.local_addr() -> str — Bound socket address
  • listener.close() — Release the socket

ListenerOptions

ListenerOptions(
    recv_buf=64*1024*1024,
    max_age=3,
    busy_poll_us=200,
    busy_poll_disabled=False,
    pool_size=4096,
    enable_fec=True,
    disable_salvage_delivery=False,
    accumulator=AccumulatorConfig(),
)
Field Default Description
recv_buf 64 MB SO_RCVBUF size
max_age 3 Slot retention window
busy_poll_us 200 Linux SO_BUSY_POLL µs
busy_poll_disabled False Pass True to disable busy poll explicitly
pool_size 4096 Number of 2 KiB buffers in the zero-copy pool
enable_fec True Reed-Solomon recovery on dropped data shreds
disable_salvage_delivery False Drop salvaged tail txs for lowest p99
accumulator AccumulatorConfig() FEC and stuck-batch tuning

AccumulatorConfig

Field Default Description
max_fec_sets_per_slot 32 Per-slot FEC buffer cap
stuck_batch_timeout_ms 50 Force-finalize a stuck batch after this delay

Metrics

Read-only @property accessors on ShredListener:

Group Methods
Throughput data_shred_count_total, code_shred_count_total, bytes_received, slot_count
Decoder batches_decoded_streaming_total, batches_decoded_fallback_total, batches_skipped_total, decode_errors_total
FEC fec_recoveries_total, fec_recovery_failures_total, fec_sets_discarded_unused_total, fec_sets_evicted_early_total
Unparseable unparseable_packets, unparseable_too_short, unparseable_variant, unparseable_payload, unparseable_slot_range
Slot lifecycle slots_completed_total, slots_evicted_by_age, dropped_known_slots, harvested_batches_total, salvaged_tail_tx_total
Tail control batches_force_finalized_corrupted_total, batches_force_finalized_timeout_total
Pool / I-O pool_exhausted_count, last_io_error_kind, busy_poll_active

Helpers

  • shredstream.classify_variant(byte: int) -> VariantKind | None — Classify a shred variant byte
  • shredstream.pin_current_thread_to_cpu(cpu_id: int) -> None — Best-effort thread pinning. Linux: sched_setaffinity; macOS: hint; other: no-op

🎯 Use Cases

ShredStream.com shred data powers a wide range of latency-sensitive strategies — HFT, MEV extraction, token sniping, copy trading, liquidation bots, on-chain analytics, and more.

💎 PumpFun Token Sniping

ShredStream.com SDK detects PumpFun token creations ~499ms before they appear on PumpFun's live feed — tested across 25 consecutive detections:

ShredStream.com SDK vs PumpFun live feed — ~499ms advantage

Ready-to-run example included: see examples/pumpfun_creates.py. Run with python3 examples/pumpfun_creates.py [port].

⚙️ Configuration

OS Tuning

# Linux -- increase max receive buffer
sudo sysctl -w net.core.rmem_max=67108864
sudo sysctl -w net.core.busy_read=200

# macOS
sudo sysctl -w kern.ipc.maxsockbuf=67108864

Dependencies

  • solders>=0.21 — Required to decode the bincode-encoded transactions yielded by the iterator.

🚀 Launch a Shred Stream

Need a feed? Launch a Solana Shred Stream on ShredStream.com — sub-millisecond delivery, multiple global regions, 5-minute setup.

🔗 Links

📄 License

MIT — ShredStream.com

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

shredstream-2.0.1.tar.gz (36.7 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

shredstream-2.0.1-cp38-abi3-win_amd64.whl (441.1 kB view details)

Uploaded CPython 3.8+Windows x86-64

shredstream-2.0.1-cp38-abi3-manylinux_2_28_x86_64.whl (530.5 kB view details)

Uploaded CPython 3.8+manylinux: glibc 2.28+ x86-64

shredstream-2.0.1-cp38-abi3-manylinux_2_28_aarch64.whl (506.6 kB view details)

Uploaded CPython 3.8+manylinux: glibc 2.28+ ARM64

shredstream-2.0.1-cp38-abi3-macosx_11_0_arm64.whl (507.6 kB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

File details

Details for the file shredstream-2.0.1.tar.gz.

File metadata

  • Download URL: shredstream-2.0.1.tar.gz
  • Upload date:
  • Size: 36.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.13.1

File hashes

Hashes for shredstream-2.0.1.tar.gz
Algorithm Hash digest
SHA256 db7930e407c7a5f91e7d2b21bb571f8ea543f56cddc74ec4aa78bb6908ea1d78
MD5 b811ad6255aed5eacc3d8a1776653069
BLAKE2b-256 fd26a2ad21eb7eb3324fb062a775a305a7afc754c1a4fd33f2c5ff93ea90b085

See more details on using hashes here.

File details

Details for the file shredstream-2.0.1-cp38-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for shredstream-2.0.1-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 38f3deceb10ada479bdbb9a0714759588938e91575dca0d553f491298c9da613
MD5 52494ea0f78de25ef8b336ed91f8a364
BLAKE2b-256 b31b244b3f7c5b9f04b71de546d3b7c696db683e5351921597b305243f4479ea

See more details on using hashes here.

File details

Details for the file shredstream-2.0.1-cp38-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for shredstream-2.0.1-cp38-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 683baa5b358aa0a7b975c063a15197799e8be4df480842c24e62245ae6500186
MD5 400292f5faaf1ec80120fa68dd28b414
BLAKE2b-256 5a196b6627f5e1143eccd29f8e27179561b3a3ca612f4e9c0935e25c0e81f420

See more details on using hashes here.

File details

Details for the file shredstream-2.0.1-cp38-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for shredstream-2.0.1-cp38-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5392173c79daf64e610a9412b77ced8772e32936b83bad5a377fe1c29190352e
MD5 d7dd671acd39f16eed71979650807c2a
BLAKE2b-256 678681e1e7ca57b67d1ed7bc4f4b87e2bda870a58dc789c9e11c9795e5f0a243

See more details on using hashes here.

File details

Details for the file shredstream-2.0.1-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for shredstream-2.0.1-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0d027e41c25e703690acf5921876c5663d9e24ea03aa172b50dbcc9efb31f24b
MD5 4986969cf18cc8b2eea19eea23193a66
BLAKE2b-256 bdc0fb959143ddd54e2cb68423e60c5a1695ce29fb62dc6a6fdd35587c63151a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page