跳到主要内容

如何获取对象数据

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


概述​

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

您将构建的内容:
一个轻量级的 Node.js 脚本,用于连接网络、根据对象 ID 请求对象,并打印 JSON 响应。

先决条件​

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

1. 设置项目​

  1. 创建并进入新目录:

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

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

    Terminal
    npm install @mysten/sui

2. 初始化客户端​

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

index.js
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 中:

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" 决定节点返回的数据量。
// 我们严格请求 content (字段) 和 type,以保持较小的载荷。
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. 运行与验证​

在终端中运行脚本:

Terminal
node index.js

理解输出结果​

您应该会看到类似如下的 JSON 结构:

Output
{
"objectId": "0x7d...",
"version": "120",
"digest": "AuF...",
"type": "0x2::devnet_nft::DevNetNFT",
"content": {
"dataType": "moveObject",
"fields": {
"name": "Sui DevNet NFT",
"description": "An NFT created by the Sui DevNet",
"url": "ipfs://..."
}
}
}
  • digest: 验证对象版本的哈希值。
  • type: 具体的 Move 语言类型定义(Package::Module::Type)。
  • content.fields: 实际存储在链上的数据(例如 NFT 的名称、描述和图片 URL)。

后续步骤​

您已成功获取了原始数据,但您可能已经注意到了代码中的 options 参数。若要探索可用的查询参数并继续学习: