如何修复NodeReal.io中RPC错误:fromBlock必须小于toBlock
解决nr_getAssetTransfers接口toBlock设为"latest"的报错问题
问题场景
调用NodeReal BSC主网的nr_getAssetTransfers接口获取交易列表时,当toBlock设为具体十六进制块号(如hex(20000))时请求正常,但将toBlock改为"latest"后,触发报错:
RPC: invalid fromBlock and toBlock param: from must be less than to
报错原因
接口对块号参数的格式校验逻辑要求:当toBlock使用"latest"这类语义化块标识符时,fromBlock的十六进制数值字符串格式无法被正确解析并与latest做大小比较,导致校验失败。
解决方案
提供两种可行的解决方式:
方式一:动态获取最新块号并转为十六进制格式
先调用eth_blockNumber接口获取当前链上最新块号的十六进制值,再将其赋值给toBlock,保持与fromBlock的格式一致:
import requests import json BASE_URL = "https://bsc-mainnet.nodereal.io/v1/" + NOD_KEY headers = {"Content-Type": "application/json"} # 1. 获取最新块号的十六进制值 latest_block_req = { "jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1 } latest_block_res = requests.post(BASE_URL, headers=headers, data=json.dumps(latest_block_req)) latest_block_hex = latest_block_res.json()["result"] # 2. 构造交易列表请求 MAX_COUNT = 10 from_block = 10 payload = { "jsonrpc": "2.0", "method": "nr_getAssetTransfers", "params": [{ "category": ["external", "20"], "toAddress": u_w, "withMetadata": False, "maxCount": hex(MAX_COUNT), "fromBlock": hex(from_block), "toBlock": latest_block_hex, "sort": "desc", }], "id": 1 } response = requests.post(BASE_URL, headers=headers, data=json.dumps(payload))
方式二:统一fromBlock为十进制字符串格式
将fromBlock从十六进制数值字符串(hex(from_block))改为十进制字符串格式,让接口能正确解析并与"latest"比较大小:
payload = { "jsonrpc": "2.0", "method": "nr_getAssetTransfers", "params": [{ "category": ["external", "20"], "toAddress": u_w, "withMetadata": False, "maxCount": hex(MAX_COUNT), "fromBlock": "10", # 使用十进制字符串替代十六进制 "toBlock": "latest", "sort": "desc", }], "id": 1 }
内容的提问来源于stack exchange,提问作者ali
相关产品推荐
相关产品推荐

