跳至内容
0%

使用 Alchemy 的 NFT API 中 getNFTs 的 3 个重要理由

Alchemy team headshot

作者 Alchemy

发布于 2022年8月12日2 分钟阅读

如果你正在构建一个 NFT dApp,Alchemy 的 NFT API 可以通过 getNFTs 和 getOwnersForToken 等 get 请求,帮助你为用户构建更好的体验。下面我们来看看这些方法的作用,以及为什么应该在 NFT 项目中使用它们。

getNFTs 是什么?

getNFTs 是一个 NFT API 端点,允许开发者获取属于某个所有者地址的全部 NFT 列表,包括 ERC-721 和 ERC-1155 代币。你可以输入所有者地址或 ENS 名称,API 会返回该地址拥有的所有 NFT 列表及其元数据。

getNFTs 的示例用例

getNFTs 是最通用的 NFT API 端点之一,可用于多种 web3 产品,包括用于展示 NFT 的钱包、NFT 交易市场、NFT 分析工具、NFT 稀有度排名网站、Discord 机器人等许多场景。

例如,当你打开 OpenSea 账户的个人主页时,可以看到自己拥有哪些 NFT。这背后正是通过一个使用 getNFTs 的端点来返回你钱包地址所拥有的 NFT 及相关元数据。

更广泛地说,getNFTs 可以用于任何需要知道用户拥有什么的场景。例如,getNFTs 请求可以为 NFT 分析工具(如稀有度排名网站)或 Discord 机器人提供数据支持,让用户知道刚刚哪个 NFT 被出售、在哪个市场出售,以及其他相关元数据。

getOwnersForToken 是什么?

getOwnersForToken 是一个 API,允许你指定一个 NFT 智能合约,返回该代币的所有所有者列表。对于 ERC-721 代币,getOwnersForToken 只会返回单一所有者;而对于可以有多个所有者的 ERC-1155 代币,getOwnersForToken 可以返回多个钱包地址。

getOwnersForToken 的示例用例

getOwnersForToken 有多种用例,包括空投、NFT 所有权变更时的缓存刷新,以及头像验证。

如果你在运营一个 NFT 铸造项目,想要向某个特定代币的所有者进行空投,getOwnersForToken 可以帮你确定这份白名单。

同样,如果你使用某个 NFT 作为头像,想验证其所有权,也可以用这个 API 来检查所有权是否发生了变化。

如果没有 getOwnersForToken,这些用例都没有便捷的解决方案,因为开发者需要解析整条区块链,才能弄清楚某个 NFT 的所有权是如何随时间变化的。而现在,借助 Alchemy 的 NFT API,getOwnersForToken 只需一次请求即可完成这项任务。

使用 Alchemy 的 NFT API 获取 NFT 的 3 个理由

在获取 NFT 方面,使用 Alchemy 的 NFT API 构建 是最佳选择,原因在于其覆盖范围、垃圾数据过滤和图片缓存能力。

1. NFT 覆盖范围

Alchemy 的 NFT API 拥有最广泛的 NFT 覆盖范围。这本身是一项挑战,因为 NFT 元数据可能存在于链上、链下,并且格式不一致,这导致在准确记录元数据时会遇到大量边界情况。

NFT 元数据存在于多种不同的格式和多种不同的环境中,这使得准确确定 NFT 元数据成为一个棘手的问题。

Alchemy 之所以能够提供最全面的 NFT 覆盖,是因为设计了多条代码路径来应对大量常见情况,包括但不限于处理以下格式的元数据:

  • 链上或链下的 JSON 格式
  • 链上或链下的 SVG 格式
  • 链上或链下的 UTF-8 格式

Alchemy 的 NFT API 还能处理 SVG、使用 Pinata 等 IPFS 网关的 NFT、指向图片所在链下位置的 URI、以 base64 编码的图片,以及其他多种实现方式。

我们如何获取 NFT 元数据?

获取 NFT 元数据是一个复杂的、存在诸多变化的过程,但 Alchemy 的 NFT API 提供了一种简单的解决方案,让你无需为每种用例单独耗费宝贵时间去思考。

要获取一个 NFT 的元数据,我们首先需要一个 ID,它由合约地址和代币 ID 组成,二者共同构成该 NFT 的唯一标识符。

系统会用这个 ID 去查询 Alchemy 的 NFT 缓存,看信息是否已经存在。如果缓存中没有,我们就需要判断这是哪种类型的 NFT,以及该合约遵循哪种标准。

Alchemy 目前支持两种主要的 NFT 标准:ERC-721 和 ERC-1155 智能合约。

Alchemy Dashboard Demo
Free video demo

查看 Alchemy dashboard 实际操作

30 分钟引导演示:现场演示 dashboard 中的每个工具。

Watch the demo

一个真正符合 ERC-721 标准的合约应当提供一套方案,包含 NFT 的名称、属性(包括 name、description 和 image),并支持一些额外的方法。

理论上,你应该可以通过一次 support interface 调用来判断某个 NFT 是否支持该标准,合约会给出相应的回答。

由于这些合约是可编程的,开发者可能会有意或无意地将合约编写成给出错误的响应,这意味着我们还需要查看合约的其他属性,以确认它是否真的支持该接口。

一旦确定某个智能合约确实是一个 NFT,你就可以向该合约或代币询问 元数据的位置。对于 ERC721 合约,你调用的方法是 token URI 方法;而对于 1155 合约,这个方法则直接称为 URI 方法。

这个 URI 指向互联网上或链上存放 NFT 元数据的位置。有些合约在被问及该位置时会指向一个文件,而另一些则会错误地直接在 token URI 中提供元数据。

如果 URI 指向另一个位置,我们就需要跟随这个链接,通常会到达某个第三方网站或服务器,而这本身也带来了一系列问题。这些网站可能出现故障、含有恶意内容,或存在速率限制,但 Alchemy 能够绕开这些问题,干净利落地返回信息。

由于 ERC-721 和 ERC-1155 智能合约存在如此多不同的实现方式,实现广泛而准确的数据覆盖一直是一项持续存在的挑战。使用 Alchemy 的 NFT API 是确保已知 NFT 获得最大覆盖率的最佳方式。

2. NFT 垃圾数据过滤

Alchemy 为 getNFTs 提供的垃圾数据过滤功能,可以过滤掉垃圾 NFT——即未经请求的空投,或不符合 ERC-721 与 ERC-1155 标准的 NFT 智能合约,从而让构建工作变得更轻松。

除了 getNFTs 自带的过滤选项之外,Alchemy 新推出的 getSpamContracts 会返回所选链上所有被判定为垃圾数据的 ERC-721 和 ERC-1155 合约列表。

同样,isSpamForContract 可以检查某个特定的 NFT 智能合约是否已被归类为垃圾数据。你可以按合约地址进行筛选,这也意味着你可以查找某个特定 NFT 的所有者,并检查这是否是他们拥有的唯一一个 NFT。

Alchemy 是唯一提供 NFT 垃圾数据过滤功能的平台,如果被垃圾数据拖累,想要顺畅地参与 NFT 相关活动是非常困难的。

3. NFT 图片缓存

Alchemy 的图片缓存能够让 NFT 图片的响应更快、加载更快。 虽然 NFT 媒体资源传统上是通过 IPFS、去中心化存储服务商或第三方服务器提供的,但开发者在使用这些端点时常常会遇到加载缓慢和超时错误的问题。Alchemy 通过 Cloudinary 缓存 NFT 图片,并从自己的缓存中提供 NFT URL,从而加快获取速度,解决了这一问题。

我该选择哪个 NFT API?

得益于 Alchemy 强大的端点(包括垃圾数据过滤、getFloorPrice 和 reingestContract)、最佳的 NFT 覆盖范围(包括对 Crypto Punks 的支持),以及最准确的数据,Alchemy 的 NFT API 是 web3 开发者的最佳选择。

注册一个 Alchemy 账户,看看 Alchemy 的 NFT API 如何帮助你构建下一个 NFT 项目,或者进一步了解 Alchemy 如何助力你的 web3 之旅。

Background gradient

构建区块链应用

Alchemy 将最强大的 Web3 开发者产品和工具与资源、社区及专业支持结合在一起。