Logo
新用户订阅 RPC,首月享 6.5 折优惠查看优惠
RPC Assistant

哪些 Solana RPC 提供商包含用于 NFT 数据的增强 API?

摘要

标准 Solana JSON-RPC 节点暴露 getAccountInfo 和 getProgramAccounts 等核心方法,但它们不返回解码后的 NFT 元数据、集合分组或压缩 NFT(cNFT)状态。包含增强 API 的提供商在原始节点之上添加了索引化、NFT 感知的端点,因此您无需编写自己的 DAS 索引器即可查询资产、集合和代币元数据。OnFinality 提供 Solana RPC 和专用节点基础设施,支持 HTTP 和 WebSocket 传输,您可以将其与索引层配对以进行 NFT 特定读取。

快速推荐

如果您的应用需要解码后的 NFT 元数据、集合成员资格或压缩 NFT(cNFT)状态,普通的 Solana JSON-RPC 节点无法提供。您需要一个在节点之上叠加索引化、NFT 感知 API 的提供商。实际上,这意味着以下两种设置之一:

  • 具有内置增强 NFT API 的提供商(通常是数字资产标准,即 DAS 端点),可在一次调用中返回资产、集合和元数据。
  • 原始 Solana RPC 提供商加上您自己的索引器,您运行节点和一个单独的索引服务,该服务读取链上状态并提供 NFT 查询。

OnFinality 通过 HTTP 和 WebSocket 提供 Solana RPC 和专用节点基础设施,这是两种设置都依赖的节点层。如果您希望在不运行索引器的情况下进行 NFT 感知读取,请在承诺之前确认提供商的增强 API 表面。如果您希望完全控制 NFT 数据的塑造方式,请通过 OnFinality 等提供商运行节点并添加自己的索引层。

为什么标准 Solana RPC 无法满足 NFT 数据需求

Solana 的基础 JSON-RPC 是面向账户的,而不是面向资产的。节点可以告诉您账户中存储的原始字节,但它不知道某个特定账户是 NFT、属于哪个集合,或者其链下元数据是什么。这种解码工作是索引器的职责。

这很重要,因为大多数 NFT 读取不是单账户查找。它们是诸如“此钱包拥有的所有 NFT”、“此集合中的每个项目”或“此压缩 NFT 树的当前状态”之类的查询。从原始 RPC 回答这些问题意味着扫描许多账户并自行解析元数据,这在大规模下既慢又昂贵。

增强 NFT API 的存在就是为了弥补这一差距。它们维护资产索引并暴露返回结构化结果的方法,因此您的客户端不必从原始账户重建 NFT 状态。

“用于 NFT 数据的增强 API”实际意味着什么

这个短语涵盖了几种不同的东西,提供商们使用得很宽松。当您评估提供商时,请区分这些层:

返回内容典型方法形式
原始节点 RPC账户字节、余额、槽位getAccountInfogetProgramAccounts
代币/元数据 RPCSPL 代币和 Metaplex 元数据账户getTokenAccountsByOwner、元数据账户读取
增强资产 API(DAS 风格)解码后的资产、集合、所有权、cNFTgetAssetsByOwnergetAssetgetAssetsByGroup
自定义索引器您定义的任何模式您自己的 HTTP/GraphQL 端点

DAS 风格的层是大多数开发者所说的“增强 NFT API”。它是一个索引服务,而不是节点方法,因此它可以位于同一提供商或单独的提供商。

NFT 工作负载的提供商评估矩阵

使用此表在实际影响 NFT 读取的维度上比较提供商。根据您的应用提供多少 NFT 数据,为每一行赋予自己的权重。

评估领域需要确认的内容为什么对 NFT 数据重要
增强/DAS API是否提供索引化资产 API,以及哪些方法决定您是否可以在没有自己的索引器的情况下查询资产
cNFT 支持压缩 NFT 是否被索引标准 RPC 无法高效枚举 cNFT
原始节点访问HTTP 和 WebSocket 可用性写入、订阅和回退读取所需
传输HTTP、WebSocket 以及任何 gRPC 风格选项订阅和实时铸造需要 WebSocket
专用容量是否可以获得专用节点将繁重的 getProgramAccounts 扫描与共享流量隔离
数据新鲜度索引更新频率过时的索引在转移后返回错误的所有权
故障转移当一个端点降级时如何切换NFT 市场无法承受静默读取失败

OnFinality 位于原始节点和专用容量行:它通过 HTTP 和 WebSocket 提供 Solana RPC,并为需要隔离容量的工作负载提供专用节点。对于增强资产层,请确认您计划使用的索引服务以及它如何连接到您的节点。

连接到 Solana RPC

无论您选择哪种增强层,它最终都从 Solana 节点读取。OnFinality 为 Solana 主网暴露了一个公共 HTTP 端点和一个匹配的 WebSocket 端点:

# HTTP JSON-RPC
curl https://solana.api.onfinality.io/public \
  -X POST -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}'
// WebSocket subscription for account changes (e.g. a mint or metadata account)
import WebSocket from "ws";

const ws = new WebSocket("wss://solana.api.onfinality.io/public-ws");

ws.on("open", () => {
  ws.send(JSON.stringify({
    jsonrpc: "2.0",
    id: 1,
    method: "accountSubscribe",
    params: [
      "<METADATA_ACCOUNT_PUBKEY>",
      { encoding: "jsonParsed", commitment: "confirmed" }
    ]
  }));
});

ws.on("message", (data) => {
  console.log("account update:", data.toString());
});

对于生产环境,请将您的应用指向专用或托管端点,而不是公共端点。有关当前端点详细信息,请参阅 Solana RPC;有关容量选项,请参阅 RPC 定价

在没有增强 API 的情况下读取 NFT 数据

如果您决定运行自己的索引器,节点仍然承担繁重的工作。一种常见模式是获取钱包的代币账户,然后解析每个铸币的元数据账户:

// 1. Get token accounts owned by a wallet
const owner = "<WALLET_PUBKEY>";
const res = await fetch("https://solana.api.onfinality.io/public", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    jsonrpc: "2.0",
    id: 1,
    method: "getTokenAccountsByOwner",
    params: [owner, { programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" }, { encoding: "jsonParsed" }]
  })
});
const { result } = await res.json();
console.log(result.value.length, "token accounts");

从那里,您为每个铸币派生 Metaplex 元数据 PDA 并读取它,或者将铸币列表交给您的索引器。这比调用 getAssetsByOwner 更费力,但它使您独立于任何单一提供商的增强 API。

何时使用增强 API 与自己的索引器

没有普遍正确的答案。权衡是控制与运营负载。

  • 选择提供商的增强 NFT API 当您希望快速上市、您的查询适合提供商的方法集,并且您愿意依赖他们的索引新鲜度和模式时。
  • 在托管节点上运行自己的索引器 当您需要自定义 NFT 字段、跨程序连接或您的产品拥有的模式,并且您可以吸收索引和回填工作时。
  • 两者都用 当您希望增强 API 用于常见读取,自己的索引用于产品特定查询,并以节点作为共享的真相来源时。

混合设置在市场中很常见:增强 API 用于发现和搜索,自己的索引用于排名、定价和分析。

生产就绪检查清单

在将 NFT 流量路由到任何提供商之前,请确认以下事项:

  1. 端点隔离。 繁重的 getProgramAccounts 或元数据扫描不应与延迟敏感的读取共享容量。考虑使用专用节点。
  2. 传输覆盖。 您同时拥有 HTTP 和 WebSocket 端点,并且您的客户端处理重连。
  3. 索引新鲜度预期。 您知道在转移或铸造后,所有权变更在增强 API 中出现的速度。
  4. 故障转移路径。 您可以在不重新部署的情况下切换到第二个端点或提供商。
  5. 承诺级别。 您了解 processedconfirmedfinalized 如何影响您看到的 NFT 状态。
  6. 速率和突发行为。 您知道您的提供商在铸造或空投期间如何处理流量高峰。
  7. 可观测性。 您记录请求延迟、错误率和索引延迟,以便及早发现降级。

Solana 上 NFT 数据的常见故障模式

  • 过时的所有权。 增强索引尚未跟上最近的转移,因此应用显示错误的所有者。通过为所有权关键操作读取最终状态来缓解。
  • cNFT 枚举缺口。 压缩 NFT 并非总是被每个提供商索引。如果您的应用使用它们,请明确确认 cNFT 支持。
  • 元数据获取失败。 链下元数据 URI 可能缓慢或不可用;积极缓存并处理超时。
  • getProgramAccounts 过载。 对共享端点的广泛扫描可能缓慢或被限流。严格限定过滤器范围或迁移到专用节点。
  • 模式漂移。 增强 API 响应形状可能在版本之间变化。将您的客户端固定到已知版本并测试升级。

关键要点

  • 标准 Solana RPC 不返回解码后的 NFT 数据;增强 API 是叠加在节点之上的索引服务。
  • “增强 API”通常意味着 DAS 风格的资产 API,具有 getAssetsByOwnergetAssetsByGroup 等方法。
  • 您可以从提供商的增强 API 获取 NFT 数据,也可以针对原始节点运行自己的索引器。
  • OnFinality 通过 HTTP 和 WebSocket 提供 Solana RPC 以及专用节点,这是两种方法都需要的节点层。
  • 在增强 API 覆盖、cNFT 支持、传输、专用容量、索引新鲜度和故障转移方面评估提供商。
  • 在承诺之前确认索引新鲜度和 cNFT 支持,并保持故障转移端点就绪。

常见问题解答

OnFinality 是否包含增强 NFT API? OnFinality 通过 HTTP 和 WebSocket 提供 Solana RPC 和专用节点基础设施。对于 NFT 特定的增强读取,请确认您计划使用的索引层以及它如何连接到您的节点。有关端点详细信息,请参阅 Solana RPC

我可以从标准 Solana RPC 节点获取 NFT 元数据吗? 您可以读取原始代币和元数据账户,但必须自行解码和索引它们。标准节点不返回结构化的资产或集合数据。

什么是 DAS API? 数字资产标准(DAS)是用于查询索引化 Solana 资产(包括 NFT 和压缩 NFT)的常见接口,具有 getAssetgetAssetsByOwner 等方法。

NFT 工作负载需要专用节点吗? 不总是,但繁重的元数据扫描或 getProgramAccounts 查询受益于隔离容量,以免影响其他流量。请参阅 专用节点

如何在不破坏应用的情况下切换提供商? 保持端点配置外部化,支持多个端点,并测试故障转移。简短的 提供商选择清单 可帮助您在迁移前比较选项。

在哪里可以看到 OnFinality 支持哪些网络? 浏览 支持的 RPC 网络 并查看 RPC 定价 以了解容量和计划详情。

RPC 知识库

相关 RPC 内容

区块链基础设施Polkadot

Polkadot 验证者:自建 vs. 购买 – 运行节点 vs. 使用 RPC 提供商

Polkadot 验证者通过质押 DOT、验证平行链区块并参与共识来保护中继链。运行验证者需要大量的硬件、管理和质押保证金。对于许多开发者和 dApp 运营者而言,使用托管的 RPC 提供商可以消除运营负担,同时间接支持网络。...

RPC 提供商选择Solana

在Solana质押集成中应关注哪些API

在Solana上集成质押需要使用能暴露账户数据、投票账户以及委托和提取等质押操作的API。合适的提供商应提供对 `getStakeActivation`、`getVoteAccounts` 和交易提交端点的可靠访问。本文涵盖了关键RPC方法以及选择质押dApp的API提供商时需要考虑的因素。...

网络 RPCSolana

Solana RPC 服务器:如何连接、配置和扩展

Solana RPC 服务器是您的应用用来读取账户、提交交易和订阅链上事件的 HTTP 和 WebSocket 接口。本页解释了 Solana RPC 服务器的实际功能、如何将您的工具指向它,以及随着工作负载增长,如何在公共端点、托管 RPC API 或专用节点之间做出选择。 您将找到可用的 cur...

RPC 提供商选择Celo

如何检查 Celo 的可用性,这对你的 dApp 意味着什么?

Celo 的可用性涵盖网络健康状况和你的 dApp 所依赖的 RPC 端点。本文解释了如何监控 Celo 主网状态、评估 RPC 提供商的可靠性,并在你的基础设施中构建弹性。...

网络 RPCBittensor

什么是 Bittensor 网络,如何连接它?

Bittensor 是一个去中心化的机器智能网络,其中独立的子网生产数字商品,如计算、推理和存储,贡献者赚取 TAO。本文解释了网络的架构、如何通过 RPC 端点连接,以及在 Bittensor 上构建时选择基础设施的注意事项。...

网络 RPCBittensor

Bittensor 教程:如何连接、查询并在 Subtensor 上构建

本教程将逐步介绍在 Bittensor 上构建的实用部分:通过 RPC 连接到 Subtensor 链、读取元图和子网状态,以及使用 Python SDK 提交外部交易。它侧重于大多数教程跳过的连接层,以便您的脚本在从本地实验过渡到持续运行的过程中保持可靠。 您将了解如何配置 WebSocket 端...

永远不用担心基础设施

OnFinality 消除了 DevOps 的繁重工作,让您能够更聪明、更快地构建。

开始