You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取NEAR协议中特定账户持有的全部NEP-171标准NFT?

获取NEAR账户所有NFT的解决方案

目前NEAR原生RPC没有提供直接查询某一账户跨合约所有NFT的接口,你可以通过以下两种思路实现需求:

1. 先获取账户持有NFT的所有合约列表

要拿到目标账户关联的NFT合约,最可靠的方式是通过NEAR索引器(比如基于NEAR Lake构建的自定义索引服务),查询所有与该账户相关的NFT转移事件:

  • 筛选事件类型为nft_transfer、接收方为目标账户的记录
  • 提取记录中的contract_id字段并去重,得到该账户持有NFT的所有合约地址

如果不想自行搭建索引器,也可以借助第三方索引服务的聚合查询能力,直接获取账户对应的NFT合约列表。

注意:通过view_access_key_list查询账户授权的方式不可靠——持有NFT不需要对合约授权,会遗漏大量合约。

2. 批量查询每个合约下的NFT

拿到合约列表后,循环调用你现有的nft_tokens_for_owner方法,收集所有NFT数据。如果合约下NFT数量较多,需要处理分页参数(多数NFT合约支持from_index和limit参数实现分页查询)。

示例代码(基于你提供的逻辑扩展):

async function fetchAllNFTsForAccount(targetAccount) {
  // 假设已通过索引器获取到合约列表
  const nftContracts = ["contract1.near", "contract2.near", "..."];
  const allNFTs = [];

  for (const contract of nftContracts) {
    const params = {
      request_type: 'call_function',
      method_name: 'nft_tokens_for_owner',
      account_id: contract,
      args_base64: encodeArgs({
        account_id: targetAccount,
        // 可选:添加分页参数处理大量NFT
        from_index: "0",
        limit: 100
      }),
      finality: 'final'
    };

    // 调用NEAR RPC接口
    const rpcResponse = await fetch('https://rpc.mainnet.near.org', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(params)
    });

    const result = await rpcResponse.json();
    // 解码base64结果并解析NFT数据
    const contractNFTs = JSON.parse(atob(result.result));
    allNFTs.push(...contractNFTs);
  }

  return allNFTs;
}

关键注意事项

  • 部分NFT合约可能未实现标准的nft_tokens_for_owner方法,需提前判断合约是否兼容NEAR NFT标准
  • 处理分页时,需循环调用直到返回的NFT数量小于limit,确保获取完整数据

内容的提问来源于stack exchange,提问作者ms8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 02:43:22