XRPL中通过NFTokenPage ID查找NFT失败,求相关代码示例
XRPL NFTokenPage 查询问题排查与代码示例
核心排查点
- 参数校验:计算NFTokenPage ID时,必须确保账户地址(Base58格式)、可选的发行者地址、NFT分类(Taxon)、反向分页标记这些参数完全匹配目标NFT的属性,任何参数偏差都会导致ID无效。
- 账本状态:查询时必须指定
ledger_index: "validated"(已验证账本),而非current(未闭合账本),未闭合账本的数据可能不完整或未最终确认。 - 分页逻辑:单个NFTokenPage最多存储32个NFT,若目标NFT不在你计算的页面中,需要通过页面返回的
PreviousPageMin或NextPageMax字段遍历其他分页。
实际可用代码示例(Python + xrpl-py)
使用官方维护的xrpl-py库可以避免手动计算ID的误差,以下是完整的查询示例:
import xrpl from xrpl.models.requests import LedgerEntry from xrpl.utils import calculate_nftoken_page_id # 连接测试网 client = xrpl.clients.JsonRpcClient("wss://s.altnet.rippletest.net:51233") # 替换为你的测试网账户地址 target_account = "r..." # 可选:指定发行者或Taxon缩小查询范围 target_issuer = None # 示例:"rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe" target_taxon = None # 示例:12345 # 计算NFTokenPage ID page_id = calculate_nftoken_page_id( account=target_account, issuer=target_issuer, taxon=target_taxon, is_reverse=False ) # 构造查询请求 query_request = LedgerEntry( ledger_index="validated", object_id=page_id ) # 执行查询并处理结果 try: response = client.request(query_request) if response.is_successful(): nft_page = response.result["node"] print("当前NFTokenPage包含的NFT:") for nft in nft_page["NFTokens"]: print(f"NFT ID: {nft['NFTokenID']}") print(f"发行者: {nft['Issuer']}") print(f"分类(Taxon): {nft['NFTokenTaxon']}\n") else: print(f"查询失败:{response.result['error_message']}") except Exception as e: print(f"请求异常:{str(e)}")
WebSocket工具手动查询注意事项
如果使用官方WebSocket工具,需严格按照以下格式构造请求:
{ "id": 1, "command": "ledger_entry", "ledger_index": "validated", "object_id": "你的NFTokenPage ID" }
若返回entryNotFound,优先检查ID计算参数,或先用account_nfts命令获取账户完整NFT列表,反向验证目标NFT所属的NFTokenPage ID。
内容的提问来源于stack exchange,提问作者crtag
相关产品推荐
相关产品推荐

