Install
$ agentstack add skill-vo1ganin-crypto-claude-skills-solana-rpc ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Solana RPC Skill
Reference files:
references/core-methods.md— standard Solana JSON-RPC methods, parameters, response shapesreferences/helius-extensions.md— DAS API, Enhanced Transactions, Priority Fee, Sender, LaserStreamreferences/quicknode-extensions.md—qn_estimatePriorityFees, Metaplex DAS addon, Jitoreferences/patterns.md— batching, rate limits, resume, cost optimizationreferences/examples/— working Python scripts
🚨 Rule #1: use the provider's parsed/enhanced APIs when available
The biggest credit waste on Solana RPC is fetching raw data and parsing it yourself when the provider offers a parsed endpoint. Matrix:
| Task | Cheap option | Expensive / broken option | |------|--------------|---------------------------| | Wallet NFTs + tokens | Helius DAS getAssetsByOwner | getTokenAccountsByOwner + metadata lookups | | Complete tx history | Helius getTransactionsForAddress | getSignaturesForAddress + N × getTransaction | | Parsed DEX swap details | Helius Enhanced Tx or Solscan | getTransaction + manual program parsing | | NFTs by collection | DAS getAssetsByGroup / searchAssets | getProgramAccounts (expensive + slow) | | Priority fee estimate | getPriorityFeeEstimate (Helius) or qn_estimatePriorityFees (QuickNode) | getRecentPrioritizationFees (raw, needs math) | | Compressed NFT history | DAS getSignaturesForAsset | getSignaturesForAddress (doesn't work for cNFTs) |
When in doubt: check references/helius-extensions.md first — if Helius has a purpose-built endpoint, use it.
🚨 Rule #2: batch JSON-RPC requests
Single HTTP request can carry an array of JSON-RPC calls:
[
{"jsonrpc":"2.0","id":1,"method":"getTransaction","params":["sig1",{"encoding":"jsonParsed","maxSupportedTransactionVersion":0}]},
{"jsonrpc":"2.0","id":2,"method":"getTransaction","params":["sig2",{"encoding":"jsonParsed","maxSupportedTransactionVersion":0}]},
...up to ~100 items
]
Response is an array. Most providers count each call individually but save massive HTTP overhead. Always batch when fetching N items of same shape.
See references/patterns.md for semaphore tuning and provider-specific batch limits.
🚨 Rule #3: never getProgramAccounts without tight filters
getProgramAccounts scans ALL accounts under a program. On popular programs (SPL Token, Token 2022, NFT programs) it's catastrophically slow and expensive, often times out.
Always apply:
dataSizefilter (exact byte length)memcmpfilter (matches at specific offset) — typically for mint address, owner, or discriminator
If you're querying NFTs or tokens by collection/owner: use DAS instead (getAssetsByGroup, getAssetsByOwner).
Setup: provider URL
All Solana RPC calls need a URL. Configure via env var:
# Helius
export SOLANA_RPC_URL="https://mainnet.helius-rpc.com/?api-key=YOUR_KEY"
# QuickNode
export SOLANA_RPC_URL="https://YOUR-ENDPOINT.solana-mainnet.quiknode.pro/YOUR-TOKEN/"
# Ankr
export SOLANA_RPC_URL="https://rpc.ankr.com/solana/YOUR_KEY"
# Public (DON'T use for production)
export SOLANA_RPC_URL="https://api.mainnet-beta.solana.com"
Scripts read from SOLANA_RPC_URL. Never hardcode. If user has separate endpoints for archive vs. frontend (common on QuickNode), support SOLANA_RPC_URL_ARCHIVE additionally.
Multi-provider fallback (optional)
If user has both Helius and QuickNode, you can configure fallback:
SOLANA_RPC_URL_PRIMARY— first choiceSOLANA_RPC_URL_FALLBACK— used when PRIMARY hits 429 or errors 5×× persistently
Script pattern in references/examples/.
Step-by-step workflow
1. Classify the task
- Read account data →
getAccountInfo,getMultipleAccounts - Read tx →
getTransaction(raw) or Helius Enhanced (parsed) - Read history →
getSignaturesForAddress+ batchgetTransaction, OR HeliusgetTransactionsForAddress - Read token balances/NFTs → DAS
getAssetsByOwner(preferred) orgetTokenAccountsByOwner - Submit tx →
sendTransactionor Helius Sender (better landing rate) - Estimate fee →
getPriorityFeeEstimate(Helius) orqn_estimatePriorityFees(QuickNode) - Stream real-time → WebSocket / LaserStream (not polling)
2. Check for batch opportunities If > 3 items of same method → batch them in one HTTP request. Don't loop.
3. Pick commitment level
- Default
confirmedfor reads finalizedfor financial audit / history- Never
processedfor production (may revert)
4. Execute (MCP or script)
- Single call: curl or httpx inline
- Batch: Python script with aiohttp + JSON-RPC array, output JSONL
5. Present results
- Lamports → divide by 1e9 for SOL
- Token amounts → divide by 10^decimals
- Timestamps:
block_timeis unix seconds (no sub-second precision ongetBlockTime)
Common mistakes & error codes
| Error | Cause | Fix | |-------|-------|-----| | -32009 "Slot ... skipped" | Asked for a slot that wasn't produced | Use getBlock with commitment: "confirmed" and skip error silently | | -32602 Invalid params | Wrong encoding / missing maxSupportedTransactionVersion: 0 | Add "maxSupportedTransactionVersion": 0 to all tx reads | | 429 Too Many Requests | Rate limit | Respect provider's Retry-After, lower semaphore | | Response timeout on getBlock | Large response (~MBs) | Set HTTP timeout ≥ 30s; consider transactionDetails: "signatures" or accounts if full tx not needed | | Empty result on getSignaturesForAddress | No sigs in the range OR wrong before/until cursors | Verify cursor with getSignatureStatuses | | DAS methods missing | Not Helius/QuickNode with DAS addon | Fall back to raw RPC or enable addon |
Memory updates
Old memory says:
- "QuickNode
getTransaction: ~10k/min, ~15KB response, 3x faster than Solscan for single-tx" — ✅ still valid - "
getBlock: ~30s timeout needed, large response" — ✅ still valid - "
getBlockTime: seconds precision only" — ✅ still valid
Add:
maxSupportedTransactionVersion: 0is required for modern tx reads — otherwise you get "Transaction version (0) is not supported" errors on v0 tx- Helius DAS now supports fungible tokens too (
showFungible: trueongetAssetsByOwner) - Priority fee: prefer
getPriorityFeeEstimate(Helius) over rawgetRecentPrioritizationFees
Reference files
references/core-methods.md— standard Solana JSON-RPC: accounts, blocks, transactions, feesreferences/helius-extensions.md— DAS, Enhanced Tx, Priority Fee, Sender, Webhooks, LaserStreamreferences/quicknode-extensions.md— qn_estimatePriorityFees, DAS addon, Jitoreferences/patterns.md— batching details, rate limits, fallback, costreferences/examples/fetch_tx_batch.py— batchedgetTransactionfor N signaturesreferences/examples/wallet_full_history.py— HeliusgetTransactionsForAddresswith paginationreferences/examples/wallet_holdings_das.py— DASgetAssetsByOwnerwith full token metadata
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: Vo1ganin
- Source: Vo1ganin/crypto-claude-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.