jpskill.com
📦 その他 コミュニティ

shredstream

Jito ShredStream、Shyft RabbitStream、Triton Deshredといった技術を活用し、Solanaのトランザクションを処理前にストリーミング配信することで、取引の透明性向上や高速化に貢献するSkill。

📜 元の英語説明(参考)

Pre-execution Solana transaction streaming via Jito ShredStream, Shyft RabbitStream, and Triton Deshred

🇯🇵 日本人クリエイター向け解説

一言でいうと

Jito ShredStream、Shyft RabbitStream、Triton Deshredといった技術を活用し、Solanaのトランザクションを処理前にストリーミング配信することで、取引の透明性向上や高速化に貢献するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o shredstream.zip https://jpskill.com/download/10434.zip && unzip -o shredstream.zip && rm shredstream.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/10434.zip -OutFile "$d\shredstream.zip"; Expand-Archive "$d\shredstream.zip" -DestinationPath $d -Force; ri "$d\shredstream.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して shredstream.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → shredstream フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

ShredStream — 実行前 Solana データ

ShredStream は、バリデーターがブロックを実行する前にトランザクションデータを提供します。これは通常、標準の Yellowstone gRPC よりも 100〜500 ミリ秒早くなります。確認済みの結果ではなく、トランザクションの意図を確認できます。

これは、時間的制約の厳しい取引戦略にとって、Solana データへの最速の経路です。

仕組み

Solana バリデーターは、トランザクションをshreds(それぞれ約 1,228 バイト、UDP MTU 向けにサイズ調整)にシリアライズすることにより、ブロックを生成します。Shreds は Turbine (Solana のファンアウトプロトコル、2〜3 ホップ) を介して伝播します。ShredStream は、Jito の Block Engine を介してリーダーバリデーターから直接 shreds を受信することにより、Turbine をバイパスします。

Leader Validator
     │
     ├── Turbine (standard, 2-3 hops, 200-500ms)
     │       └── Your RPC Node → Yellowstone gRPC (post-execution)
     │
     └── Jito Block Engine (direct)
              └── ShredStream Proxy (your server)
                   ├── UDP shreds → Your RPC/Validator (faster block building)
                   └── gRPC entries → Your Trading Bot (decoded transactions)

取得できるもの vs. 取得できないもの

利用可能 (実行前) 利用不可 (実行が必要)
トランザクション署名 成功/失敗ステータス
アカウントキー (pubkeys) 残高の変更 (実行前/後)
命令 (プログラム、アカウント、データ) ログメッセージ
アドレスルックアップテーブル参照 インナー命令 (CPI)
スロット番号 トークン残高の変更
消費されたコンピュートユニット

重要なトレードオフ: 完全性よりも速度。これから起こることを確認できますが、実際に成功したかどうかを確認することはできません。表示されるトランザクションの中には、最終的に失敗するものもあります。

実行前データを取得する 3 つの方法

プロバイダー 製品 レイテンシー アクセス コスト
Jito ShredStream Proxy リーダーから約 10〜50 ミリ秒 申請 + 認証キーペア 無料 (ベータ版)
Shyft RabbitStream gRPC よりも約 15〜100 ミリ秒高速 Shyft gRPC プラン 月額 199 ドルから
Triton Deshred (SubscribeDeshred) shred から約 6.3 ミリ秒 p50 Triton の顧客 月額約 2,900 ドル以上

詳細な比較については、references/providers_compared.md を参照してください。

オプション 1: Jito ShredStream Proxy

最も直接的なアプローチ — Jito のオープンソースプロキシを自分のサーバーで実行します。

アクセスを取得する

  1. Solana キーペアを生成します: solana-keygen new -o shred_auth.json
  2. Jito のフォーム に公開鍵を添えて申請します
  3. 承認を待ちます (キーペアがホワイトリストに登録されます)
  4. ステーキング要件なし、ベータ版期間中は無料

プロキシを実行する

# クローンしてビルド
git clone https://github.com/jito-labs/shredstream-proxy.git --recurse-submodules
cd shredstream-proxy

# gRPC を有効にして実行します (キーフラグ: --grpc-service-port)
RUST_LOG=info cargo run --release --bin jito-shredstream-proxy -- shredstream \
    --block-engine-url https://mainnet.block-engine.jito.wtf \
    --auth-keypair /path/to/shred_auth.json \
    --desired-regions ny,amsterdam \
    --dest-ip-ports 127.0.0.1:8001 \
    --grpc-service-port 7777

Docker (UDP にはホストネットワークが必要):

docker run -d --name shredstream-proxy --rm \
  --network host \
  -e RUST_LOG=info \
  -e BLOCK_ENGINE_URL=https://mainnet.block-engine.jito.wtf \
  -e AUTH_KEYPAIR=/app/shred_auth.json \
  -e DESIRED_REGIONS=ny,amsterdam \
  -e DEST_IP_PORTS=127.0.0.1:8001 \
  -e GRPC_SERVICE_PORT=7777 \
  -v /path/to/shred_auth.json:/app/shred_auth.json \
  jitolabs/jito-shredstream-proxy shredstream

構成

パラメータ 説明
BLOCK_ENGINE_URL Jito block engine エンドポイント https://mainnet.block-engine.jito.wtf
AUTH_KEYPAIR ホワイトリストに登録された Solana キーペアへのパス shred_auth.json
DESIRED_REGIONS 最大 2 つ、カンマ区切り ny,amsterdam
DEST_IP_PORTS 生の shreds (UDP) を転送する場所 127.0.0.1:8001
GRPC_SERVICE_PORT gRPC エントリーストリーミングを有効にする 7777
SRC_BIND_PORT 受信 shred UDP ポート 20000

利用可能なリージョン: amsterdam, dublin, frankfurt, london, ny, salt-lake-city, singapore, tokyo

動作確認

# UDP 経由で shreds が到着しているか確認します
sudo tcpdump 'udp and dst port 20000'
# 多くの ~1200 バイトのパケットが継続的に表示されるはずです

gRPC 経由で使用する

use jito_protos::shredstream::{
    shredstream_proxy_client::ShredstreamProxyClient,
    SubscribeEntriesRequest,
};

let mut client = ShredstreamProxyClient::connect("http://127.0.0.1:7777").await?;
let mut stream = client
    .subscribe_entries(SubscribeEntriesRequest {})
    .await?
    .into_inner();

while let Some(entry) = stream.message().await? {
    let entries: Vec<solana_entry::entry::Entry> =
        bincode::deserialize(&entry.entries)?;

    for e in &entries {
        for tx in &e.transactions {
            let sig = tx.signatures[0];
            let msg = tx.message();
            // Parse instructions, accounts, etc.
        }
    }

    println!("Slot {}: {} entries, {} transactions",
        entry.slot,
        entries.len(),
        entries.iter().map(|e| e.transactions.len()).sum::<usize>()
    );
}

オプション 2: Shyft RabbitStream

Yellowstone gRPC のドロップイン代替 — 同じ SubscribeRequest 形式で、エンドポイントが異なるだけです。インフラストラクチャを実行せずに実行前データを取得する最も簡単な方法です。

export GRPC_ENDPOINT="https://rabbitstream.ny.shyft.to"
export GRPC_TOKEN="your-shyft-x-token"
# yellowstone-grpc と同じコード、エンドポイントが異なるだけ
import grpc

endpoint = "rabbitstream.ny.shyft.to"
token = os.environ["GRPC_TOKEN"]

# ... 標準の Yellowstone 接続コード ...
# トランザクションをサブスクライブ — 同じフィルター形式
request = SubscribeRequest(
    transactions={
        "pumpfun": SubscribeRequestFilterTransactions(
            account_include=["6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"],
            vote=False,
            failed=False,
        )
    },
    commitment=Commitm
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

ShredStream — Pre-Execution Solana Data

ShredStream gives you transaction data before the validator executes the block — typically 100-500ms earlier than standard Yellowstone gRPC. You see transaction intent, not confirmed results.

This is the fastest path to Solana data for time-critical trading strategies.

How It Works

Solana validators produce blocks by serializing transactions into shreds (~1,228 bytes each, sized for UDP MTU). Shreds propagate through Turbine (Solana's fanout protocol, 2-3 hops). ShredStream bypasses Turbine by receiving shreds directly from leader validators via Jito's Block Engine.

Leader Validator
     │
     ├── Turbine (standard, 2-3 hops, 200-500ms)
     │       └── Your RPC Node → Yellowstone gRPC (post-execution)
     │
     └── Jito Block Engine (direct)
              └── ShredStream Proxy (your server)
                   ├── UDP shreds → Your RPC/Validator (faster block building)
                   └── gRPC entries → Your Trading Bot (decoded transactions)

What You Get vs. What You Don't

Available (Pre-Execution) NOT Available (Needs Execution)
Transaction signatures Success/failure status
Account keys (pubkeys) Balance changes (pre/post)
Instructions (program, accounts, data) Log messages
Address lookup table references Inner instructions (CPI)
Slot number Token balance changes
Compute units consumed

Key tradeoff: Speed for completeness. You see what's about to happen but can't confirm it actually succeeded. Some transactions you see will ultimately fail.

Three Ways to Get Pre-Execution Data

Provider Product Latency Access Cost
Jito ShredStream Proxy ~10-50ms from leader Apply + auth keypair Free (beta)
Shyft RabbitStream ~15-100ms faster than gRPC Shyft gRPC plan From $199/mo
Triton Deshred (SubscribeDeshred) ~6.3ms p50 from shred Triton customer ~$2,900+/mo

See references/providers_compared.md for detailed comparison.

Option 1: Jito ShredStream Proxy

The most direct approach — run Jito's open-source proxy on your own server.

Get Access

  1. Generate a Solana keypair: solana-keygen new -o shred_auth.json
  2. Apply at Jito's form with your public key
  3. Wait for approval (your keypair gets whitelisted)
  4. No staking requirement, free during beta

Run the Proxy

# Clone and build
git clone https://github.com/jito-labs/shredstream-proxy.git --recurse-submodules
cd shredstream-proxy

# Run with gRPC enabled (key flag: --grpc-service-port)
RUST_LOG=info cargo run --release --bin jito-shredstream-proxy -- shredstream \
    --block-engine-url https://mainnet.block-engine.jito.wtf \
    --auth-keypair /path/to/shred_auth.json \
    --desired-regions ny,amsterdam \
    --dest-ip-ports 127.0.0.1:8001 \
    --grpc-service-port 7777

Docker (host networking required for UDP):

docker run -d --name shredstream-proxy --rm \
  --network host \
  -e RUST_LOG=info \
  -e BLOCK_ENGINE_URL=https://mainnet.block-engine.jito.wtf \
  -e AUTH_KEYPAIR=/app/shred_auth.json \
  -e DESIRED_REGIONS=ny,amsterdam \
  -e DEST_IP_PORTS=127.0.0.1:8001 \
  -e GRPC_SERVICE_PORT=7777 \
  -v /path/to/shred_auth.json:/app/shred_auth.json \
  jitolabs/jito-shredstream-proxy shredstream

Configuration

Parameter Description Example
BLOCK_ENGINE_URL Jito block engine endpoint https://mainnet.block-engine.jito.wtf
AUTH_KEYPAIR Path to whitelisted Solana keypair shred_auth.json
DESIRED_REGIONS Max 2, comma-separated ny,amsterdam
DEST_IP_PORTS Where to forward raw shreds (UDP) 127.0.0.1:8001
GRPC_SERVICE_PORT Enable gRPC entry streaming 7777
SRC_BIND_PORT Incoming shred UDP port 20000

Available regions: amsterdam, dublin, frankfurt, london, ny, salt-lake-city, singapore, tokyo

Verify It's Working

# Check shreds are arriving via UDP
sudo tcpdump 'udp and dst port 20000'
# Should see many ~1200-byte packets continuously

Consume via gRPC

use jito_protos::shredstream::{
    shredstream_proxy_client::ShredstreamProxyClient,
    SubscribeEntriesRequest,
};

let mut client = ShredstreamProxyClient::connect("http://127.0.0.1:7777").await?;
let mut stream = client
    .subscribe_entries(SubscribeEntriesRequest {})
    .await?
    .into_inner();

while let Some(entry) = stream.message().await? {
    let entries: Vec<solana_entry::entry::Entry> =
        bincode::deserialize(&entry.entries)?;

    for e in &entries {
        for tx in &e.transactions {
            let sig = tx.signatures[0];
            let msg = tx.message();
            // Parse instructions, accounts, etc.
        }
    }

    println!("Slot {}: {} entries, {} transactions",
        entry.slot,
        entries.len(),
        entries.iter().map(|e| e.transactions.len()).sum::<usize>()
    );
}

Option 2: Shyft RabbitStream

Drop-in replacement for Yellowstone gRPC — same SubscribeRequest format, just a different endpoint. Easiest way to get pre-execution data without running infrastructure.

export GRPC_ENDPOINT="https://rabbitstream.ny.shyft.to"
export GRPC_TOKEN="your-shyft-x-token"
# Same code as yellowstone-grpc, just different endpoint
import grpc

endpoint = "rabbitstream.ny.shyft.to"
token = os.environ["GRPC_TOKEN"]

# ... standard Yellowstone connection code ...
# Subscribe to transactions — same filter format
request = SubscribeRequest(
    transactions={
        "pumpfun": SubscribeRequestFilterTransactions(
            account_include=["6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"],
            vote=False,
            failed=False,
        )
    },
    commitment=CommitmentLevel.PROCESSED,
)

Limitations: Only transaction filters work. No account, slot, or block subscriptions. The meta field is empty (no execution results).

Regional endpoints: rabbitstream.{ny,va,ams,fra}.shyft.to

Option 3: Triton Deshred

Lowest latency (~6.3ms p50) via Triton's SubscribeDeshred RPC. Same Yellowstone client, different method.

// Requires yellowstone-grpc-client with Deshred support
let (mut tx, mut stream) = client.subscribe_deshred().await?;

tx.send(SubscribeDeshredRequest {
    deshred_transactions: hashmap!{
        "pumpfun".to_string() => SubscribeRequestFilterDeshredTransactions {
            vote: Some(false),
            account_include: vec!["6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P".into()],
            ..Default::default()
        }
    },
    ..Default::default()
}).await?;

Access: Triton customers only, paid beta, requires their custom Agave validator fork.

Parsing Pre-Execution Transactions

Without execution metadata, parsing is simpler but requires program-specific knowledge.

Identify the Program

# From a raw VersionedTransaction (post-deserialization)
account_keys = [str(k) for k in tx.message.account_keys]
for ix in tx.message.instructions:
    program_id = account_keys[ix.program_id_index]
    if program_id == "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P":
        # This is a PumpFun instruction
        discriminator = ix.data[:8]
        # Decode instruction data per PumpFun IDL

Instruction Discriminators

Most Solana programs use 8-byte discriminators (Anchor SHA256 hash of the instruction name). Match instruction.data[:8] against known values for each program.

# Common approach
PUMPFUN_CREATE = bytes.fromhex("181ec828051c0777")
PUMPFUN_BUY = bytes.fromhex("66063d1201daebea")
PUMPFUN_SELL = bytes.fromhex("33e685a4017f83ad")

disc = ix.data[:8]
if disc == PUMPFUN_BUY:
    # Parse buy parameters from remaining bytes
    ...

Warning: Discriminator values are program-specific and can change between program versions. Always verify against the current program IDL. See the pumpfun-mechanics skill for PumpFun-specific parsing.

Common Architecture: ShredStream + Yellowstone

Most production systems use both:

ShredStream (pre-execution)          Yellowstone gRPC (post-execution)
         │                                      │
         ▼                                      ▼
  Intent Detection                    Confirmation + Reconciliation
  "Wallet X is buying token Y"       "Buy succeeded, wallet now holds Z"
         │                                      │
         ▼                                      ▼
  Pre-compute Response                Execute / Update State
  (route, sign, prepare bundle)       (record PnL, update positions)

This gives you the speed advantage of ShredStream for signal detection while using Yellowstone for reliable state management.

Deployment Requirements

  • Public IP required — NAT breaks UDP shred delivery
  • Host networking — Docker bridge mode drops shred packets
  • UDP port 20000 open for incoming shreds
  • Co-locate near validators — Frankfurt, NY, Amsterdam, London, Tokyo recommended
  • Bare metal preferred — Cloud VMs add 1-5ms jitter from shared NICs

See references/deployment.md for full infrastructure guide.

Files

References

  • references/providers_compared.md — Jito ShredStream vs Shyft RabbitStream vs Triton Deshred
  • references/deployment.md — Infrastructure requirements, region selection, firewall configuration
  • references/proto_reference.md — ShredStream protobuf definitions and Entry parsing

Scripts

  • scripts/parse_shredstream_entries.py — Decode and analyze ShredStream gRPC entries
  • scripts/rabbitstream_monitor.py — Connect to Shyft RabbitStream for pre-execution transaction monitoring