跳到主要内容

如何获取对象数据

受众: 正在实现首个 Sui 读取操作的开发者。 **目标:**编写一个 Node.js 脚本,用于从 Sui devnet 检索并查看原始对象数据。


概述

在本教程中,我们将使用 SuiClient 执行 读取操作,向 Sui devnet 查询特定的 非同质化代币 (NFT) 对象,以查看其链上属性。

构建内容: 一个轻量级的 Node.js 脚本,用于连接网络、通过 ID 请求对象,并输出 JSON 响应。

先决条件

  • Node.js: v18.0.0 或更高版本。
  • 包管理器: npmyarn
  • 终端: 具备基本的命令行操作技能。

步骤 1:项目设置

  1. 创建并进入新目录:

    mkdir sui-data-fetcher && cd sui-data-fetcher
  2. 初始化 Node 项目并配置为 ES 模块:

    npm init -y
    npm pkg set type="module"
  3. 安装 Sui TypeScript SDK:

    npm install @mysten/sui

步骤 2:初始化客户端

创建一个名为 index.js 的文件。首先导入客户端并将其连接到 devnet

import { SuiClient, getFullnodeUrl } from '@mysten/sui/client';

// 配置
const NETWORK = 'devnet';

// 1. 初始化客户端
// getFullnodeUrl 会自动解析 'devnet' 的正确 RPC 端点
const client = new SuiClient({
url: getFullnodeUrl(NETWORK),
});

console.log(`✅ 已连接到 Sui ${NETWORK}`);

步骤 3:编写查询逻辑

查询一个已知的 "devnet 非同质化代币 (NFT)" 对象。

备注

devnet 上,网络重置期间对象常会被删除。如果下面的 ID 无法使用,您可能需要从 Sui Explorer 查找一个新的对象 ID。

将以下代码添加到 index.js 中:

// devnet 上的已知对象 ID(示例 NFT)
const TARGET_OBJECT_ID = '0x7d6539b7a423b035109b823e20c641c73defd23b8f3107b38d1d368688c2797c';

async function fetchObjectData() {
try {
console.log(`🔍 查询对象:${TARGET_OBJECT_ID}...`);

// 2. 执行数据获取
const response = await client.getObject({
id: TARGET_OBJECT_ID,
// "options" 决定节点返回的数据量。
// 我们仅请求内容(字段),以保持数据包大小较小。
options: {
showContent: true,
showType: true
}
});

// 3. 处理响应
if (response.error) {
throw new Error(`对象未找到:${response.error.code}`);
}

console.log('--- 对象数据 ---');
console.dir(response.data, { depth: null, colors: true });

} catch (err) {
console.error('❌ 查询失败:', err.message);
}
}

fetchObjectData();

第 4 步:运行与验证

在终端中运行脚本:

node index.js

理解输出结果

您应该会看到如下所示的 JSON 结构:

{
"objectId": "0x7d...",
"version": "120",
"digest": "AuF...",
"type": "0x2::devnet_nft::DevNetNFT",
"content": {
"dataType": "moveObject",
"fields": {
"name": "Sui DevNet NFT",
"description": "由 Sui DevNet 创建的 NFT",
"url": "ipfs://..."
}
}
}
  • digest:用于验证对象版本的哈希值。
  • type:具体的 Move 语言类型定义(Package::Module::Type)。
  • content.fields:存储在链上的实际数据(例如 NFT 的名称 and 地址)。

后续步骤

您已成功获取原始数据,但您可能注意到了代码中的 options 参数。要准确了解您可以请求哪些数据,请查阅 API 参考文档。