如何获取对象数据
受众: 首次实现 Sui 读取操作的开发者。
目标: 编写一个 Node.js 脚本,用于从 Sui devnet 检索并检查原始对象数据。
概述
在本教程中,您将使用 SuiClient 执行 读取操作。您将向 Sui devnet 查询一个链上的 非同质化代币(NFT)对象,以检查其属性。
您将构建的内容:
一个轻量级的 Node.js 脚本,用于连接网络、根据对象 ID 请求对象,并打印 JSON 响应。
先决条件
- Node.js: v18.0.0 或更高版本。
- 包管理器:
npm或yarn。 - 终端: 基本的命令行操作技能。
1. 设置项目
-
创建并进入新目录:
Terminalmkdir sui-data-fetcher && cd sui-data-fetcher -
初始化 Node 项目并配置为 ES 模块:
Terminalnpm init -ynpm pkg set type="module" -
安装 Sui TypeScript SDK:
Terminalnpm 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 参数。若要探索可用的查询参数并继续学习:
- 请查阅
getObjectAPI 参考文档,了解所有可用的响应选项和过滤条件。 - 参阅 如何获取多个对象 和 如何获取拥有的对象 了解批量查询。
- 前往下一篇教程 使用写入操作发送交易,以构建并执行链上状态变更。