如何使用 Metaplex 的 DAS API 入门

  • QuickNode
  • 发布于 2024-09-25 15:17
  • 阅读 31

本文介绍了如何使用 Metaplex 的数字资产标准 (DAS) API 从 Solana 区块链获取 NFT 数据,包括标准 NFT 和压缩 NFT。文章详细说明了如何设置项目、安装依赖项、创建 Umi 实例以及编写脚本来获取 NFT 数据。

概述

随着 Solana 上越来越多的 NFT 标准的发展,包括最近推出的压缩 NFT,跟踪获取 NFT 数据的不同方式可能会变得困难。“Metaplex 数字资产标准 (DAS) API 表示了与 Solana 上数字资产交互的统一接口,支持标准 (Token Metadata) 和压缩 (Bubblegum) 资产。该 API 定义了一组方法,使资产数据可访问。在大多数情况下,数据是使用 Metaplex 数字资产 RPC 基础设施进行索引的。” 来源: https://github.com/metaplex-foundation/digital-asset-standard-api

本指南将教你如何使用 DAS QuickNode Marketplace 附加组件 从 Solana 区块链获取 NFT 数据。

你将要做的

编写几个脚本,从 Solana 区块链使用 DAS API 获取 NFT 数据。

你将需要的

获取 DAS 附加组件

如果你还没有,你需要一个拥有 Solana 端点的 QuickNode 账户。你可以 在这里注册账户

新 Solana 节点

要使用 DAS API,你需要一个安装了 DAS 附加组件的 Solana 端点。你可以在你的端点页面上安装 DAS 附加组件 ( https://dashboard.quicknode.com/endpoints/YOUR_ENDPOINT_ID/add-ons )。

DAS 附加组件

请确保在继续之前将数字资产标准附加组件添加到你的端点。

本指南中使用的依赖项
依赖项 版本
@metaplex-foundation/digital-asset-standard-api ^1.0.0
@metaplex-foundation/umi ^0.8.10
@metaplex-foundation/umi-bundle-defaults ^0.8.10
@solana/web3.js ^1.X

开始吧!

创建新项目

mkdir das-demo && cd das-demo && echo > app.ts

安装 Solana Web3 依赖项:

yarn init -y
yarn add @metaplex-foundation/umi @metaplex-foundation/umi-bundle-defaults @metaplex-foundation/digital-asset-standard-api @solana/web3.js@1

npm init -y
npm install --save @metaplex-foundation/umi @metaplex-foundation/umi-bundle-defaults @metaplex-foundation/digital-asset-standard-api @solana/web3.js@1

导入依赖项

在你选择的代码编辑器中打开 app.ts,在第 1 行导入以下内容:

import { PublicKey, Umi, publicKey } from '@metaplex-foundation/umi';
import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
import { dasApi } from '@metaplex-foundation/digital-asset-standard-api';

简化调试的日志

你现在可以访问 RPC 端点的日志,帮助你更有效地排除问题。如果你在 RPC 调用中遇到问题,只需检查 QuickNode 仪表板中的日志,即可快速识别和解决问题。有关日志历史限制的更多信息,请查看 我们的定价页面

这些导入将允许我们创建一个 Umi 的实例(Metaplex 的 JS 框架),并使用 DAS API 获取 NFT 数据。

创建 Umi 实例

为了使用 JS 框架查询 DAS API,我们必须使用我们的端点创建 Umi 的实例。Umi 是一个让与 Solana 区块链交互变得简单的 JS 框架。它提供了一组工具,帮助你在 Solana 上构建。在第 5 行,定义你的端点并建立 Umi 实例:

const ENDPOINT = 'https://example.solana-mainnet.quiknode.pro/123456/'; // <--- 用你的端点替换
const UMI = createUmi(ENDPOINT).use(dasApi());
const COMPRESSED_NFT = publicKey('52sbcUW4mXp8k8rruxgKMD6Kn6FbZoKeemLsyz7xyteW'); // <--- 用任何压缩 NFT 替换
const CREATOR = publicKey('7zL7HVn85F5yFT6XM3BsJcQF7PBcNE7R2BT5GyfunpKe'); // <--- 用任何创作者替换
const OWNER = publicKey('E645TckHQnDcavVv92Etc6xSWQaq8zzPtPRGBheviRAk'); // <--- 用任何所有者替换
const COLLECTION = publicKey('J2ZfLdQsaZ3GCmbucJef3cPnPwGcgjDW1SSYtMdq3L9p') // <--- 用任何集合替换

我们的 Umi 实例将用于使用 dasApi() 插件查询 DAS API。 我们还定义了一些公共密钥,可以用来进行测试查询:

  • 一个压缩 NFT ID
  • 一个创作者的公共密钥
  • 一个 NFT 所有者的公共密钥
  • 一个集合的公共密钥

随意用你自己的公共密钥替换这些。让我们构建一些查询。

获取资产

DAS API 包括一个 DasApiAsset 接口,定义了以下属性:

  • 资产类型
  • 资产 ID
  • 元数据
  • 权限
  • 压缩详情
  • 分组详情
  • 版权
  • 创建者
  • 所有权
  • 可变性
  • 以及更多

要获取资产,我们需要提供资产的 ID。在代码编辑器中添加以下 fetchAsset() 函数:

async function fetchAsset(umi: Umi, assetId: PublicKey<string>) {
    try {
        const asset = await umi.rpc.getAsset(assetId);
        console.log(asset);
    } catch (e) {
        console.error(e);
    }
}

这个函数将从 DAS API 中获取一个资产并将其记录到控制台。你可以通过添加以下内容来测试它:

fetchAsset(UMI, COMPRESSED_NFT);

你可以通过在终端中运行 ts-node app 来测试你的代码。你应该会看到如下内容:

das-demo % ts-node app
{
  interface: 'V1_NFT',
  id: '52sbcUW4mXp8k8rruxgKMD6Kn6FbZoKeemLsyz7xyteW',
  content: {
    '$schema': 'https://schema.metaplex.com/nft1.0.json',
    json_uri: 'https://prod-tensor-creators-s3.s3.us-east-1.amazonaws.com/drop/e6ed698b-ae10-42f9-8d2e-16b8d844439e/5e1bf2ee-5d9e-4496-935a-e222c22de2db',
    files: [ [Object] ],
    metadata: {
      attributes: [Array],
      description: '很久很久以前,在遥远的 Solaxy...',
      name: 'Tensorian #9207',
      symbol: 'TNSRNS',
      token_standard: 'NonFungible'
    },
## ...

干得好!你已经成功从 DAS API 中获取了一个资产。随意在 getAsset() 函数上 ctrl/cmd + 点击以深入了解该函数和 DasApiAsset 接口(或访问其文档 在这里)。你可以解析数据以获取所需的信息。

获取资产证明

要获取压缩 NFT 的 Merkle 证明(我们将在另一篇指南中深入探讨压缩 NFT 的细节),你可以使用 getAssetProof 方法(这可能在执行 NFT 操作时是必需的,例如转移)。证明包括资产的 rootleaftree_idproofnode_index。要获取资产的证明,请添加以下 fetchAssetProof() 函数:

async function fetchAssetProof(umi: Umi, assetId: PublicKey<string>) {
    try {
        const proof = await umi.rpc.getAssetProof(assetId);
        const { root, leaf, tree_id, node_index } = proof;
        console.table({ root, leaf, tree_id, node_index });
    } catch (e) {
        console.error(e);
    }
}

fetchAssetProof(UMI, COMPRESSED_NFT);

你可以通过在终端中运行 ts-node app 来测试你的代码。你应该会看到如下内容:

das-demo % ts-node app
┌────────────┬────────────────────────────────────────────────┐
│  (index)   │                     Values                     │
├────────────┼────────────────────────────────────────────────┤
│    root    │ 'BgG1eLjuR8SqyihX4oVdhVMxG9S5JYDmH8GaCwGpsgUB' │
│    leaf    │ 'Ckabr29yAYFaivxwPvL6CZtGryx2WS4vzs9QRssp8Ujy' │
│  tree_id   │ '4gcgGDUqyUQZRzA3MDKGAJARq8qzUpeJ4NMsHtPngjxM' │
│ node_index │                     18090                      │
└────────────┴────────────────────────────────────────────────┘

做得好!

获取资产组

DAS API 提供了一些方法来获取资产组。我们来看看其中的一些方法。

按创作者

如果你想查询特定创作者创建的所有 NFT,可以使用 getAssetsByCreator 方法。该方法接受创作者的公共密钥并返回 DasApiAsset 对象的数组。由于此查询可能返回许多结果,我们还可以指定限制和页码。这可以减少响应时间并使解析数据/分页结果更容易。此外,我们可以指定是否仅返回经过验证的资产(创造者已签名为真实的资产)。

要获取创作者的资产,添加以下 fetchAssetsByCreator() 函数:

async function fetchAssetsByCreator(umi: Umi, creator: PublicKey<string>) {
    try {
        const assets = await umi.rpc.getAssetsByCreator({
            creator,
            onlyVerified: false,
            limit: 10,
            page: 1,
        });
        console.log(assets);

    } catch (e) {
        console.error(e);
    }
}

fetchAssetsByCreator(UMI, CREATOR);

按所有者

同样,我们可以通过使用 getAssetsByOwner 方法获取用户持有的所有资产。该方法接受所有者的公共密钥并返回 DasApiAsset 对象的数组。我们还可以指定限制和页码。

async function fetchAssetsByOwner(umi:Umi, owner: PublicKey<string>) {
    try {
        const assets = await umi.rpc.getAssetsByOwner({
            owner,
            limit: 10,
            page: 1
        });
        console.log(assets);

    } catch (e) {
        console.error(e);
    }
}
fetchAssetsByOwner(UMI, OWNER);

按集合

最后,我们可以使用 getAssetsByGroup 方法获取集合中的所有资产(此方法似乎名为 group 而不是 collection,以便将来允许其他类型的分组)。该方法接受集合的公共密钥并返回 DasApiAsset 对象的数组。我们还可以指定限制和页码。

async function fetchAssetsByGroup(umi: Umi, group: string) {
    try {
        const assets = await umi.rpc.getAssetsByGroup({
            groupKey: 'collection',
            groupValue: group
        });
        console.log(assets);

    } catch (e) {
        console.error(e);
    }
}

fetchAssetsByGroup(UMI, COLLECTION);

通过在终端中运行 ts-node app 测试每一个。随意尝试不同的地址以及解析数据以获取所需信息!

继续构建

有关如何使用 DAS API 的更多信息以及探索其他方法(包括 cURL 请求和其他编程语言),请查看我们的 DAS API 文档

如果你遇到问题、有问题或只是想谈谈你正在构建的内容,请在 DiscordTwitter 上给我们留言!

我们 ❤️ 反馈!

告诉我们你的想法,如果你有任何反馈或新的主题请求。我们很乐意听取你的意见。

资源

  • 原文链接: quicknode.com/guides/sol...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
QuickNode
QuickNode
江湖只有他的大名,没有他的介绍。