Solana 生态里,Solscan 是最常用的区块浏览器(类似以太坊的 Etherscan)。除了网页查询,它也有 API——加上 Solana 原生 RPC,就够做钱包监控 / 交易分析 / DeFi 数据抓取了。
Solscan 网页能查什么
- 交易:交易 hash → 转账明细、手续费、状态
- 钱包地址:余额、SPL Token、NFT、历史交易
- 区块:高度、出块时间、确认数
- 代币:合约详情、持币地址、24h 交易量
- NFT:铸造、转移
- DeFi:部分 DEX / 质押 / 借贷协议数据
日常查东西直接搜地址或 hash 就行。要批量、定时、集成到自己系统里就得走 API。
Solscan Pro API
老公共 API public-api.solscan.io 现在已经不推荐了,改用 Pro API pro-api.solscan.io(免费额度也有)。
账户交易列表:
GET https://pro-api.solscan.io/v2.0/account/transactions?address=<WALLET>&limit=10
Header: token: <API_KEY>
账户详情(余额、类型):
GET https://pro-api.solscan.io/v2.0/account/detail?address=<WALLET>
代币持仓:
GET https://pro-api.solscan.io/v2.0/account/token-accounts?address=<WALLET>
去 pro-api.solscan.io 申请免费 API Key。速率限制看套餐,免费大概 60 次/分钟。
Solana 原生 RPC(更灵活)
不想被限流、想拿完整交易数据,走 JSON-RPC。任何 Solana 节点都支持。
列钱包最近交易签名:
POST https://api.mainnet-beta.solana.com
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 1,
"method": "getSignaturesForAddress",
"params": [
"<WALLET>",
{ "limit": 20, "commitment": "finalized" }
]
}
查单笔交易详情:
{
"jsonrpc": "2.0",
"id": 1,
"method": "getTransaction",
"params": [
"<SIGNATURE>",
{ "encoding": "jsonParsed", "maxSupportedTransactionVersion": 0 }
]
}
jsonParsed 编码会把系统程序、Token 程序的指令解析成人可读的 JSON,比 base58 好读多了。
Python 版本:定时监控新交易
import time
import requests
RPC = "https://api.mainnet-beta.solana.com"
WALLET = "<你的钱包地址>"
seen = set()
def rpc(method, params):
r = requests.post(RPC, json={
"jsonrpc": "2.0", "id": 1,
"method": method, "params": params,
}, timeout=10)
return r.json().get("result")
def poll():
sigs = rpc("getSignaturesForAddress", [WALLET, {"limit": 20}]) or []
for s in reversed(sigs):
sig = s["signature"]
if sig in seen:
continue
seen.add(sig)
tx = rpc("getTransaction", [
sig,
{"encoding": "jsonParsed", "maxSupportedTransactionVersion": 0},
])
if not tx:
continue
block_time = tx.get("blockTime")
err = tx["meta"]["err"]
print(f"新交易 {sig[:16]}... block_time={block_time} err={err}")
# 这里根据业务解析 innerInstructions 判断是转账 / swap / mint
while True:
try:
poll()
except Exception as e:
print("poll error:", e)
time.sleep(15)
要点:
seen记忆已处理签名,避免重复reversed()让最老的先出,保持时间顺序- 生产上把
seen落地到 Redis / SQLite,重启不丢
免费 RPC 的坑
api.mainnet-beta.solana.com 是 Solana Labs 的公共节点,速率限制很紧,高频请求会 429。生产环境走托管 RPC:
- Helius — 免费 10 万请求/月
- QuickNode
- Alchemy Solana
- Chainstack
免费额度足够个人项目。
拿 SPL Token 余额
{
"jsonrpc": "2.0",
"id": 1,
"method": "getTokenAccountsByOwner",
"params": [
"<WALLET>",
{ "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" },
{ "encoding": "jsonParsed" }
]
}
programId 是 SPL Token 程序的地址,返回该钱包持有的所有 SPL Token 账户,包含 mint 地址、余额、decimals。
一句话总结
Solscan API 好用但有限流,Solana 原生 RPC 更自由。核心组合 getSignaturesForAddress + getTransaction,生产环境别用免费公共节点,走 Helius / QuickNode。
