К основному содержанию
скилл CX Codex

solana-rpc — скилл для Claude Code: Solana через JSON-RPC

Скилл даёт агенту прямой доступ к блокчейну Solana по JSON-RPC: балансы, токены, транзакции, аккаунты программ. Пригодится, когда готовые API не отдают нужные данные.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add agiprolabs/claude-trading-skills --skill solana-rpc -a claude-code
Открыть на GitHub

Что делает solana-rpc

Скилл описывает вызовы Solana JSON-RPC и готовые питоновские обёртки к ним. Чтение: getBalance, getAccountInfo, getTokenAccountsByOwner, getTokenLargestAccounts, getTransaction, getBlock, getLatestBlockhash, getProgramAccounts. Запись: sendTransaction и simulateTransaction с base64-транзакцией, плюс функция опроса getSignatureStatuses до подтверждения.

Внутри есть таблица RPC-провайдеров с ценами и лимитами: Helius, QuickNode, Triton, Shyft, Alchemy и публичный mainnet-beta. Публичный эндпоинт бесплатный, но с ограничением по частоте запросов, и автор скилла прямо советует не использовать его для торговли в проде. Для разработки рекомендованы Helius или QuickNode — это значит, что понадобится ключ и адрес в SOLANA_RPC_URL.

Отдельный раздел про commitment: processed, confirmed и finalized. Для торговли автор советует confirmed, потому что значение по умолчанию у разных провайдеров отличается. Ещё одно предупреждение — getProgramAccounts без фильтров dataSize и memcmp может вернуть миллионы записей и упасть по таймауту.

Какие задачи решает

  • узнать баланс SOL и SPL-токенов кошелька
  • собрать список крупнейших держателей токена с долями
  • отправить подписанную транзакцию и дождаться подтверждения
  • вытащить распарсенную транзакцию по подписи
  • перечислить аккаунты программы с фильтрами по размеру и содержимому

Примеры запросов агенту

  • покажи баланс SOL и все SPL-токены для этого кошелька
  • собери топ-20 держателей этого минта с процентами от общего supply
  • симулируй транзакцию перед отправкой и подтверди её через getSignatureStatuses

Как установить solana-rpc

1Через Skills CLI (Vercel)

npx skills add agiprolabs/claude-trading-skills --skill solana-rpc -a claude-code

2Вручную: положить файлы

~/.claude/skills/solana-rpc/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/solana-rpc/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о solana-rpc

Как установить solana-rpc в Claude?

Выполните npx skills add agiprolabs/claude-trading-skills --skill solana-rpc -a claude-code. После этого файл скилла лежит в ~/.claude/skills/solana-rpc/SKILL.md.

Что делает solana-rpc?

Описывает прямую работу с блокчейном Solana через JSON-RPC: запросы состояния аккаунтов, балансов токенов, сборку и отправку транзакций, перечисление аккаунтов программ.

Какой RPC-эндпоинт использовать?

Автор скилла советует Helius или QuickNode для разработки и предупреждает, что публичный mainnet-beta ограничен по частоте запросов и ненадёжен для торговли в проде.

Исходный текст

SKILL.md · MIT
---
name: solana-rpc
description: Direct Solana blockchain interaction via JSON-RPC — account lookups, token balances, transaction submission, and program queries
---

# Solana RPC — Direct Blockchain Interaction

The Solana JSON-RPC API provides direct read/write access to the blockchain. Use it for account state queries, token balance lookups, transaction building and submission, and program account enumeration. This is the low-level foundation when higher-level APIs (Birdeye, Helius, SolanaTracker) don't have the data you need.

## Quick Start

```python
import httpx

RPC = os.getenv("SOLANA_RPC_URL", "https://api.mainnet-beta.solana.com")

def rpc_call(method: str, params: list = None) -> dict:
    resp = httpx.post(RPC, json={
        "jsonrpc": "2.0", "id": 1,
        "method": method, "params": params or [],
    }, timeout=30.0)
    return resp.json()

# Get SOL balance
result = rpc_call("getBalance", ["WALLET_PUBKEY"])
sol_balance = result["result"]["value"] / 1e9

# Get latest blockhash
result = rpc_call("getLatestBlockhash")
blockhash = result["result"]["value"]["blockhash"]
```

## RPC Providers

| Provider | Free Tier | Paid | Notes |
|----------|-----------|------|-------|
| Helius | 50K credits/day | $49+/mo | Enhanced RPCs, DAS API |
| QuickNode | Limited | $49+/mo | Multi-chain, WebSocket |
| Triton | No free tier | ~$300+/mo | Yellowstone gRPC bundled |
| Shyft | Limited | $49+/mo | Yellowstone gRPC bundled |
| Alchemy | 300M CU/mo | Scaling | Good free tier |
| Public (mainnet-beta) | Free | — | Rate limited, unreliable |

**Recommendation**: Use Helius or QuickNode for development. Never use public RPC for production trading.

## Core Read Methods

### Account & Balance

```python
# SOL balance (in lamports, divide by 1e9 for SOL)
getBalance(pubkey, {commitment: "confirmed"})

# Full account info (data, owner, lamports, executable)
getAccountInfo(pubkey, {encoding: "jsonParsed"})

# Multiple accounts in one call
getMultipleAccounts([pubkey1, pubkey2], {encoding: "jsonParsed"})
```

### Token Accounts

```python
# All SPL token accounts owned by a wallet
getTokenAccountsByOwner(wallet_pubkey, {
    "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
}, {"encoding": "jsonParsed"})

# Token balance for a specific token account
getTokenAccountBalance(token_account_pubkey)

# Largest token accounts (top holders)
getTokenLargestAccounts(mint_pubkey)

# Total supply of a token
getTokenSupply(mint_pubkey)
```

### Transaction Data

```python
# Get parsed transaction by signature
getTransaction(signature, {
    "encoding": "jsonParsed",
    "maxSupportedTransactionVersion": 0,
})

# Recent transaction signatures for an address
getSignaturesForAddress(pubkey, {
    "limit": 20,
    "before": "optional_signature",  # pagination cursor
})

# Transaction status
getSignatureStatuses([sig1, sig2])
```

### Block & Slot

```python
# Current slot
getSlot({commitment: "confirmed"})

# Block data
getBlock(slot, {
    "encoding": "jsonParsed",
    "transactionDetails": "full",
    "maxSupportedTransactionVersion": 0,
})

# Latest blockhash (needed for tx building)
getLatestBlockhash({commitment: "confirmed"})

# Slot leader schedule
getLeaderSchedule()
```

### Program Accounts

```python
# All accounts owned by a program (with filters)
getProgramAccounts(program_pubkey, {
    "encoding": "jsonParsed",
    "filters": [
        {"dataSize": 165},  # Filter by account data size
        {"memcmp": {         # Filter by data content
            "offset": 32,
            "bytes": "base58_encoded_value",
        }},
    ],
})
```

**Warning**: `getProgramAccounts` without filters can return millions of results and timeout. Always use `dataSize` and/or `memcmp` filters.

### Priority Fees

```python
# Recent priority fee estimates
getRecentPrioritizationFees([account_pubkey])
# Returns array of { slot, prioritizationFee } for recent slots

# Minimum rent for account
getMinimumBalanceForRentExemption(data_length)
```

## Write Methods

### Send Transaction

```python
# Send a signed, serialized transaction
sendTransaction(base64_tx, {
    "encoding": "base64",
    "skipPreflight": False,
    "preflightCommitment": "confirmed",
    "maxRetries": 3,
})

# Simulate before sending
simulateTransaction(base64_tx, {
    "encoding": "base64",
    "sigVerify": False,
    "commitment": "confirmed",
})
```

### Transaction Confirmation

```python
import time

def confirm_transaction(rpc_url: str, signature: str, timeout: float = 30.0) -> bool:
    """Poll for transaction confirmation."""
    start = time.time()
    while time.time() - start < timeout:
        result = rpc_call("getSignatureStatuses", [[signature]])
        statuses = result.get("result", {}).get("value", [None])
        if statuses[0] is not None:
            status = statuses[0]
            if status.get("err"):
                return False
            if status.get("confirmationStatus") in ("confirmed", "finalized"):
                return True
        time.sleep(0.5)
    return False
```

## Commitment Levels

| Level | Description | Use When |
|-------|-------------|----------|
| `processed` | Single node confirmation | Speed over safety |
| `confirmed` | Supermajority (2/3+) | **Default for trading** |
| `finalized` | Maximum supermajority + 31 slots | Critical operations |

Always specify commitment explicitly. Default varies by provider.

## Common Patterns

### Get All Token Holdings for a Wallet

```python
def get_wallet_tokens(wallet: str) -> list[dict]:
    """Get all SPL token holdings with metadata."""
    result = rpc_call("getTokenAccountsByOwner", [
        wallet,
        {"programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},
        {"encoding": "jsonParsed"},
    ])
    tokens = []
    for acct in result["result"]["value"]:
        info = acct["account"]["data"]["parsed"]["info"]
        tokens.append({
            "mint": info["mint"],
            "amount": int(info["tokenAmount"]["amount"]),
            "decimals": info["tokenAmount"]["decimals"],
            "ui_amount": info["tokenAmount"]["uiAmount"],
        })
    return [t for t in tokens if t["amount"] > 0]
```

### Get Top Holders of a Token

```python
def get_top_holders(mint: str) -> list[dict]:
    """Get the 20 largest holders of a token."""
    result = rpc_call("getTokenLargestAccounts", [mint])
    supply_result = rpc_call("getTokenSupply", [mint])
    total_supply = int(supply_result["result"]["value"]["amount"])

    holders = []
    for acct in result["result"]["value"]:
        amount = int(acct["amount"])
        holders.append({
            "address": acct["address"],
            "amount": amount,
            "decimals": acct["decimals"],
            "ui_amount": acct["uiAmount"],
            "percentage": amount / total_supply * 100 if total_supply > 0 else 0,
        })
    return holders
```

### Batch RPC Calls

```python
def rpc_batch(calls: list[tuple[str, list]]) -> list[dict]:
    """Execute multiple RPC calls in a single HTTP request."""
    payload = [
        {"jsonrpc": "2.0", "id": i, "method": method, "params": params}
        for i, (method, params) in enumerate(calls)
    ]
    resp = httpx.post(RPC, json=payload, timeout=30.0)
    results = resp.json()
    results.sort(key=lambda r: r["id"])
    return [r.get("result") for r in results]
```

## Key Program IDs

| Program | ID |
|---------|-----|
| System | `11111111111111111111111111111111` |
| SPL Token | `TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA` |
| Token-2022 | `TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb` |
| Associated Token | `ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL` |
| Raydium AMM | `675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8` |
| Raydium CLMM | `CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK` |
| Orca Whirlpool | `whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc` |
| Meteora DLMM | `LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo` |
| PumpFun | `6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P` |
| Jupiter v6 | `JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4` |
| Compute Budget | `ComputeBudget111111111111111111111111111111` |

## When to Use Direct RPC vs Higher-Level APIs

| Need | Use |
|------|-----|
| Token balance check | **Direct RPC** (`getTokenAccountsByOwner`) |
| Top 20 holders | **Direct RPC** (`getTokenLargestAccounts`) |
| Historical OHLCV | Birdeye or SolanaTracker |
| Parsed transaction history | Helius Enhanced Transactions |
| Token metadata (name, image) | Helius DAS API |
| Real-time streaming | Yellowstone gRPC |
| Wallet PnL tracking | SolanaTracker |
| Token risk scoring | SolanaTracker |
| Cross-chain data | DexScreener or CoinGecko |

## Files

### References
- `references/methods.md` — Complete RPC method reference with parameters and response schemas
- `references/error_handling.md` — Error codes, rate limits, timeout handling, retry strategies
- `references/providers.md` — RPC provider comparison with pricing and features

### Scripts
- `scripts/wallet_scanner.py` — Scan wallet for all token holdings with balances
- `scripts/token_holders.py` — Get top holders and concentration metrics for any token

© agiprolabs · MIT · agiprolabs/claude-trading-skills

Похожие скиллы

Всё по теме «Бэкенд и API» →
solana-dev Solana Foundation Скилл для написания Solana dApp, смарт-контрактов на Anchor, управления кошельками и транзакциями. Охватывает всё: от настройки окружения до тестирования и деплоя на devnet. CX Codex +1 98 900установок Solana MCP by Vybe vybenetwork Даёт агенту доступ к Solana API: кошельки, сделки, рынки, PnL, переводы. Пригодится, когда нужно тянуть ончейн-данные прямо из чата. CX Codex +1 ★ 2 175звёзд репо hono-rpc bobmatnyc Скилл объясняет, как связать сервер и клиент Hono через типы TypeScript: экспорт AppType и клиент hc без кодогенерации. CX Codex +1 437установок basebalance.cloud — x402 RPC & MCP gateway Conway-Research Платный JSON-RPC к сети Base через MCP: бесплатно 10 запросов в минуту, дальше $0.50 за 10 тысяч. С фейловером, кешем и леджером. CX Codex +1 ★ 7 506звёзд репо supabase-audit-rpc yoanbernabeu Перечисляет открытые PostgreSQL-функции в RPC-эндпоинте Supabase и проверяет их на обход RLS и SQL-инъекции. CX Codex +1 524установок alchemy-api alchemyplatform Помогает внедрить Alchemy API в бэкенд, dApp или скрипт с авторизацией по ключу. Пригодится при настройке EVM RPC, Solana DAS или Webhooks в коде проекта. CX Codex +1 1 600установок

Из того же набора52

cointegration-analysis Проверяет пары активов на коинтеграцию методами Engle-Granger, Johansen и Филлипса-Ульяриса, чтобы найти пары для статистического арбитража. CX Codex +1 455установок trade-accounting Ведёт бухгалтерию торговых операций: журнал проводок, отчёт о прибылях, баланс и денежный поток. CX Codex +1 454установок custom-indicators Скилл для расчёта девяти крипто-специфичных индикаторов: NVT, MVRV, потоки на биржи, ставка финансирования, моментум открытого интереса. CX Codex +1 454установок pumpfun-mechanics Скилл для разбора механики PumpFun на Solana: формулы bonding curve, условия градации, парсинг событий и инструкций, миграция в PumpSwap. CX Codex +1 453установок birdeye-api Скилл помогает получать рыночные данные токенов Solana через API Birdeye: цены, свечи OHLCV, историю сделок и проверки безопасности контрактов. CX Codex +1 444установок wallet-profiling Считает винрейт, профит-фактор и стиль торговли по Solana-кошельку. Пригодится перед тем, как копировать чьи-то сделки. CX Codex +1 446установок token-economics Скилл анализирует эмиссию токенов и графики разлоков. Он даёт формулы оценки активов и метрики давления продавцов. CX Codex +1 440установок liquidity-analysis Оценивает глубину ликвидности DEX, рассчитывает проскальзывание и структуру пулов для токенов Solana перед сделкой. CX Codex +1 439установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой