⚡ Быстрый старт (сырые шреды)
Raw Shred Stream доставляет сырые шреды Solana на ваш сервер в виде UDP-датаграмм — прямо в ваш собственный приёмник. Этот быстрый старт биндит UDP-сокет и принимает эти датаграммы, чтобы вы убедились, что данные идут. Дальше дешрединг, сборка и декодирование транзакций выполняются в вашем собственном конвейере — через оптимизированный декодер, чтобы преимущество по задержке сохранилось.
Хотите полностью обойтись без декодера? Decoded Shred Stream доставляет транзакции уже собранными в стандартном wire-формате. Полный конвейер сырых шредов описан в разделе Создание приёмника.
📋 Предварительные требования
- Создайте аккаунт на ShredStream.com
- Запустите Raw Shred Stream и выберите регион
- Укажите IP-адрес вашего сервера и UDP-порт для приёма shreds
- Откройте firewall для входящего UDP-трафика на этом порту -- см. Сетевая настройка
💻 Минимальный приёмник UDP
Каждый пример биндит UDP-сокет на порту, который вы указали при создании стрима на ShredStream.com, и печатает размер каждой входящей датаграммы. Пришедшие байты — это сырой шред Solana: отправьте их своему дешреддеру / декодеру.
🔹 Python
import os, socketPORT = int(os.environ.get("SHREDSTREAM_PORT", 8080))sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)sock.bind(("0.0.0.0", PORT))while True:shred, _ = sock.recvfrom(65535)# Сырые байты шреда Solana — передайте их своему дешреддеру / декодеру.print(f"shred: {len(shred)} bytes")
🔹 JavaScript / TypeScript
import dgram from 'node:dgram';const PORT = parseInt(process.env.SHREDSTREAM_PORT || '8080');const sock = dgram.createSocket('udp4');sock.on('message', (shred) => {// Сырые байты шреда Solana — передайте их своему дешреддеру / декодеру.console.log('shred:', shred.length, 'bytes');});sock.bind(PORT, '0.0.0.0');
🔹 Rust
use std::net::UdpSocket;fn main() -> std::io::Result<()> {let port: u16 = std::env::var("SHREDSTREAM_PORT").ok().and_then(|v| v.parse().ok()).unwrap_or(8080);let sock = UdpSocket::bind(("0.0.0.0", port))?;let mut buf = [0u8; 65535];loop {let (len, _) = sock.recv_from(&mut buf)?;// Сырые байты шреда Solana — передайте их своему дешреддеру / декодеру.println!("shred: {} bytes", len);}}
🔹 Go
package mainimport ("fmt""net""os""strconv")func main() {port, _ := strconv.Atoi(os.Getenv("SHREDSTREAM_PORT"))if port == 0 {port = 8080}conn, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.IPv4zero, Port: port})if err != nil {panic(err)}defer conn.Close()buf := make([]byte, 65535)for {n, _, err := conn.ReadFromUDP(buf)if err != nil {continue}// Сырые байты шреда Solana — передайте их своему дешреддеру / декодеру.fmt.Printf("shred: %d bytes\n", n)}}
Замените 8080 на порт, который вы указали для своего стрима в панели управления ShredStream.com.
Этот цикл лишь подтверждает, что датаграммы приходят. Сырым шредам по-прежнему нужны дешрединг, сборка и декодирование транзакций — этот конвейер строите вы. Чтобы полностью его пропустить, см. Decoded Shred Stream: транзакции приходят уже собранными.
🧩 Прежний клиент: shredstream
Внимание: наш клиент больше не рекомендуется для чувствительных к задержке сценариев. Отдавайте предпочтение другому клиенту или напрямую нашему сервису Decoded Shred Stream.
Если нужно решение, работающее уже сегодня, прежний клиент shredstream биндит порт, выполняет дешрединг и сборку на стороне клиента и отдаёт готовые транзакции Solana. Дешрединг на стороне клиента стоит задержки — подходит для старта, но не для борьбы за задержку.
| Язык | Установка | Пакет |
|---|---|---|
| JavaScript / TypeScript | npm install shredstream | npm |
| Python | pip install shredstream | PyPI |
| Rust | cargo add shredstream | crates.io |
| Go | go get github.com/shredstream/shredstream-sdk-go/v2 | GitHub |
// cargo add shredstreamuse shredstream::ShredListener;fn main() {let port: u16 = std::env::var("SHREDSTREAM_PORT").ok().and_then(|v| v.parse().ok()).unwrap_or(8001);let mut listener = ShredListener::bind(port).expect("bind");// Client-side deshredding → ready Solana transactionsfor (slot, transactions) in listener.transactions() {for tx in &transactions {println!("slot {}: {}", slot, tx.signatures[0]);}}}
⚙️ Тюнинг буферов ОС
Ваш приёмник должен запросить достаточно большой буфер приёма сокета (рекомендуется минимум 25 МБ) через setsockopt(SO_RCVBUF, ...). Кроме того, нужно разрешить этот размер буфера на уровне ОС:
# Linuxsudo sysctl -w net.core.rmem_max=33554432# macOSsudo sysctl -w kern.ipc.maxsockbuf=33554432
Подробности -- в разделе Сетевая настройка.
➡️ Следующие шаги
- Создание приёмника — что включает полный конвейер сырых шредов и когда лучше подойдёт Decoded Shred Stream
- Сетевая настройка — firewall и настройка ОС
- Лучшие практики — мониторинг, резервирование и производительность
- Устранение неполадок — типичные проблемы и решения