如何单次请求获取Solana指定地址全部质押通胀奖励历史
Solana 全历史质押通胀奖励最优获取方案
核心结论
Solana 原生 JSON-RPC 没有提供单次请求直接返回某地址所有历史质押奖励的接口,但有两种远优于逐 epoch 单独发起请求的实现方案:
方案1:JSON-RPC 批量请求合并查询
你可以利用 JSON-RPC 的批量请求特性,把多个 epoch 的查询请求打包到同一个 HTTP 请求中发送,仅需1次HTTP交互即可拿到所有指定 epoch 的奖励数据,网络耗时可以降低到逐次请求的1/10甚至更低。
示例代码如下:
import requests import json url = "https://api.mainnet-beta.solana.com" my_staking_address = "替换为你的质押地址" # 自定义要查询的epoch范围,示例为查询epoch 200到250的奖励 target_epochs = range(200, 251) # 构造批量请求payload payload = [] for idx, epoch in enumerate(target_epochs): payload.append({ "jsonrpc": "2.0", "id": idx, "method": "getInflationReward", "params": [ [my_staking_address], {"epoch": epoch} ] }) # 单次请求发送所有查询 response = requests.post(url, json=payload).json() # 解析返回结果即可得到所有epoch的奖励数据 print(response)
方案优缺点
- 优点:数据直接来自链上通胀统计接口,准确性高,无需额外数据过滤
- 缺点:需要预先确认你要查询的epoch范围
方案2:拉取地址交易历史过滤奖励记录
质押地址的每笔通胀奖励到账都会对应一条链上交易记录,你可以通过getSignaturesForAddress接口拉取该地址的所有历史交易,过滤出奖励类型的交易即可得到全量奖励历史,无需预先指定epoch范围。
示例代码逻辑:
import requests import json url = "https://api.mainnet-beta.solana.com" my_staking_address = "替换为你的质押地址" payload = { "jsonrpc": "2.0", "id": 1, "method": "getSignaturesForAddress", "params": [ my_staking_address, {"limit": 1000} # 数据量不够可以用before参数分页拉取全量 ] } response = requests.post(url, json=payload).json() # 过滤交易类型为通胀奖励的记录即可得到全历史奖励 reward_records = [tx for tx in response["result"] if tx["memo"] and "inflation reward" in tx["memo"].lower()] print(reward_records)
方案优缺点
- 优点:无需预先知道epoch范围,配合分页可以一次性拉取全历史所有奖励
- 缺点:需要做交易类型过滤,部分特殊节点返回的交易可能缺少memo标识,需要额外做字段校验
内容的提问来源于stack exchange,提问作者EllipticalInitial
相关产品推荐
相关产品推荐

