/yellowstone-grpc
Real-time Solana transaction and account streaming via Yellowstone gRPC (Geyser plugin)
$ npx -y skills add agiprolabs/claude-trading-skills --skill yellowstone-grpc --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/yellowstone-grpc
Context preview
The summary Claude sees to decide when to auto-load this skill.
Real-time Solana transaction and account streaming via Yellowstone gRPC (Geyser plugin)
SKILL.md
yellowstone-grpc.SKILL.mdname: yellowstone-grpc
description: Real-time Solana transaction and account streaming via Yellowstone gRPC (Geyser plugin)
Yellowstone gRPC — Real-Time Solana Streaming
Stream every transaction, account update, slot, and block on Solana in real-time using Yellowstone gRPC. This is the foundation for any latency-sensitive Solana trading system — replacing REST polling with push-based streaming at ~5ms slot latency.
Why Yellowstone gRPC
| Method | Slot Latency (p90) | Use Case | |--------|-------------------|----------| | REST polling (`getTransaction`) | ~150ms+ | Historical lookups | | WebSocket (`onLogs`) | ~10ms | Simple notifications | | **Yellowstone gRPC** | **~5ms** | **Production trading systems** |
Yellowstone is a Geyser plugin that exposes Solana validator data over gRPC. Every major RPC provider runs it. You subscribe to filtered streams of transactions, account changes, slots, blocks, and entries — and the data pushes to you.
Quick Start
1. Get Access
You need a gRPC-enabled RPC provider. See `references/providers.md` for full comparison.
| Provider | gRPC Entry Price | Notes | |----------|-----------------|-------| | Shyft | $199/mo | Best value, 7 regions, unlimited bandwidth | | Helius | $999/mo | LaserStream, DAS APIs included | | Triton One | ~$2,900/mo | Created Yellowstone, lowest latency | | QuickNode | Plan-dependent | Marketplace add-on | | Chainstack | $49/mo (1 stream) | Budget option, limited filters | | Alchemy | Free tier available | Compute-unit metered |
2. Install Dependencies
# Python
uv pip install grpcio grpcio-tools protobuf base58 solders python-dotenv
# Generate Python stubs from proto files
git clone https://github.com/rpcpool/yellowstone-grpc.git
python -m grpc_tools.protoc \
-I./yellowstone-grpc/yellowstone-grpc-proto/proto/ \
--python_out=./generated \
--pyi_out=./generated \
--grpc_python_out=./generated \
./yellowstone-grpc/yellowstone-grpc-proto/proto/*.proto
# Rust — Cargo.toml
[dependencies]
yellowstone-grpc-client = "6.0.0"
yellowstone-grpc-proto = "6.0.0"
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }
futures = "0.3"
bs58 = "0.5"# TypeScript
npm install @triton-one/yellowstone-grpc @solana/web3.js
3. Environment Setup
export GRPC_ENDPOINT="https://grpc.ny.shyft.to" # your provider endpoint
export GRPC_TOKEN="your-x-token-here" # from provider dashboard
4. Connect and Subscribe
import grpc
import os
from generated import geyser_pb2, geyser_pb2_grpc
endpoint = os.environ["GRPC_ENDPOINT"].replace("https://", "")
token = os.environ["GRPC_TOKEN"]
# Authenticated TLS channel
auth_creds = grpc.metadata_call_credentials(
lambda ctx, cb: cb((("x-token", token),), None)
)
channel = grpc.secure_channel(
endpoint,
grpc.composite_channel_credentials(
grpc.ssl_channel_credentials(), auth_creds
),
options=[("grpc.max_receive_message_length", 64 * 1024 * 1024)],
)
stub = geyser_pb2_grpc.GeyserStub(channel)Core Concepts
Subscription Types
| Type | What You Get | Use Case | |------|-------------|----------| | `transactions` | Full transaction with metadata | DEX swap monitoring, copy trading | | `accounts` | Account data on change | Pool reserve tracking, token supply | | `slots` | Slot progression events | Block timing, confirmation tracking | | `blocks` | Full block contents | Block-level analysis | | `blocks_meta` | Block metadata only | Lightweight block tracking | | `entry` | Block entries (shred groups) | Low-level validator data | | `transactions_status` | Tx status without full data | Lightweight confirmation |
Filter Logic
- Multiple filter **types** (transactions + accounts) = **AND** — you get updates matching any type
- Values within arrays (multiple addresses in `account_include`) = **OR**
- Named filters let you distinguish which filter matched in the response
- Sending a new `SubscribeRequest` **replaces** all previous filters
Commitment Levels
| Level | Speed | Safety | Use For | |-------|-------|--------|---------| | `PROCESSED` | Fastest | May be rolled back | Time-critical signals | | `CONFIRMED` | ~400ms slower | Supermajority voted | Most trading use cases | | `FINALIZED` | ~6-12s slower | Irreversible | Settlement verification |
Common Subscription Patterns
Watch All Swaps on a DEX Program
# Filter: all non-vote, non-failed transactions involving PumpFun
request = geyser_pb2.SubscribeRequest(
transactions={
"pumpfun": geyser_pb2.SubscribeRequestFilterTransactions(
account_include=["6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"],
vote=False,
failed=False,
)
},
commitment=geyser_pb2.CommitmentLevel.PROCESSED,
)Track Specific Wallets
request = geyser_pb2.SubscribeRequest(
transactions={
"whales": geyser_pb2.SubscribeRequestFilterTransactions(
account_include=[
"WalletAddress1...",
"WalletAddress2...",
],
vote=False,
failed=False,
)
},
commitment=geyser_pb2.CommitmentLevel.CONFIRMED,
)Monitor Pool Reserves (Account Subscription)
request = geyser_pb2.SubscribeRequest(
accounts={
"raydium_pools": geyser_pb2.SubscribeRequestFilterAccounts(
account=["PoolAddress1...", "PoolAddress2..."],
)
},
commitment=geyser_pb2.CommitmentLevel.PROCESSED,
)Reduce Bandwidth with Data Slicing
# Only get the first 40 bytes of account data (e.g., just the discriminator + key fields)
request = geyser_pb2.SubscribeRequest(
accounts={
"token_accounts": geyser_pb2.SubscribeRequestFilterAccounts(
owner=["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"],
filters=[
geyser_pb2.SubscribeRequestFilterAccountsFilter(Read more
name: yellowstone-grpc description: Real-time Solana transaction and account streaming via Yellowstone gRPC (Geyser plugin)
Yellowstone gRPC — Real-Time Solana Streaming
Stream every transaction, account update, slot, and block on Solana in real-time using Yellowstone gRPC. This is the foundation for any latency-sensitive Solana trading system — replacing REST polling with push-based streaming at ~5ms slot latency.
Why Yellowstone gRPC
| Method | Slot Latency (p90) | Use Case | |--------|-------------------|----------| | REST polling (`getTransaction`) | ~150ms+ | Historical lookups | | WebSocket (`onLogs`) | ~10ms | Simple notifications | | **Yellowstone gRPC** | **~5ms** | **Production trading systems** |
Yellowstone is a Geyser plugin that exposes Solana validator data over gRPC. Every major RPC provider runs it. You subscribe to filtered streams of transactions, account changes, slots, blocks, and entries — and the data pushes to you.
Quick Start
1. Get Access
You need a gRPC-enabled RPC provider. See `references/providers.md` for full comparison.
| Provider | gRPC Entry Price | Notes | |----------|-----------------|-------| | Shyft | $199/mo | Best value, 7 regions, unlimited bandwidth | | Helius | $999/mo | LaserStream, DAS APIs included | | Triton One | ~$2,900/mo | Created Yellowstone, lowest latency | | QuickNode | Plan-dependent | Marketplace add-on | | Chainstack | $49/mo (1 stream) | Budget option, limited filters | | Alchemy | Free tier available | Compute-unit metered |
2. Install Dependencies
# Python uv pip install grpcio grpcio-tools protobuf base58 solders python-dotenv # Generate Python stubs from proto files git clone https://github.com/rpcpool/yellowstone-grpc.git python -m grpc_tools.protoc \ -I./yellowstone-grpc/yellowstone-grpc-proto/proto/ \ --python_out=./generated \ --pyi_out=./generated \ --grpc_python_out=./generated \ ./yellowstone-grpc/yellowstone-grpc-proto/proto/*.proto
# Rust — Cargo.toml
[dependencies]
yellowstone-grpc-client = "6.0.0"
yellowstone-grpc-proto = "6.0.0"
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }
futures = "0.3"
bs58 = "0.5"# TypeScript npm install @triton-one/yellowstone-grpc @solana/web3.js
3. Environment Setup
export GRPC_ENDPOINT="https://grpc.ny.shyft.to" # your provider endpoint export GRPC_TOKEN="your-x-token-here" # from provider dashboard
4. Connect and Subscribe
import grpc
import os
from generated import geyser_pb2, geyser_pb2_grpc
endpoint = os.environ["GRPC_ENDPOINT"].replace("https://", "")
token = os.environ["GRPC_TOKEN"]
# Authenticated TLS channel
auth_creds = grpc.metadata_call_credentials(
lambda ctx, cb: cb((("x-token", token),), None)
)
channel = grpc.secure_channel(
endpoint,
grpc.composite_channel_credentials(
grpc.ssl_channel_credentials(), auth_creds
),
options=[("grpc.max_receive_message_length", 64 * 1024 * 1024)],
)
stub = geyser_pb2_grpc.GeyserStub(channel)Core Concepts
Subscription Types
| Type | What You Get | Use Case | |------|-------------|----------| | `transactions` | Full transaction with metadata | DEX swap monitoring, copy trading | | `accounts` | Account data on change | Pool reserve tracking, token supply | | `slots` | Slot progression events | Block timing, confirmation tracking | | `blocks` | Full block contents | Block-level analysis | | `blocks_meta` | Block metadata only | Lightweight block tracking | | `entry` | Block entries (shred groups) | Low-level validator data | | `transactions_status` | Tx status without full data | Lightweight confirmation |
Filter Logic
- Multiple filter **types** (transactions + accounts) = **AND** — you get updates matching any type
- Values within arrays (multiple addresses in `account_include`) = **OR**
- Named filters let you distinguish which filter matched in the response
- Sending a new `SubscribeRequest` **replaces** all previous filters
Commitment Levels
| Level | Speed | Safety | Use For | |-------|-------|--------|---------| | `PROCESSED` | Fastest | May be rolled back | Time-critical signals | | `CONFIRMED` | ~400ms slower | Supermajority voted | Most trading use cases | | `FINALIZED` | ~6-12s slower | Irreversible | Settlement verification |
Common Subscription Patterns
Watch All Swaps on a DEX Program
# Filter: all non-vote, non-failed transactions involving PumpFun
request = geyser_pb2.SubscribeRequest(
transactions={
"pumpfun": geyser_pb2.SubscribeRequestFilterTransactions(
account_include=["6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"],
vote=False,
failed=False,
)
},
commitment=geyser_pb2.CommitmentLevel.PROCESSED,
)Track Specific Wallets
request = geyser_pb2.SubscribeRequest(
transactions={
"whales": geyser_pb2.SubscribeRequestFilterTransactions(
account_include=[
"WalletAddress1...",
"WalletAddress2...",
],
vote=False,
failed=False,
)
},
commitment=geyser_pb2.CommitmentLevel.CONFIRMED,
)Monitor Pool Reserves (Account Subscription)
request = geyser_pb2.SubscribeRequest(
accounts={
"raydium_pools": geyser_pb2.SubscribeRequestFilterAccounts(
account=["PoolAddress1...", "PoolAddress2..."],
)
},
commitment=geyser_pb2.CommitmentLevel.PROCESSED,
)Reduce Bandwidth with Data Slicing
# Only get the first 40 bytes of account data (e.g., just the discriminator + key fields)
request = geyser_pb2.SubscribeRequest(
accounts={
"token_accounts": geyser_pb2.SubscribeRequestFilterAccounts(
owner=["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"],
filters=[
geyser_pb2.SubscribeRequestFilterAccountsFilter(A comprehensive collection of 67 ready-to-use trading, DeFi, and quantitative finance Agent Skills. Works with Claude Code, Cursor, Codex, Gemini CLI, and 30+ other tools.
Repo: agiprolabs/claude-trading-skills
Other skills on trading-skills.
- /backtrader
Event-driven backtesting with bar-by-bar execution, complex order types, multiple analyzers, and custom indicators
Open skill - /birdeye-api
Solana token market data via Birdeye — prices, OHLCV, trades, token metadata, security checks, and trader activity
Open skill - /coingecko-api
Broad crypto market data from CoinGecko covering 13,000+ tokens. Global market stats, historical price data going back years, exchange volumes, trending tokens, and category filters. Best for macro analysis and long-term historical data.
Open skill - /cointegration-analysis
Cointegration testing for pairs trading using Engle-Granger, Johansen, and rolling stability analysis
Open skill - /copy-trading
Wallet evaluation, monitoring, and copy-trade strategy design for Solana DEX trading
Open skill - /correlation-analysis
Cross-asset correlation analysis including rolling correlation, hierarchical clustering, tail dependence, and regime-dependent correlation
Open skill

